1.开发环境
1.1 宿主机:ubuntu 20.04.1
1.2 quem 4.2.1
bash
$ sudo apt-get install qemu
$ sudo apt-get install qemu-system
$ qemu-system-aarch64 -M help /* 查看支持的板子的列表 */
1.3 gcc 版本 7.5.0 (Linaro GCC 7.5-2019.12)
gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz
下载地址:https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/aarch64-linux-gnu/
bash
/* 环境变量追加到 /etc/profie 中 */
$ sudo vim /etc/profile
/* 最后面追加 aarch64 gcc 交叉编译工具链的路径 */
export PATH=$PATH:export PATH=$PATH:/home/zhaoxr/share123/qemu_busybox_linux/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin
/* 环境变量生效 */
$ source /etc/profile
1.4 busybox-1.36.1
busybox-1.36.1.tar.bz2
下载地址:https://busybox.net/downloads/
1.5 linux-6.3.8
linux-6.3.8.tar.gz
下载地址:https://mirrors.edge.kernel.org/pub/linux/kernel/v6.x/
2.编译linux和编译busybox
2.1 编译linux
c
# cd linux-6.3.8/
/*1.配置.config*/
# make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig
/*2.编译linux内核*/
# make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j8
- 编译linux之后的生成的文件目录:linux-6.3.8/arch/arm64/boot/Image.gz 或者 linux-6.3.8/arch/arm64/boot/Image
2.2 编译busbox
c
/*1.配置.config,这里面将busybox配置为静态编译,这样busybox在运行的时候就不需要额外的动态链接库了*/
# make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig
Busybox Settings --->
Build Options --->
[*] Build BusyBox as a static binary (no shared libs)
/*2.编译BusyBox*/
# make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- install
- 编译busbox之后的生成的文件目录:busybox-1.36.1/_install
3.制作根文件系统ext3
3.1 完善_install
c
# cd busybox-1.36.1/_install
# mkdir etc dev mnt
# mkdir -p proc sys tmp mnt
# mkdir -p etc/init.d/
# vim etc/fstab
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
# vim etc/init.d/rcS
echo -e "Welcome to arm64 tinyLinux"
/bin/mount -a
echo -e "Remounting the root filesystem"
mount -o remount,rw /
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
mdev -s
# chmod 755 etc/init.d/rcS
# vim etc/inittab
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
# chmod 755 etc/inittab
# cd dev
# sudo mknod console c 5 1
# sudo mknod null c 1 3
# sudo mknod tty1 c 4 1
3.2 打包根文件系统
c
/*在busybox-1.36.1目录下,将3.1完善的_install打包进ext3根文件系统中*/
# cd busybox-1.36.1/
# rm -rf rootfs.ext3
# rm -rf fs
# dd if=/dev/zero of=./rootfs.ext3 bs=1M count=32
# mkfs.ext3 rootfs.ext3
# mkdir fs
# mount -o loop rootfs.ext3 ./fs
# cp -rf ./_install/* ./fs
# umount ./fs
- 制作完成成,在busybox-1.36.1目录下生成rootfs.ext3
4.qemu启动arm64 linux
-kernel ./linux-6.3.8/arch/arm64/boot/Image.gz和file=./busybox-1.36.1/rootfs.ext3分别是linux binary和根文件系统。
c
# sudo qemu-system-aarch64 -M virt -cpu cortex-a57 -smp 4 -m 4G \
-kernel ./linux-6.3.8/arch/arm64/boot/Image.gz \
-drive file=./busybox-1.36.1/rootfs.ext3,format=raw,if=virtio \
-append "root=/dev/vda rw console=ttyAMA0 init=/linuxrc" \
-nographic 2>&1 | tee output_arm64.txt

参考链接:
ubuntu 20.04 qemu arm64 linux6.3.8 开发环境搭建
ubuntu 20.04 linux6.3.8 qemu arm64 平台 制作ext4根文件系统
从源码编译linux-4.9内核并运行一个最小的busybox文件系统(最新整理版)