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

相关推荐
大树883 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质4 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush44 小时前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5204 小时前
Linux 11 动态监控指令top
linux
Inhand陈工5 小时前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智5 小时前
ARP代理--工作原理
运维·网络·arp·arp代理
麦聪聊数据5 小时前
数据服务化时代:企业数据能力输出的核心路径
数据库
不会C语言的男孩5 小时前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
shushangyun_5 小时前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化