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

相关推荐
byte轻骑兵1 分钟前
【BlueZ 】用户态入口:main.c 核心函数与程序启动流程
linux·人工智能·bluez·电脑蓝牙·嵌入式蓝牙
底层玩家老张22 分钟前
数据库上K8s,运维为什么反而更累了?从StatefulSet到Operator的复盘
数据库·kubernetes·operator·数据库运维·架构选型
我科绝伦(Huanhuan Zhou)23 分钟前
Linux rpm包损坏解决方案
运维
Tisfy38 分钟前
LeetCode 2058.找出临界点之间的最小和最大距离:遍历+遇到极值则更新(这种题谁空间复杂度不是O(1)啊)
linux·数据库·leetcode·链表·题解·模拟·遍历
数据库小学妹43 分钟前
MySQL死锁排查:锁机制原理、死锁日志与information_schema定位
运维·数据库·mysql
liulilittle43 分钟前
REALITY 代理隧道的有效检测方法: 被动、主动与确定性三层实证研究
linux·服务器·网络·网络协议·安全·网络安全·通信
2601_9673387144 分钟前
Text2SQL智能体基础到实战课程
数据库·oracle
CadeCode1 小时前
Oracle 逗号拼接字段处理
数据库·后端·性能优化
Sirens.1 小时前
MySQL数据库:视图
数据库·mysql
JoyCong19981 小时前
从iPhone Ultra到ToDesk:折叠大屏时代的效率革命,硬件只是开始
大数据·运维·ios·智能手机·iphone·远程工作·远程操作