内核启动错误Error: unrecognized/unsupported machine ID的解决
这段时间调试linux内核,手里拿到的BSP包和uboot有好几个,用错了uboot和kernel后发现报错Error: unrecognized/unsupported machine ID,做一下简单分析。 linux内核启动时候会读取uboot传来的参数,其中包括MACH_TYPE这个参数,如果uboot传给内核的值与内核定义的不一样,就会报错。解决方法有两个:1.修改uboot
这段时间调试linux内核,手里拿到的BSP包和uboot有好几个,用错了uboot和kernel后发现报错Error: unrecognized/unsupported machine ID,做一下简单分析。
linux内核启动时候会读取uboot传来的参数,其中包括MACH_TYPE这个参数,如果uboot传给内核的值与内核定义的不一样,就会报错。解决方法有两个:1.修改uboot, 2.修改内核。
1.修改uboot
这个值在uboot的板级初始化函数内设置。查看Makefile或者boards.cfg查看板级配置文件所在的目录。一般在board/XXX下。
比如u-boot/board/timll/LSDboard/LSDboard.c
45 /*
46 * Routine: board_init
47 * Description: Early hardware init.
48 */
49 int board_init(void)
50 {
51 DECLARE_GLOBAL_DATA_PTR;
52
53 gpmc_init(); /* in SRAM or SDRAM, finish GPMC */
54 /* board id for Linux */
55 gd->bd->bi_arch_number = MACH_TYPE_OMAP3_LSD;
56 /* boot param addr */
57 gd->bd->bi_boot_params = (OMAP34XX_SDRC_CS0 + 0x100);
58
59 return 0;
60 }
第55行 gd->bd->bi_arch_number = MACH_TYPE_OMAP3_LSD;就是在设置ID号,修改这里的值和linux内核的相同就可以了。MACH_TYPE_OMAP3_LSD的定义在arch/arm/include/asm/mach-types.h。
2.修改内核
linux内核中MACH_TYPE_XXXX的宏定义在include/asm-arm/mach-types.h内,具体使用哪个,由配置文件决定。
2535 #define MACH_TYPE_OMAP3_DEVKIT8500 2793
2536 #define MACH_TYPE_OMAP3_LSD 2794
2537 #define MACH_TYPE_OMAP3_SBC8510 2795
。。。
。。。
32791 #ifdef CONFIG_MACH_OMAP3_LSD
32792 # ifdef machine_arch_type
32793 # undef machine_arch_type
32794 # define machine_arch_type __machine_arch_type
32795 # else
32796 # define machine_arch_type MACH_TYPE_OMAP3_LSD
32797 # endif
32798 # define machine_is_omap3_LSD() (machine_arch_type == MACH_TYPE_OMAP3_LSD)
32799 #else
32800 # define machine_is_omap3_LSD() (0)
32801 #endif
可以直接修改这边的代码,增加自定义的类型。
更多推荐
所有评论(0)