打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
u-boot和linux的机器码

u-boot和linux的机器码

分类: Linux 36人阅读 评论(1) 收藏 举报

启动u-boot后,用bootm命令来引导内核(执行bootm 0x30008000),但是执行后,卡住了,无法启动内核,现象如下:
 
Starting kernel ...                      
Uncompressing Linux.............................................................
Error: unrecognized/unsupported machine ID (r1 = 0x000000c1).                 
Available machine support:                         
ID (hex)        NAME                                                           
000000**        ****
 
从这里的提示信息可知,是u-boot的机器码和linux的不相同造成的,u-boot是0x000000c1(193),内核是0x000000**。大多数都是修改的linux内核的机器码,让它们一致即可。
  
先看u-boot的机器码和linux的机器码是在什么地方决定的。
1、 u-boot的机器码是在u-boot的board/fs2410/fs2410.c文件里决定的:

    /* arch number of SMDK2410-Board */
    gd->bd->bi_arch_number = MACH_TYPE_SMDK2410;
 
参照查看u-boot的include/asm-arm/mach-types.h文件,有:
   #define MACH_TYPE_SMDK2410          193
这就是我们上面看到r1 = 0x000000c1(193)的原因。
 
2、 而linux内核的机器码是由arch/arm/mach-s3c2410/mach-smdk2410.c下面的MACHINE_START(SMDK2410, "SMDK2440")中的第一个参数SMDK2410(关键字)决定的:
  
MACHINE_START(SMDK2410, "SMDK2410") /* @TODO: request a new identifier and switch
                                    * to SMDK2410 */
        /* Maintainer: Jonas Dietsche */
        .phys_io        = S3C2410_PA_UART,
        .io_pg_offst    = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,
        .boot_params    = S3C2410_SDRAM_PA + 0x100,
        .map_io         = smdk2410_map_io,
        .init_irq       = s3c24xx_init_irq,
        .init_machine   = smdk2410_init,
        .timer          = &s3c24xx_timer,
MACHINE_END

 
参照查看内核目录下的arch/arm/tools/mach-types.h文件,有:
    smdk2410        ARCH_SMDK2410       SMDK2410        193

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
uboot-与linux内核机器码
Linux2.6.34.2在TQ6410上的移植详解
linux-2.6.35内核配置和网卡驱动添加
MACHINE_START宏(内核启动相关) - 东海的日志 - 网易博客
ARM处理器上的linux内核是怎么启动的
linux2.6移植+根文件系统实验手册
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服