內核啓動錯誤Error: unrecognized/unsupported machine ID的解決

      這段時間調試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
可以直接修改這邊的代碼,增加自定義的類型。

發佈了38 篇原創文章 · 獲贊 35 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章