helloyesyes 发表于 2013-2-4 14:10:11

初识Uboot

哈尔滨理工大学软件工程专业08-7李万鹏原创作品,转载请标明出处      
http://blog.csdn.net/woshixingaaa/archive/2011/01/29/6169083.aspx   
Uboot笔记      
Uboot是德国DENX小组开发用于多种嵌入式CPU(MIPS,X86,ARM,Xscale等)的bootloader程序,Uboot不仅支持嵌入式linux操作系统的引导,还支持VxWorks,QNX等多种嵌入式操作系统。      
移植bootloader原因:      
1. CPU不同 (芯片级移植)      
2. 板级设备不同(板级移植)      
Bootloader      
Stage1:      
初始化硬件设备      
为Stage2的代码准备RAM      
将Stage2的代码复制到RAM      
初始化堆栈(参数传递用)      
跳转到Stage2的C程序起始处      
Stage2:      
初始化硬件      
将根文件系统和内核从flash中读到RAM      
调用内核      
Uboot的目录结构      
Board:是和开发板相关的文件      
Commom:实现Uboot支持的命令      
Cpu:与特定Cpu架构相关的代码      
Disk:对磁盘的支持      
Doc:文档目录      
Drivers:Uboot支持的设备驱动程序都放在该目录      
Fs:文件系统的支持      
Include:Uboot使用的头文件      
Net:与网络协议栈相关的代码      
Tools:生成Uboot的工具      
常用命令      
1.help 查看当前单板所支持的命令      
2.printenv 查看环境变量      
3.setenv 添加,修改,删除环境变量      
eg 添加环境变量 file 值为 123      
setenv file 123      
修改file 值为 456      
setenv file 456      
删除 file      
setenv file      
4.saveenv 保存环境变量 他会将环境变量保存到flash中,否则板子复位后环境变量消失,因为setenv设置的环境变量在SDRAM中,复位,Uboot从flash中读环境变量。      
5.tftp 通过网络下载文件      
注意:使用tftp,需要先配置好网络      
Uboot>setenv ethaddr 12:34:56:78:9A:BC(网卡的地址)      
Uboot>setenv ipaddr 192.168.1.1(开发板的ip地址)      
Uboot>setenv serverip 192.168.1.254(tftp服务器的地址)      
eg Uboot> tftp 32000000 uImage      
把server中的uImage通过tftp读入0x32000000处      
如果使用串口速度相当慢      
6.md(memory display)显示内存区内容      
md采用16进制和ASCII码两种形式显示存储单元的内容。这条命令还可以采用长度标识符.l,.w,.b:      
md [.b,.w,.l] address      
md .w 100000      
b 字节型 w 16位 l 32位      
7.mm (memory modify)修改内存,地址自动增加      
mm[.b.w.l] address      
mm提供了一种互动修改内存的方法,他会显示地址和当前的值然后提示用户输入。如果你输入了一个合法的16进制数,这个新的值将被写入该地址。然后提示下一个地址。如果你没有输入任何值,只按了一下回车,那么该地址的内容保持不变。如果想结束输入,则输入空格,然后回车。      
8.flinfo 查看Flash扇区信息      
Uboot>flinfo      
9.protect Flash写保护      
打开或关闭扇区写保护      
protect off all      
关闭所有扇区的写保护      
protect on all      
打开所有扇区的写保护      
protect off start end      
关闭从start到end 扇区的写保护      
protect on start end      
打开从start到end扇区的写保护
start为要擦除的第一个扇区的起始地址,end为要擦除的最后一个扇区的结束地址。      
10.erase擦除flash扇区      
用法 erase start end      
擦除从start到end的扇区,start为要擦除的第一个扇区的起始地址,end为要擦除的最后一个扇区的结束地址。(在使用cp向Nor型Flash写入数据之前必须先使用erase命令擦除flash扇区,因为norflash按字节写入时无法写入1,所以必须通过擦除来写入1)。      
11.cp 数据拷贝      
cp[.b,.w,.l]saddresss daddress len      
cp 提供了一种内存与内存之间,内存与flash之间数据拷贝的方法。      
eg: cp.b 31000000 50000 d0000      
将内存地址0x31000000处的数据(长度为d0000)拷贝到地址0x50000处(Flash中)      
cp.b 32000000 120000 c0000      
将内存地址0x32000000处的数据(长度为0xc0000)拷贝到地址0x120000处(Flash中)。      
12.go 执行内存中的二进制代码,一个简单的跳转到指定地址      
go addr      
13.bootm执行内存中的二进制代码      
bootm ]      
要求二进制代码一定要有文件头。      
14.bdinfo 显示开发板的信息      
自启动设置      
Uboot>setenv bootcmd tftp 31000000 uImage \; bootcmd 31000000 这句可以设置Uboot启动后都干什么      
Uboot>saveenv
页: [1]
查看完整版本: 初识Uboot