Chinaunix首页 | 论坛 | 博客

OS

  • 博客访问: 2306156
  • 博文数量: 691
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2660
  • 用 户 组: 普通用户
  • 注册时间: 2014-04-05 12:49
个人简介

不浮躁

文章分类

全部博文(691)

文章存档

2019年(1)

2017年(12)

2016年(99)

2015年(207)

2014年(372)

分类: 嵌入式

2016-01-09 15:13:08

uboot的机器码和linux的一致时才能引导。

linux 内核的机器码在 arch/arm/tools/mach-types.h 中,uboot的机器码是在
uboot/include/asm-arm/mach-types.h,只要两者保持一致便可。
linux 内核源码中查看机器码相关文件:
vim arch/arm/mach-s3c2440/mach-smdk2440.c

修改机器码使之与bootloadert的机器码相同,这里使用uboot的机器码为168
vim arch/arm/tools/mach-types

vim arch/arm/tools/Makefile

vim include/asm/mach-types.h

uboot配置相关文件
vim include/asm-arm/mach-types.h

  在u-boot和kernel中都会有一个机器码(即:MACH_TYPE),只有这两个机器码一致时才能引导内核,否则就会出现如下mach的错误信息:

    Error: unrecognized/unsupported machine ID (r1 = 0x0000270f).

    Available machine support:

    ID (hex)   NAME

    0000016a SMDK2440

    Please check your kernel config and/or bootloader.

    这是因为在uboot中的机器码是0x0000270f,即9999,跟linux内核机器码不一致造成的。下面我们来查看一下uboot的机器码:

    a.打开uboot目录下的board/GT2440/GT2440.c文件,找到如下语句:

   
    gd->bd->bi_arch_number = MACH_TYPE_GT2440;

    这里的MACH_TYPE_GT2440就是uboot的机器码,我们查看一下这个码值。

    b.打开uboot目录下的include/asm-arm/mach_types.h文件,在头文件里面找到:

    #define MACH_TYPE_GT2440  9999

    下面我们对uboot和linux内核的机器码作更改使其保持一致。

    1.打开uboot目录下的board/GT2440/GT2440.c文件,将“gd->bd->bi_arch_number = MACH_TYPE_GT2440;”更改为“gd->bd->bi_arch_number = MACH_TYPE_S3C2440;”,此处的机器码值为362;

    2.打开linux内核目录下的arch/arm/mach-s3c2440/mach_smdk2440.c文件,将其“MACHINE_START(S3C2440, "SMDK2440")”中的第一项改为与uboot码值对应的宏,在这里是S3C2440。

    经过上述更改,重新编译后运行就不再出现机器码不匹配的问题了。

阅读(2065) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~