uboot2010.06移植中一点感想

来源:互联网 发布:2016中美贸易数据 编辑:程序博客网 时间:2024/06/06 03:36

一、如何设置环境变量

bootargs=noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0 mem=64M

bootcmd=nand read.jffs2 0x30007FC0 kernel; bootm 0x30007FC0
bootdelay=3
baudrate=115200
ethaddr=1a:2b:3c:4d:5e:6f
ipaddr=192.168.88.124
serverip=192.168.88.123
netmask=255.255.255.0
ethact=dm9000
mtdids=nand0=nandflash0
mtdparts=mtdparts=nandflash0:1m@(bootloader),128k(params),4m(kernel),-(root)
filesize=2DC98
stdin=serial
stdout=serial
stderr=serial
partition=nand0,0
mtddevnum=0
mtddevname=bootloader

对于环境变量的修改可以用在bootloader启动后利用setenv [变量名]  [参数] 例如:setenv bootdelay 6 ,但是如果是bootcmd这个参数有分号,的设置应该是

setenv bootcmd  'nand read.jffs2 0x30007FC0;bootm 0x30007FC0'  设置完后记得运行saveenv 保存环境变量,另外在程序中的FL2440.H配置文件中修改了环境变量,下载u-boot 到nandflash启动,这时运行的环境的变量还是以前的,必须nand erase 参数分区,然后saveenv 下次启动的时候,就是你设置的新的环境变量了。

二、启动uImage和zImage内核镜像

      u-boot-2010.06默认能启动uImage, uImage的头部包含加载地址和入口地址 uImage中的Linux内核加载地址是0x30008000,如果环境变量bootcmd中设置的地址是0x30008000,则Linux实际的入口地址就是0x30008004(64个字节是uImage头部),入口地址不等于加载地址所以要把内核移到0x300080000,如果环境变量bootcmd中设置的地址是0x30007FC0,则内核入口地址正好等于加载地址不需要移动内核就可以直接引导Linux内核。(这和代码要被执行必须要在它的链接地址一个道理)

如果是zImage内核镜像必须要在uboot加入的代码boot-Zimage.C中的代码

…………………………………………………………

if (bootdelay >= 0 && s && !abortboot (bootdelay)) {
# ifdef CONFIG_AUTOBOOT_KEYED
int prev = disable_ctrlc(1);/* disable Control C checking */
# endif

//boot_zImage(0x120000,0x400000);
 //如果下载的是zImage,这句话加上同时修改环境变量中的加载地址为0x30008000
 # ifndef CONFIG_SYS_HUSH_PARSER
run_command (s, 0);
# else
parse_string_outer(s, FLAG_PARSE_SEMICOLON |
   FLAG_EXIT_FROM_LOOP);

…………………………………………………………………………



0 0
原创粉丝点击