Qemu模拟ARM之UBOOT引导LINUX

时间:2022-03-19 08:52:18

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

配置内核是出现错误
Qemu模拟ARM之UBOOT引导LINUX
提示找不到bison,解决方法就是安装bison

sudo apt-get -y install bison

在安装完bison后继续配置又出现错误
Qemu模拟ARM之UBOOT引导LINUX
问题跟上一个一样,根据提示安装缺失的文件

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正常启动
Qemu模拟ARM之UBOOT引导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

Qemu模拟ARM之UBOOT引导LINUX

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

可以看到内核启动了,由于没有根文件系统所以后面会出现找不到文件系统的错误
Qemu模拟ARM之UBOOT引导LINUX
Qemu模拟ARM之UBOOT引导LINUX