u-boot的机器码和linux的一致,才能引导。
——小白记录,谨慎参考,敬请指导
开发板:讯为exynos4412
linux内核的机器码,在arch/arm/tools/mach-types.h中,u-boot的机器码是在u-boot/include/asm-arm/mach-types.h文件中,只要两者保持一致便可,所以可以任意修改其中之一。
通过查询linux内核 arch/arm/tools/mach-types.h
smdkc210 MACH_SMDKC210 SMDKC210 2838 //机器码为2838
但是很遗憾,当我查询uboot中对应的机器码时:u-boot/include/asm-arm/mach-types.h时,并没有找到2838这一机器码,最大仅仅到2718,郁闷了!
.
进过进一步了解,在/board/samsung/smdkc210/smdkc210.c文件的board_init中找到了重点,下面给出代码分析:
int board_init(void)
{
DECLARE_GLOBAL_DATA_PTR;
#ifdef CONFIG_DRIVER_SMC911X
smc9115_pre_init();
#endif
#ifdef CONFIG_DRIVER_DM9000 /*网卡支持*/
// dm9000_pre_init();
#endif
gd->bd->bi_arch_number = MACH_TYPE;//机器码,在调用linux内核中用到
gd->bd->bi_boot_params = (PHYS_SDRAM_1+0x100);//启动内核时,参数存放位置,这个在构造标记列表时用到
return 0;
}
查询 /include/configs/itop4412.h得到对MACH_TYPE的定义。
#define MACH_TYPE 2838 //(S5PC210:2838, S5PV310:2925)
到此,终于查到了uboot里面配置的机器码,原来是在这藏着呢,下面查看内核里面的机器码!