关于u-boot引导linux启动

这两天在移植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 read 0x32000000 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==>setarchitectureto'arch'
-O==>setoperatingsystemto'os'
-T==>setimage typeto'type'
-C==>setcompressiontype'comp'
-a==>setload addressto'addr' (hex)
-e==>setentrypointto'ep' (hex)
-n==>setimage nameto'name'
-d==>useimage datafrom'datafile'
-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吧。。。呵呵

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值