qemu arm64 linux开发环境搭建

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文件系统(最新整理版)

相关推荐
倔强的石头_10 小时前
kingbase备份与恢复实战(二)—— sys_dump库级逻辑备份与恢复(Windows详细步骤)
数据库
chlk12316 小时前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
舒一笑16 小时前
Ubuntu系统安装CodeX出现问题
linux·后端
改一下配置文件17 小时前
Ubuntu24.04安装NVIDIA驱动完整指南(含Secure Boot解决方案)
linux
碳基沙盒17 小时前
OpenClaw 多 Agent 配置实战指南
运维
深紫色的三北六号1 天前
Linux 服务器磁盘扩容与目录迁移:rsync + bind mount 实现服务无感迁移(无需修改配置)
linux·扩容·服务迁移
SudosuBash1 天前
[CS:APP 3e] 关于对 第 12 章 读/写者的一点思考和题解 (作业 12.19,12.20,12.21)
linux·并发·操作系统(os)
jiayou642 天前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
哈基咪怎么可能是AI2 天前
为什么我就想要「线性历史 + Signed Commits」GitHub 却把我当猴耍 🤬🎙️
linux·github
十日十行2 天前
Linux和window共享文件夹
linux