嵌入式boot loader
功能类似于PC的BIOS、硬件检测是否正常
加载操作系统镜像到RAM
设置不同的启动方式
常见的启动方式
NOR/NAND flash启动
从SD卡启动
BootLoader从网络加载Linux内核启动
下载源码
从GitHub下载地址点我
修改
Makefile找CROSS_COMPILE
CROSS_COMPILE ?= arm-linux-gnueabi-
config.mk找ARCH
ARCH ?= arm
编译
make -j4
实验Uboot
qemu-system-arm -M vexpress-a9 -m 512M -nographic -kernel u-boot
启动成功
配置QEMU与主机的网络连接
采用桥接的网络连接与Host通信
需要主机内核tun/tap模块支持
配置
主机安装工具包:apt-get install uml-utilities bridge-utils
创建tun设备文件(自动会创建)
修改/etc/network/interface文件,重启生效,添加
auto br0
iface br0 inet dhcp
bridge_ports ens33
创建/etc/qemu-ifup和/etc/qemu-ifdown文件
/etc/qemu-ifup
#!/bin/sh
echo sudo tunctl -u $(id -un) -t $1
sudo tunctl -u $(id -un) -t $1
echo sudo ifconfig $1 0.0.0.0 promisc up
sudo ifconfig $1 0.0.0.0 promisc up
echo sudo brctl addif br0 $1
sudo brctl addif br0 $1
echo brctl show
brctl show
sudo ifconfig br0 192.168.33.135
/etc/qemu-ifdown
#!/bin/sh
echo sudo brctl delif br0 $1
sudo brctl delif br0 $1
echo sudo tunctl -d $1
sudo tunctl -d $1
echo brctl show
brctl show
使用U-boot引导内核镜像
将内核变异为UImage格式
需要制定uImage的加载地址
编译时指定
make LOADADDR=0x60003000 uImage -j4
安装tftp工具:apt-get install tftp-hpa tftpd-hpa xinetd
修改配置文件
vim /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="-l -c -s"
创建tftp目录:mkdir /home/tftpboot chmod 777 tftpboot/
重启tftp服务:/etc/init.d/tftpd-hpa restart
自动引导
1、修改include/configs/vexpress_common.h
先搜索BOOTCOMMAND
然后修改
#define CONFIG_BOOTCOMMAND \
"tftp 0x60003000 uImage;tftp 0x60500000 vexpress-v2p-ca9.dtb; \
setenv bootargs 'root=/dev/mmcblk0 console=ttyAMA0'; \
bootm 0x60003000 - 0x60500000; "
在再下面添加
/*Netmask*/
#define CONFIG_IPADDR 192.168.1.128
#define CONFIG_NETMASK 255.255.255.0
#define CONFIG_SERVERIP 192.168.1.70
注意:此处CONFIG_SERVERIP为tftp主机即我们的主机的ip
CONFIG_IPADDR为同网段内随便一个IP就可以
2、编译
进入u-boot文件夹
make vexpress_ca9x4_defconfig
make -j4
3、将必要的文件移到tftpboot
包括编译生成的u-boot、编译生成的uImage、vexpress-v2p-ca9.dtb、启动脚本
4、修改启动脚本
qemu-system-arm \
-M vexpress-a9 \
-m 512m \
-kernel u-boot \
-nographic \
-net nic,vlan=0 -net tap,vlan=0,ifname=tap0 \
-sd /home/gyy/work/qemu/rootfs.ext3
5、运行启动脚本启动
会自动从tftp服务器下载uImage和vexpress-v2p-ca9.dtb并写入正确位置
到此启动成功
自动引导适合我们自己学习时使用,一次配好就不用管了每次启动只要执行启动脚本就可以了,但是往往开发中是不一定能够使用自动引导的,我们需要进入u-boot后手动从tftp服务器下载内核并加载,以下为手动加载的方法
在未加载时按下回车进入手动模式
设置开发板地址:setenv ipaddr 192.168.1.128
查看开发板地址:print ipaddr
设置tftp服务器地址:setenv serverip 192.168.1.70
设置bootargs:saveenv bootargs 'root=/dev/mmcblk0 console=ttyAMA0'
下载uImage:tftp 60003000 uImage
下载dtb文件:tftp 60500000 vexpress-v2p-ca9.dtb
启动:bootm 60003000 - 60500000
启动成功
在u-boot的Makefile中找到此位置添加cp u-boot /home/tftpboot,在u-boot生成完成后拷贝
可以看到实现了拷贝功能