Qemu - 在ARM64上运行系统
- 平台:ubuntu 22.04
- 对象:qemu仿真ARM64.
- 文件:linux-5.10.7、busybox-1.33.1
1.安装依赖
$ sudo apt install build-essential bc flex bison gawk texinfo file tree curl wget unzip libncurses5-dev libssl-dev git ssh libc6-dev
$ sudo apt install gcc-10-aarch64-linux-gnu
$ sudo apt install qemu-system-aarch64
2.下载资源
kernel:
busybox:
https://busybox.net/downloads/
3.编译内核
$ tar -xvf linux-5.10.7.tar.xz
$ cd linux-5.10.7/
$ make defconfig ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
$ make -j4 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
4.制作根文件系统
4.1 创建rootfs文件夹
$ mkdir rootfs
4.2 解压busybox
$ tar -xvf busybox-1.33.1.tar.bz2
$ cd busybox-1.33.1/
4.3 配置config
$ make defconfig ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
$ make menuconfig ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
做如下修改:
// 勾选编译静态库
Settings --->
[*] Build static binary (no shared libs)
4.4 编译
$ make -j4 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
$ make install
4.5 创建根文件系统
$ cp -rf busybox-1.33.1/_install/* ./rootfs
$ cd ./rootfs/
$ mkdir lib proc tmp dev home etc sys opt mnt
$ mkdir -p etc/init.d
4.6 安装modules
非必要时,建议跳过此步,因为文件量很大,此步骤影响驱动相关内容。
$ cd linux-5.10.7/
$ make ARCH=arm64 modules_install INSTALL_MOD_PATH=../rootfs
4.7 添加rcS
$ cd rootfs/etc/init.d
$ touch rcS
$ chmod a+x rcS
$ vim rcS
添加如下内容:
echo "---------------------------"
echo "--------hello world--------"
echo "---------------------------"
4.8 复制动态库
前面步骤有安装gcc-10-aarch64-linux-gnu,我们把它的库复制到根文件系统。
$ sudo cp -rf /usr/aarch64-linux-gnu/lib/* ./rootfs/lib/
4.9 创建设备节点
$ cd rootfs/dev/
$ sudo mknod -m 664 tty1 c 4 1
$ sudo mknod -m 664 tty2 c 4 2
$ sudo mknod -m 664 tty3 c 4 3
$ sudo mknod -m 664 tty4 c 4 4
$ sudo mknod -m 664 console c 5 1
$ sudo mknod -m 664 null c 1 3
4.10 打包文件系统
# count值根据实际rootfs大小定,如果没有执行4.6步骤,128应该够用,否则应该需要很多,比如1024.
$ dd if=/dev/zero of=rootfs.ext4 bs=1M count=1024
$ mkfs.ext4 rootfs.ext4
$ sudo mount rootfs.ext4 /mnt/ -o loop
$ sudo cp -rf rootfs/* /mnt/
$ sudo umount /mnt/
5. 测试系统
编写启动脚本:
$ touch boot.sh
$ chmod a+x boot.sh
修改为如下内容:
#!/bin/sh
qemu-system-aarch64 \
-M virt \
-cpu cortex-a53 \
-nographic \
-smp 1 \
-m 512M \
-kernel linux-5.10.7/arch/arm64/boot/Image \
-append "rootwait root=/dev/vda rw console=ttyAMA0" \
-netdev user,id=eth0 \
-device virtio-net-device,netdev=eth0 \
-drive file=rootfs.ext4,if=none,format=raw,id=hd0 \
-device virtio-blk-device,drive=hd0
如果顺利的话,就可以正常进入系统了。