在移植完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了。
|