您的位置:首页 > 其它

uboot2010.06移植中一点感想

2015-10-14 17:06 423 查看
一、如何设置环境变量

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);

…………………………………………………………………………
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: