一键编译并启动一个 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 天前
【Windows】QEMU 启动 openEuler aarch64/arm64 架构系统 + 离线软件源
linux·windows·经验分享·笔记·架构·arm
牛奶咖啡135 天前
KVM虚拟化与企业应用实践——给远端主机创建虚拟机
云原生·qemu·kvm·给远端主机创建虚拟机·创建uefi模式的虚拟机·安装openeulersp2·vnc与虚拟机环境搭建
牛奶咖啡137 天前
KVM虚拟化与企业应用实践——通过网络介质配合ks自动应答文件实现自动安装KVM虚拟机
云原生·qemu·kvm·系统网络引导与ks自动应答环境·远程资源+ks文件安装虚拟机·通过网络介质引导自动安装虚拟机·qemu的总线类型详解
冰山一脚20137 天前
kvm驱动学习笔记
qemu
ggaofeng10 天前
如何通过uboot加载硬盘
linux·qemu·uboot
ScilogyHunter11 天前
QEMU完全指南
linux·qemu
暮云星影11 天前
个人总结 docker搭建私人照片云相册Immich
docker·容器·arm
凉、介14 天前
深入理解 ARMv8-A|Application Binary Interface (ABI)
c语言·笔记·学习·嵌入式·arm
大阳12318 天前
ARM6.(时钟设置,EPIT定时器)
单片机·嵌入式硬件·gpt·arm·时钟·imx6ull·epit
secondyoung18 天前
Cortex-R52学习:MPU内存保护机制
arm开发·单片机·学习·arm·mpu