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

相关推荐
北龙云海2 小时前
从宕机到智变:2025数据中心进化启示录,数智运维如何定义未来
运维·ai·数据中心·智算·数智运维·数据中心规划
茁壮成长的露露2 小时前
导出导入工具mongoexport、mongoimport
数据库·mongodb
吉吉612 小时前
Docker拉取镜像解决办法
运维·docker·容器
馨谙2 小时前
Linux面试题----文件权限,chmod,chown,suid,sgid,粘滞位,umask
linux·运维·服务器
Coder_Boy_2 小时前
基于SpringAI的在线考试系统-考试系统DDD(领域驱动设计)实现步骤详解
java·数据库·人工智能·spring boot
徐子元竟然被占了!!2 小时前
常用端口学习
运维·网络·学习
workflower2 小时前
软件需求规约的质量属性
java·开发语言·数据库·测试用例·需求分析·结对编程
青衫客362 小时前
Linux 磁盘挂载全流程实战——从新盘初始化到安全开机自启
linux·运维·服务器
橘子133 小时前
MySQL库的操作(二)
数据库·mysql·oracle