u-boot 的烧写及使用

时间:2022-09-04 03:45:53
1、SD 启动盘制作
a) 将第一天/SD 卡启动制作工具/sd_fusing 拷贝到 Linux 下
b) 将 SD 卡插入电脑并识别
c) 进入 sd_fusing 执行如下操作
$ make
$ chmod 777 sd_fusing.sh
$ sudo ./sd_fusing.sh /dev/sdb


2、 u-boot 的烧写

a) 运行串口通信程序(putty)
b) 关闭开发板电源,将拨码开关 SW2 调至 0110(SD 启动模式)后打开电源
c) 将刚才做好的 SD 启动盘插入 SD 卡插槽
d) 重新打开开发板
e) 设置板子环境变量
# setenv serverip 192.168.1.200 //和 ubuntu ip 一直
# setenv ipaddr 192.168.1.100 //板子的 ip 不要和 windows 和 Ubuntu 冲突
f) 将第一天/镜像文件/u-boot.bin 拷贝到 ubuntu 的/tftpboot 目录下
g) 烧写
# tftp 20008000 u-boot.bin
# nand erase 0 100000
# nand write 20008000 0 100000
h) 关闭开发板电源,将拨码开关 SW2 调至 1000(NAND 启动模式)后打开电源


3、 通过网络加载内核和文件系统
a) 将 第一天/镜像文件/zImage 拷贝到 ubuntu 的 /tftpboot 下
b) 将 第一天/镜像文件/rootfs.tar.bz2 拷贝到 ubuntu 的 /source 下并解压
c) 修改虚拟机 nfs 配置文件/etc/exports,添加如下内容并重启 nfs 服务
source/rootfs *(rw,sync,no_subtree_check,no_root_squash)
d) 重新驱动 nfs 服务
$ sudo /etc/init.d/nfs-kernel-server restart
e) 设置启动参数
# setenv bootcmd tftp 20008000 zImage\; go 20008000
#setenv bootargs root=nfs nfsroot=192.168.1.200:/source/rootfs
ip=192.168.1.100 init=/linuxrc console=ttySAC0,115200
# saveenv
f) 启动开发板看是否成功通过网络挂载:


4、 从 nand flash 加载内核和文件系统

a) 拷贝第一天/镜像文件/rootfs.cramfs 到虚拟机/tftpboot 目录下
b) 烧写内核镜像到 nand flash
# tftp 20008000 zImage
# nand erase 100000 400000
# nand write 20008000 100000 400000
c) 烧写文件系统镜像到 nand flash
# tftp 20008000 rootfs.cramfs
# nand erase 500000 800000
# nand write 20008000 500000 800000
d) 设置启动参数
# setenv bootdelay 1
# setenv bootcmd nand read 20008000 100000 400000\; go 20008000
# setenv bootargs root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,115200
# saveenv
e) 重新启动开发板, u-boot 自动加载、执行内核


5、 u-boot 其他命令

a) u-boot 支持的命令我们可以通过在终端上输入”?”查看


6、 交叉编译和交叉调试

a) 编辑程序源码 myapp.c(自己写一个简单的 c 程序)
b) 交叉编译后复制到/source/rootfs (编译时添加选项-g)
# arm-cortex_a8-linux-gnueabi-gcc myapp.c –o myapp -g
c) 复制 gdbserver 到/source/rootfs (gdbserver 在工具链安装路径下查找)
d) 在开发板上如下运行
# ./gdbserver 192.168.1.200:1234 myapp &
e) 在主机上运行交叉调试器
$ arm-cortex_a8-linux-gnueabi-gdb myapp
f) 在交叉调试器下和开发板 gdbserver 建立连接
(gdb) target remote 192.168.1.200:1234

设置断点,输入命令 c 开始调试程序(注意观察串口输出)