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);
…………………………………………………………………………
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);
…………………………………………………………………………
相关文章推荐
- 背包问题
- java操作mysql数据库遇到的问题
- delegate和event
- 编译Ralink SDK时碰到的奇怪错误(undefined reference to `main')的解决办法
- office 2010 ppt 中实现断裂字
- 我眼中的下拉刷新
- Python使用QRCode模块生成二维码
- Storm(四)Storm简单测试demo
- PowerDesigner创建表字段备注
- 读、写(记)(2015年10月14日)
- 我眼中的下拉刷新
- 我眼中的下拉刷新
- 深入讲解Python编程中的字符串
- Nginx+PHP+MySQL+Ubuntu14.04 64位环境搭建
- Oracle学习(七)之 Java通过JDBC操作oracle数据库
- ThinkPHP 整合bootstrap分页
- ios scroll view 原理
- c++关于函数的参数传递全部知识点详解
- 面试总结
- Java单元测试(Junit+Mock+代码覆盖率)