一键编译并启动一个 ARM Linux qemu 虚拟机

需要事先自己编译 qemu-system-arm 可执行文件;

1,编译创建ARM 虚拟机

1.1 一起从头开始版

cd 进一个空文件夹,然后

$ vim buildup.sh

$ bash buildup.sh

访问github网络没什么问题:

硬编码了一个路径/home/hipper/ex_vexpress/ 两处,

改成自己的当前路径即可,懒得改了,见谅见笑了 ^^

buildup.sh:

#!/usr/bin/bash
mkdir workspace
cd workspace
git clone https://github.com/qemu/qemu.git
cd qemu/
git checkout v9.0.0
mkdir build_arm/
cd ./build_arm/
../configure --target-list="arm-softmmu,arm-linux-user" --prefix=/home/hipper/ex_vexpress/workspace/qemu-bin-arm/
make -j
make install
cd ../../
sudo ls
sudo apt-get install gcc-arm-linux-gnueabi
wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.10.tar.gz
tar zxf linux-kernel-v5.10.tar.gz 
cd linux-5.10/
make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm vexpress_defconfig
make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm -j
cd ../
wget https://ftp.denx.de/pub/u-boot/u-boot-2020.10.tar.bz2
tar xf u-boot-2020.10.tar.bz2 
cd u-boot-2020.10/
make vexpress_ca9x4_defconfig
make CROSS_COMPILE=arm-linux-gnueabi- all
cd ../
wget https://busybox.net/downloads/busybox-1.36.0.tar.bz2
tar xf busybox-1.36.0.tar.bz2 
cd busybox-1.36.0/
make defconfig
make CROSS_COMPILE=arm-linux-gnueabi-
make install CROSS_COMPILE=arm-linux-gnueabi-
cd ../
mkdir -p rootfs/{dev,etc/init.d,lib,proc,sys,root,home}
sudo cp busybox-1.36.0/_install/* -r rootfs/
sudo cp -P /usr/arm-linux-gnueabi/lib/* rootfs/lib/
sudo mknod rootfs/dev/tty1 c 4 1 && sudo mknod rootfs/dev/tty2 c 4 2 && sudo mknod rootfs/dev/tty3 c 4 3 && sudo mknod rootfs/dev/tty4 c 4 4
dd if=/dev/zero of=a9rootfs.ext3 bs=1M count=1024
mkfs.ext3 a9rootfs.ext3
sudo mkdir tmpfs && sudo mount -t ext3 a9rootfs.ext3 tmpfs/ -o loop && sudo cp -r rootfs/*  tmpfs/ && sudo umount tmpfs
/home/hipper/ex_vexpress/workspace/qemu-bin-arm/bin/qemu-system-arm -M vexpress-a9 -m 512M \
-kernel ./linux-5.10/arch/arm/boot/zImage \
-dtb    ./linux-5.10/arch/arm/boot/dts/vexpress-v2p-ca9.dtb \
-nographic -append "root=/dev/mmcblk0  console=ttyAMA0" -sd a9rootfs.ext3

运行效果:

1.2 如果系统中已经安装了qemu-system-arm

$ vim buildup_haveqemuarm.sh

$ bash ./buildup_haveqemuarm.sh

其中:

buildup_haveqemuarm.sh:

bash 复制代码
#!/usr/bin/bash 
 sudo ls
 sudo apt-get install gcc-arm-linux-gnueabi
 mkdir workspace
 cd workspace/
 wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.10.tar.gz
 tar zxf linux-5.10.tar.gz 
 cd linux-5.10/
 make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm vexpress_defconfig
 make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm -j
 cd ../
 wget https://ftp.denx.de/pub/u-boot/u-boot-2020.10.tar.bz2
 tar xf u-boot-2020.10.tar.bz2 
 cd u-boot-2020.10/
 make vexpress_ca9x4_defconfig
 make CROSS_COMPILE=arm-linux-gnueabi- all
 cd ../
 wget https://busybox.net/downloads/busybox-1.36.0.tar.bz2
 tar xf busybox-1.36.0.tar.bz2 
 cd busybox-1.36.0/
 make defconfig
 make CROSS_COMPILE=arm-linux-gnueabi-
 make install CROSS_COMPILE=arm-linux-gnueabi-
 cd ../
 mkdir -p rootfs/{dev,etc/init.d,lib,proc,sys,root,home}
 sudo cp busybox-1.36.0/_install/* -r rootfs/
 sudo cp -P /usr/arm-linux-gnueabi/lib/* rootfs/lib/
 sudo mknod rootfs/dev/tty1 c 4 1 && sudo mknod rootfs/dev/tty2 c 4 2 && sudo mknod rootfs/dev/tty3 c 4 3 && sudo mknod rootfs/dev/tty4 c 4 4
 dd if=/dev/zero of=a9rootfs.ext3 bs=1M count=1024
 mkfs.ext3 a9rootfs.ext3
 sudo mkdir tmpfs && sudo mount -t ext3 a9rootfs.ext3 tmpfs/ -o loop && sudo cp -r rootfs/*  tmpfs/ && sudo umount tmpfs
 qemu-system-arm -M vexpress-a9 -m 512M -kernel ./linux-5.10/arch/arm/boot/zImage -dtb    ./linux-5.10/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "root=/dev/mmcblk0  console=ttyAMA0" -sd a9rootfs.ext3

启动后的虚拟机:

2, 编译新的可执行文件

vim ../ex/hello.c

cpp 复制代码
#include <stdio.h>

int main()
{
	printf("Hello Test Kernel ll\n");

	return 0;

}

3,在虚拟机中添加新的可执行文件

cp ../ex/hello busybox-1.36.0/_install/bin/

然后执行 update_exe_arm.sh:

bash 复制代码
 rm -rf a9rootfs.ext3
 sudo rm rootfs/* -rf
 mkdir -p rootfs/{dev,etc/init.d,lib,proc,sys,root,home}
 sudo cp busybox-1.36.0/_install/* -r rootfs/
 sudo cp -P /usr/arm-linux-gnueabi/lib/* rootfs/lib/
 sudo mknod rootfs/dev/tty1 c 4 1 && sudo mknod rootfs/dev/tty2 c 4 2 && sudo mknod rootfs/dev/tty3 c 4 3 && sudo mknod rootfs/dev/tty4 c 4 4
 dd if=/dev/zero of=a9rootfs.ext3 bs=1M count=1024
 mkfs.ext3 a9rootfs.ext3
 rm -rf tmpfs/
 sudo mkdir tmpfs && sudo mount -t ext3 a9rootfs.ext3 tmpfs/ -o loop && sudo cp -r rootfs/*  tmpfs/ && sudo umount tmpfs
 /home/hipper/ex_systemc_qemu/qemu-bin-v9-arm/bin/qemu-system-arm -M vexpress-a9 -m 512M -kernel ./linux-5.10/arch/arm/boot/zImage -dtb    ./linux-5.10/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "root=/dev/mmcblk0  console=ttyAMA0" -sd a9rootfs.ext3

虚拟机中执行hello;

相关推荐
徐某人..4 小时前
ARM嵌入式学习--第十天(UART)
arm开发·单片机·学习·arm
skywalk81631 天前
尝试qemu仿真VisionFive2 OpenKylin系统
qemu·kylin
花花少年2 天前
【概念版】交叉编译相关介绍
arm·交叉编译
张琦-Q6 天前
ubuntu解决普通用户无法进入root
linux·ubuntu·arm
张一西14 天前
ARM学习(42)CortexM3/M4 MPU配置
stm32·arm·mpu·nxp·arm架构·cortexm3·cortexm4
CV金科19 天前
freertos的基础(二)内存管理:堆和栈
stm32·开源·arm·freertos·risc-v
代码改变世界ctw19 天前
Armv8/Armv9架构从入门到精通-介绍
arm·trustzone·atf·tee·armv8·armv9·周贺贺
congchp21 天前
开启_禁止中断
linux kernel·中断处理
Hi2024021722 天前
RK3588上CPU和GPU算力以及opencv resize的性能对比测试
linux·opencv·arm·gpu·opencl·算力测试·mali-gpu
阿隆ALong25 天前
亚矩阵云手机:跨境出海直播的全方位利器
大数据·服务器·网络安全·矩阵·云计算·arm·信息与通信