1. 嵌入式软件的层次
BootLoader | Boot Parameters | Kernel | Root FileSystem |
---|
2. 编译U-Boot
先安装编译器,这里使用的是友善之臂的编译器,将其解压到/opt/目录后,执行以下命令(环境是redhat6):
vim ~./bash_profile
并将编译器/bin文件所在目录添加在path后面,如下:
PATH=$PATH:$HOME:/opt/FriendlyARM/toolschain/4.5.1/bin
完成后保存,使用一下命令使环境变量生效:
source ~/.bash_profile
文件:U-boot.tar.gz
先将文件解压出来:
tar zvxf U-boot.tar.gz
进入目录:
cd U-boot/
配置U-boot:
make smart210_config
编译U-boot:
make ARCH=arm CROSS_COMPILE=arm-linux-
一般来说编译的过程持续一两分钟左右。
3. 烧写U-boot
将编译好的U-Boot下载到Nand FLASH中(这里就各显神通了,比如可以通过烧写到SD卡上再烧写到Nand FALSH中)
4. U-Boot命令详解
4.1 帮助命令 #help
尽管U-Boot提供了丰富的命令集,但是不同的开发板所支持的命令却不一样(可配置),help命令可用于察看当前单板所支持的命令。
4.2 查看环境变量 #printenv
举例:
ipaddr=192.168.0.1
ethaddr=12:34:56:78:9A:BC
serverip=192.168.1.5
printenv 缩写为 print
举例:print ipaddr
修改环境变量:
#setenv 添加、修改、删除环境变量
举例:
#setenv name value (添加或修改name的值为value)
#setenv name (删除name环境变量条目)
保存环境变量(将环境变量写回到FLASH中)
#saveenv (可以缩写为 #save)
4.3 程序下载命令
(以太网、串口、USB)【串口一般不用,速度太慢了】。
tftp:通过网络下载程序,注意:使用tftp时候需要事先配置好网络
#setenv ethaddr 12:34:56:78:9A:BC
#setenv ipaddr 192.168.0.3
#setenv serverip 192.168.0.2 (tftp服务器地址)
#ping 192.168.0.3
范例:
#tftp 0x20008000 uImage.bin
(从tftp服务器上下载uImage.bin 到 0x20000000地址上)
调试这个过程需要很大耐心,不然调试不出来
4.4 执行程序
#bootm {addr} {args} 执行固定格式的二进制程序
范例:
#bootm 0x20008000
4.5 查看文件内容
显示内存区的内容 #md
md采用十六进制和ASCII码两种形式来显示存储单元的内容。这条命令还可以采用长度标识等 (.l .w .b):
#md [.b .w .l] addr
范例:
md.w 0x20000200
修改内存使用 #mm 命令:
#mm 0x20000000
20000000 : FFFFFFFF ? 01234567 -回车符号
20000004 : FFFFFFFF ? AB000000 -回车符号
20000008 : FFFFFFFF ? -空格加回车表示停止修改
4.6 擦除FLASH
# | nand | erase | 0x400000 | 0x500 |
---|---|---|---|---|
命令符 | nand命令 | 擦除命令 | 起始地址 | 处理长度 |
写、读nand flash,(从内存到nand 或者从nand到内存)
# | nand | write | 0x20000000 | 0x400000 | 0x500 |
---|---|---|---|---|---|
命令符 | nand命令 | 擦除命令 | 内存起始地址 | 起始地址 | 处理长度 |
# | nand | read | 0x20000000 | 0x400000 | 0x500 |
---|---|---|---|---|---|
命令符 | nand命令 | 擦除命令 | 内存起始地址 | 起始地址 | 处理长度 |
4.7 设置自启动(这个非常好用)
设置从nand falsh自动启动
#setenv bootcmd nand read c0008000 400000 500000 \; bootm c0008000
设置从tftp自动下载并启动
#setenv bootcmd tftp c0008000 uImage.bin \; bootm c0008000