Qemu模拟ARM之UBOOT引导LINUX络
系统:Ubuntu16.04.4 32bit
交叉编译器:arm-linux-gnueabihf-gcc
VMware:VMware Workstation 14 Pro
u-boot:u-boot-2018.03
linux:linux-4.16.2
1.下载linux内核源码
下载地址:https://www.kernel.org/ 下载linux-4.16.4.tar.xz
wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.16.4.tar.xz
2.解压源码
tar xvf linux-4.16.4.tar.xz
3.配置内核
#进入linux源码根目录
cp arch/arm/configs/vexpress_defconfig ./
make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm vexpress_defconfig
配置内核是出现错误
提示找不到bison,解决方法就是安装bison
sudo apt-get -y install bison
在安装完bison后继续配置又出现错误
问题跟上一个一样,根据提示安装缺失的文件
sudo apt-get -y install flex
再次配置即可
4.编译
make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm -j4
5.测试
#将编译好的zImage(arch/arm/boot)和设备树vexpress-v2p-ca9.dtb(arch/arm/boot/dts)拷贝到一个目录下运行以下指令
mkdir _install
cp -a arch/arm/boot/zImage ./_install
cp -a arch/arm/boot/dts/vexpress-v2p-ca9.dtb ./_install
#-serial stdio 终端有日志输出
#console=tty0 qemu虚拟机界面有日志输出
qemu-system-arm -M vexpress-a9 -m 512M -kernel ./_install/zImage -append "root=/dev/mmcblk0 console=ttyAMA0 console=tty0" -dtb ./_install/vexpress-v2p-ca9.dtb -net nic -net tap,ifname=tap0,script=no,downscript=no -nographic
linux正常启动
6.制作uImage
#制作uimage
sudo apt-get install u-boot-tools
#LOADADDR加载地址要和uboot相关,之后会对uboot进行修改
#这里制作uimge的工具uboot tools目录中有提供
make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm LOADADDR=0x60003000 uImage -j4
7.安装tftp服务器
sudo apt-get install tftp-hpa tftpd-hpa
配置
sudo mkdir -p /home/qemu/qemu/tftpboot
sudo chmod 777 tftpboot
sudo vi /etc/default/tftpd-hpa
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/qemu/qemu/tftpboot" #目录
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure"
重启服务
sudo service tftpd-hpa restart
8.uboot引导linux启动
将uImage,uboot和vexpress-v2p-ca9.dtb拷贝到tftpboot目录下
cd ~/qemu/tftpboot
cp ../u-boot-2018.03/u-boot ./
cp ../linux-4.16.4/arch/arm/boot/uImage ./
cp ../linux-4.16.4/arch/arm/boot/dts/vexpress-v2p-ca9.dtb ./
qemu-system-arm -M vexpress-a9 -m 512 -nographic -kernel u-boot -net nic,macaddr=52:54:00:11:22:33 -net tap,ifname=tap0,script=no,downscript=no
开始下载kernel和dts
#ping一下服务器是否存在
ping 192.168.1.101
tftp 0x60003000 uImage
tftp 0x66000000 vexpress-v2p-ca9.dtb
setenv bootargs 'root=/dev/mmcblk0 rw console=ttyAMA0'
bootm 0x60003000 - 0x66000000
可以看到内核启动了,由于没有根文件系统所以后面会出现找不到文件系统的错误