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

相关推荐
哼?~1 天前
Linux线程基本概念
linux
海棠蚀omo1 天前
从零敲开 MySQL 的大门:库与表的基础操作实战(保姆级入门指南)
数据库·mysql
鸽芷咕1 天前
告别迁移焦虑:KingbaseES如何搞定Oracle复杂的层次查询与伪列?
数据库·oracle
当代红领巾1 天前
Oracle 中的物理备份
数据库·oracle
廋到被风吹走1 天前
【MySql】超时问题分析
java·数据库·mysql
Y001112361 天前
Day10-MySQL-事物
数据库·sql·mysql
轩情吖1 天前
MySQL之用户管理
数据库·c++·后端·mysql·权限管理·用户管理
姓王名礼1 天前
一份 Windows/macOS/Linux 完整安装 + 运行 + 对接 WebUI 的步骤
linux·windows·macos
零雲1 天前
java面试:Spring事务失效的场景有哪些?
java·数据库·面试
wenlonglanying1 天前
mysql之联合索引
数据库·mysql