搭建qemu开发平台(ARM)

朋友呼吁写一篇搭建qemu的文章,在网络上面看到的文章比较散乱,按照操作都没办法运行起来。我这边就主要写一个实操,没什么理论分析,完全就是一个搭建步骤,不过保证按照操作基本就可以运行起来。

提前要准备的工具

windows电脑一台、virtualbox软件、ubuntu18.04 x64桌面版iso镜像文件

安装好virtualbox软件,并且在virtualbox中安装ubuntu18.04系统,这样工具就准备好了。

虚拟机网络设置

设置两块网卡,网卡一使用nat方式,网卡二使用host only方式。网卡一用来给虚拟机上网,不用特别的设置,网卡二用来qemu与ubuntu通信。

下图就是虚拟机中网卡二的设置

ubuntu中需要安装的软件

基础软件

sudo apt install bison u-boot-tools flex net-tools uml-utilities bridge-utils tftp-hpa tftpd-hpa xinetd zlib1g-dev libglib2.0-0 libglib2.0-dev libtool libsdl1.2-dev autoconf

 安装qemu

sudo apt-get install qemu 

安装交叉编译工具

sudo apt-get install gcc-arm-linux-gnueabi

qemu网络设置

修改/etc/network/interfaces文件

这里enp0s8就是网卡二在ubuntu系统中的端口号,通过ifconfig命令可以查看,不同的设备可能会有差异。

auto lo
iface lo inet loopback

auto enp0s8

auto br0
iface br0 inet dhcp
bridge_ports enp0s8

修改/etc/qemu-ifup文件

#! /bin/sh
echo tunctl -u $(id -un) -t $1
tunctl -u $(id -un) -t $1

echo ifconfig $1 0.0.0.0 promisc up
ifconfig $1 0.0.0.0 promisc up

echo brctl addif br0 $1
brctl addif br0 $1

echo brctl show
brctl show

修改/etc/qemu-ifdown文件

#! /bin/sh
echo brctl delif br0 $1
brctl delif br0 $1

echo tunctl -d $1
tunctl -d $1

echo brctl show
brctl show

上面这两个脚本文件,主要是在qemu启动和退出的时候会被调用到。

内核的获取与编译

获取内核源码

wget https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux-4.4.157.tar.xz

编译内核

make vexpress_defconfig ARCH=arm
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j4
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- dtbs
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- LOADADDR=0x60003000 uImage -j4

busybox的获取与编译

获取busybox源码

wget https://busybox.net/downloads/busybox-1.31.1.tar.bz2

编译busybox

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- menuconfig
设置busybox为静态链接
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- install

uboot的获取与编译

获取uboot源码

wget http://ftp.denx.de/pub/u-boot/u-boot-2020.01.tar.bz2

编译uboot

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- vexpress_ca9x4_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-

制作根文件系统

dd if=/dev/zero of=rootfs.ext3 bs=1M count=32
mkfs.ext3 rootfs.ext3

拷贝busybox内容到磁盘文件中

cd /work/qemu/
mkdir tmp
mount -t ext3 rootfs.ext3 /tmp -o loop
cp -rf  busybox-1.31.1/_install/* tmp/
cd tmp
mkdir -pv {bin,sbin,etc,proc,sys,usr/{bin,sbin},dev}

创建/etc/inittab文件

::sysinit:/etc/init.d/rcS
::askfirst:-/bin/sh
::restart:/sbin/init
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a
chmod 777 etc/inittab

创建rcS文件

mkdir etc/init.d
touch etc/init.d/rcS
vim etc/init.d/rcS

#!/bin/sh
mount proc
mount -o remount,rw /
mount -a    
clear                               
echo "My Tiny Linux Start :D ......"
chmod 777 etc/init.d/rcS

创建fstab文件

touch etc/fstab

vim etc/fstab
# /etc/fstab
proc            /proc        proc    defaults          0       0
sysfs           /sys         sysfs   defaults          0       0
devtmpfs        /dev         devtmpfs  defaults          0       0

umount设备

umount tmp

设置tftp

创建tftpboot目录

cd /work/qemu
mkdir tftpboot
chmod 777 tftpboot

修改tftp配置文件/etc/default/tftpd-hpa

TFTP_USERNAME="root"
TFTP_DIRECTORY="/work/qemu/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="-l -c -s"

重启tftpd服务

/etc/init.d/tftpd-hpa restart

拷贝kernel和设备树到tftp目录

cd /work/qemu
cp -f linux-4.4.157/arch/arm/boot/uImage tftpboot/
cp -f linux-4.4.157/arch/arm/boot/dts/vexpress-v2p-ca9.dtb tftpboot/

qemu的开发环境就搭建好了,下面来运行一下

单独启动kernel

qemu-system-arm -M vexpress-a9 -m 512M -kernel linux-4.4.157/arch/arm/boot/zImage -dtb linux-4.4.157/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "root=/dev/mmcblk0 rw console=ttyAMA0" -sd rootfs.ext3

单独启动uboot

qemu-system-arm -M vexpress-a9 -m 512M -nographic -kernel u-boot-2020.01/u-boot -net nic -net tap,ifname=tap0 -sd rootfs.ext3

通过uboot启动kernel

qemu-system-arm -M vexpress-a9 -m 512M -nographic -kernel u-boot-2020.01/u-boot -net nic -net tap,ifname=tap0 -sd rootfs.ext3
setenv ipaddr 192.168.56.110
setenv serverip 192.168.56.102
tftp 0x60003000 uImage
tftp 0x60500000 vexpress-v2p-ca9.dtb
setenv bootargs root=/dev/mmcblk0 rw ip=192.168.56.111 console=ttyAMA0
bootm 0x60003000 - 0x60500000

这里要注意,serverip就是ubuntu系统中网卡二(enp0s8)的ip,不同的设备地址可能会不同,需要根据自己的情况修改。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QEMU是一个开源的虚拟机监视器和模拟器,可以用于模拟多种硬件平台,包括ARM。以下是使用300字回答如何编译和安装QEMU用于ARM模拟的步骤: 首先,需要下载QEMU的源代码。可以从官方网站或Git仓库获取最新版本的源代码。 接下来,需要确保系统上安装了必要的编译工具和依赖项。这些依赖项包括GCC编译器、make工具和C库等。可以使用包管理器来安装它们,例如在Debian或Ubuntu上可以使用apt-get命令。 然后,进入QEMU源代码目录,开始进行配置和编译。可以使用以下命令进行配置: $ ./configure --target-list=arm-softmmu --prefix=/usr/local 这将配置QEMU来模拟ARM处理器,并将安装目录设定为/usr/local。 完成配置后,可以使用以下命令开始编译和安装QEMU: $ make $ sudo make install 这将对QEMU进行编译,并将其安装在指定的目录中。可能需要等待一段时间,具体时间取决于系统的性能和网络连接速度。 编译和安装完成后,可以通过运行以下命令来验证QEMU是否正常工作: $ qemu-system-arm --version 如果成功安装,应该会显示QEMU的版本信息。 现在,您可以使用QEMU来模拟ARM处理器并运行ARM二进制文件。例如,可以使用以下命令来运行一个ARM可执行文件: $ qemu-system-arm -cpu cortex-a53 -machine virt -nographic -kernel path/to/kernel.img 以上是在300字中回答如何编译和安装QEMU用于ARM模拟的简要步骤。实际过程可能因系统环境和配置而有所不同,建议查阅QEMU的官方文档以获取更详细的指导。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值