微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > U-boot1.1.6移植到TQ2440开发板(下)

U-boot1.1.6移植到TQ2440开发板(下)

时间:11-25 来源:互联网 点击:
这两天在移植u-boot,花了两天完全是因为卡在nandflash里了,关于nandflash下次再写吧,这次记录一下刚刚遇到的一个问题吧。。。呵呵。

u-boot在引导linux启动,需要传递环境变量等配置

设置一些宏定义,在include/configs文件下的配置文件里添加

#define CONFIG_SETUP_MEMORY_TAGS 1
#define CONFIG_CMDLINE_TAG 1
#define CONFIG_INITRD_TAG 1

#defineCONFIG_BOOTARGS "noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0"
#defineCONFIG_BOOTCOMMAND "nand read0x32000000 0x200000 0x300000;bootm 0x32000000"

这里说明一下最后那个宏定义,在说之前首先声明一下,在nand分区为

0~0x40000为u-boot区,0x200000~0x500000为kernel区,剩下的为文件系统了

根据上面的分区我们可以很容易知道那个宏定义的意思了,首先用nand read命令将内核从nandflash地址0x200000开始复制,大小为0x300000,复制到sdram起始地址为0x32000000。执行完后,再执行命令bootm,启动

还有很重要一个要设置math_type和内核里设置的一样,否则无法启动

其在u-boot:include/asm-arm/mach_types.h里,在linux:arch/arm/tools的mach_types里

如果u-boot引导内核时出现错误Bad Magic Number时,那么说明你的linux缺少64字节的头信息。可以用u-boot/tools下的mkimage给它加入头信息,具体操作如下:

将zImage.bin文件拷到tools/目录下,输入命令:
#mkimage -n linux-2.6.30 -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008000 -d zImage.bin zImage.img

就可以生成带有头信息的zImage.img了,将其烧写就可以正常启动了
这里解释一下参数的意义:
-A==>setarchitecturetoarch
-O==>setoperatingsystemtoos
-T==>setimage typetotype
-C==>setcompressiontypecomp
-a==>setload addresstoaddr (hex)
-e==>setentrypointtoep (hex)
-n==>setimage nametoname
-d==>useimage datafromdatafile
-x==>setXIP(executein place)

上面的方法是可行,但是却很麻烦吖,不可能每次编译好了内核,还要去添加一次头信息吧?所以,从linux 2.6版本开始,就可以使用make uImage命令,直接生成带有头信息的uImage了,请到arch/arm/boot下查看呵呵。

如果使用make uImage提示有错误,那就自己百度吧。。。自学,百度是必需的!

好了,就到这里,现在的话,u-boot+linux+root都OK了,可能接下来是QT吧。。。嘿嘿,要让LCD大放异彩,必需的。

最后补充下,具体将这些烧写到NANDFLASH里的那里呢?这和你的分区有关,前面已经说了分区了,所以,请将你的U-BOOT烧写到0地址,linux烧写到0x200000,root就到0x5000000吧

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top