Chinaunix首页 | 论坛 | 博客
  • 博客访问: 23822
  • 博文数量: 11
  • 博客积分: 60
  • 博客等级: 民兵
  • 技术积分: 111
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-12 15:27
文章分类
文章存档

2013年(11)

我的朋友

分类: LINUX

2013-01-05 20:18:29

本人绝无抄袭之意,只是为了便于自己以及他人学习,如果版主介意,我立即删除!
uboot和linux机器码说明
启动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文件里决定的:
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")
.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
只要保持两个文件(u-boot的board/fs2410/fs2410.c与linux内核的arch/arm/mach-s3c2410/mach-smdk2410.c)参照对象的码值一样就可以了!
再次感谢版主提供知识帮助!
阅读(1807) | 评论(0) | 转发(0) |
1

上一篇:没有了

下一篇:VWare虚拟机下linux系统联网问题

给主人留下些什么吧!~~