两块板子,BOOT_DEVICE 都是不正确的,一块的rom_params是0x4030CFD8,对应的BOOT_DEVICE是0x58,另外一块rom_params是0x40301ecc,对应的BOOT_DEVICE是0xb2,这是参数都不对,是什么原因导致的?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
两块板子,BOOT_DEVICE 都是不正确的,一块的rom_params是0x4030CFD8,对应的BOOT_DEVICE是0x58,另外一块rom_params是0x40301ecc,对应的BOOT_DEVICE是0xb2,这是参数都不对,是什么原因导致的?
跟下代码,BOOT_DEVICE这个值是怎么得到的呢?是通过control module的sysboot值得到的吗?
你说的两个都不对,那么正确的应该是啥,应该会有个switch分支来辨识走哪个启动方式吧?
如果这里走错了,是读进来的boot_device值就错了,还是在某个逻辑判断的地方就错了?
1.boot_device是由boot-common.c里的rom_params确定的
void save_omap_boot_params(void)
{
u32 rom_params = *((u32 *)OMAP_SRAM_SCRATCH_BOOT_PARAMS);
u8 boot_device;
u32 dev_desc, dev_data;
if ((rom_params < NON_SECURE_SRAM_START) ||
(rom_params > NON_SECURE_SRAM_END))
return;
gd->arch.omap_boot_params.omap_bootdevice = boot_device =
*((u8 *)(rom_params + BOOT_DEVICE_OFFSET));
~~~~~~~~
2.确实是有个SWITCH分支来辨别走哪个启动方式的,是读进来的值就是错的。
在spl.h中对BOOT_DEVICE的值进行了定义
#if defined(CONFIG_TI816X)
#define BOOT_DEVICE_XIP 2
#define BOOT_DEVICE_NAND 3
#define BOOT_DEVICE_MMC1 6
#define BOOT_DEVICE_MMC2 5
#define BOOT_DEVICE_UART 0x43
#elif defined(CONFIG_AM43XX)
#define BOOT_DEVICE_NOR 1
#define BOOT_DEVICE_NAND 5
#define BOOT_DEVICE_MMC1 7
#define BOOT_DEVICE_MMC2 8
#define BOOT_DEVICE_SPI 10
#define BOOT_DEVICE_USB 13
#define BOOT_DEVICE_UART 65
#define BOOT_DEVICE_USBETH 69
#define BOOT_DEVICE_CPGMAC 71
#else
#define BOOT_DEVICE_XIP 2
#define BOOT_DEVICE_NAND 5
#if defined(CONFIG_AM33XX)
#define BOOT_DEVICE_MMC1 8
#define BOOT_DEVICE_MMC2 9 /* eMMC or daughter card */
#elif defined(CONFIG_TI814X)
#define BOOT_DEVICE_MMC1 9
#define BOOT_DEVICE_MMC2 8 /* ROM only supports 2nd instance */
#endif
#define BOOT_DEVICE_SPI 11
#define BOOT_DEVICE_UART 65
#define BOOT_DEVICE_USBETH 68
#define BOOT_DEVICE_CPGMAC 70
#endif
#define BOOT_DEVICE_MMC2_2 0xFF
#if defined(CONFIG_AM33XX)
#define MMC_BOOT_DEVICES_START BOOT_DEVICE_MMC1
#define MMC_BOOT_DEVICES_END BOOT_DEVICE_MMC2
#elif defined(CONFIG_AM43XX)
#define MMC_BOOT_DEVICES_START BOOT_DEVICE_MMC1
#ifdef CONFIG_SPL_USB_SUPPORT
#define MMC_BOOT_DEVICES_END BOOT_DEVICE_USB
#else
#define MMC_BOOT_DEVICES_END BOOT_DEVICE_MMC2
#endif
#elif defined(CONFIG_TI81XX)
#define MMC_BOOT_DEVICES_START BOOT_DEVICE_MMC2
#define MMC_BOOT_DEVICES_END BOOT_DEVICE_MMC1
#endif
#endif
switch函数在spl.c中
boot_device = spl_boot_device();
debug("boot device - %d\n", boot_device);
switch (boot_device) {
#ifdef CONFIG_SPL_RAM_DEVICE
case BOOT_DEVICE_RAM:
spl_ram_load_image();
break;
#endif
#ifdef CONFIG_SPL_MMC_SUPPORT
case BOOT_DEVICE_MMC1:
case BOOT_DEVICE_MMC2:
case BOOT_DEVICE_MMC2_2:
puts("hello");
spl_mmc_load_image();
break;
#endif
#ifdef CONFIG_SPL_NAND_SUPPORT
case BOOT_DEVICE_NAND:
spl_nand_load_image();
break;
#endif
#ifdef CONFIG_SPL_ONENAND_SUPPORT
case BOOT_DEVICE_ONENAND:
spl_onenand_load_image();
break;
#endif
#ifdef CONFIG_SPL_NOR_SUPPORT
case BOOT_DEVICE_NOR:
spl_nor_load_image();
break;
#endif
#ifdef CONFIG_SPL_YMODEM_SUPPORT
case BOOT_DEVICE_UART:
spl_ymodem_load_image();
break;
#endif
#ifdef CONFIG_SPL_SPI_SUPPORT
case BOOT_DEVICE_SPI:
spl_spi_load_image();
break;
#endif
#ifdef CONFIG_SPL_ETH_SUPPORT
case BOOT_DEVICE_CPGMAC:
#ifdef CONFIG_SPL_ETH_DEVICE
spl_net_load_image(CONFIG_SPL_ETH_DEVICE);
#else
spl_net_load_image(NULL);
#endif
break;
#endif
#ifdef CONFIG_SPL_USBETH_SUPPORT
case BOOT_DEVICE_USBETH:
spl_net_load_image("usb_ether");
break;
#endif
#ifdef CONFIG_SPL_USB_SUPPORT
case BOOT_DEVICE_USB:
spl_usb_load_image();
break;
#endif
#ifdef CONFIG_SPL_SATA_SUPPORT
case BOOT_DEVICE_SATA:
spl_sata_load_image();
break;
#endif
default:
debug("SPL: Un-supported Boot Device\n");
hang();
}
首先问下,您板子的sysboot是怎么设置的?板子上都支持什么启动介质?
如果是这样的话,我认为是可以理解的,因为你目前是通过中断的方式进去的,而非通过rom code走完启动辨识的流程,引导启动的。所以你并没有成功的从列表中的某一种方式来正常启动,因此boot device的值没有被设置成功。
于此不一样的是,你可以尝试任一种启动介质,比如SD卡,NAND,或者是串口也可以,而非JTAG这种debug的方式load进去,而是让rom code正常的通过启动介质成功,启动,这样你的boot device的值就会得到一个正确的值。
如果是Bootrom不能成功的从sysboot设定的启动顺序从启动介质上加载u-boot程序,那么也请先检查下sysboot上的电平,1是不是对应的3.3V