Chinaunix首页 | 论坛 | 博客
  • 博客访问: 876634
  • 博文数量: 149
  • 博客积分: 3671
  • 博客等级: 中校
  • 技术积分: 1701
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-03 16:52
文章分类

全部博文(149)

文章存档

2011年(57)

2010年(92)

分类: 嵌入式

2011-05-09 09:36:23

在移植完u-boot支持nand之后,我开始了引导内核,我的内核版本是2.6.37.2,

1,制作uboot支持的内核镜像,u-boot/tools/mkimage这个工具为你的内核加上u-boot引导所需要的文件头,具体做法如下:

./mkimage -n 'linux-2.6.37' -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008040 -d zImage zImage.img

 

2,通过mini2440的norflash中的suppervivi,选择a,烧写u-boot,到nandflash。

 

3,使用suppervivi,将zImage.img烧写到nandflash的0x60000偏移处,大小为0x21733c,烧写到nand的位置可以通过vivi下的part show命令查看。

 

4,烧写制作好的yaffs2文件系统。

 

5,进入u-boot,运行nand read 0x30008000 0x60000 0x21733c,这样就把nand中偏移为0x60000,大写为0x21733c的内容读取到内存0x30008000的地址中去。

 

6,运行bootm 0x30008000命令,就会解压引导内核了。

 

当然还可以使用tftp的方式烧写引导内核,详细的内容在转载的文章:U-BOOT下使用bootm引导内核方法。

 

7,过程中遇到的错误总结:

当烧写完内核引导时出现arch_number内核与u-boot不匹配,用bdinfo命令查看u-boot端的ID :

[u-boot@MINI2440]# bdinfo
arch_number = 0x0000016A

基本上可以确定从U-boot得到的ID为 362 (0x0000016a), 内核中的 Machine ID 为:
 
linux-2.6.37.2/arch/arm/tools/mach-types
#define MACH_TYPE_MINI2440             1999

在U-boot中添加:
u-boot-1.3.4/include/asm-arm/mach-types.h
#define MACH_TYPE_MINI2440             1999

再查找一下ID为362的Machine是 MACH_TYPE_S3C2440,看来是u-boot没有传递正确的ID。grep一下MACH_TYPE_S3C2440,在如下位置找到原因:

u-boot-1.3.4/board/mini2440/mini2440.c
#if defined(CONFIG_S3C2440)
/* arch number of S3C2440-Board */
     gd->bd->bi_arch_number = MACH_TYPE_S3C2440 ;
#endif

把这里的 MACH_TYPE_S3C2440 改为 MACH_TYPE_MINI2440 就OK了。


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

tianchunlong2011-05-12 09:09:00

gududesiling: 楼主:我想再次确认一遍,是否真正的移植成功了。。。。我一直想去移植uboot,就是害怕,呵呵.....
恩。成功了。能够引导内核

gududesiling2011-05-11 23:30:41

楼主:我想再次确认一遍,是否真正的移植成功了。。。。我一直想去移植uboot,就是害怕,呵呵