qemu搭建arm64 linux kernel环境

一、环境准备

ubuntu 22.04

内核源码:linux-6.6.1 (直接上最新版) 下载链接:The Linux Kernel Archives

交叉编译工具链

sudo apt-get install gcc-12-aarch64-linux-gnu

具体能用的版本gcc-XX-arch64-linux-gnu可以按对应的ubuntu发行版本查找,当前22.04能用的最新版本是gcc-12;

或者可以到arm开发工具链上下载(自己下载的记得 PATH 变量中加一下路径)

Arm GNU Toolchain Downloads – Arm Developer

比如我现在用的gcc-13(不同的gcc版本支持的特性有差异,对编译结果优化也有差异):

 

qemu版本安装:

sudo apt-get install qemu-system-arm

还比较新

 

二、编译内核

解压linux内核后,先设置 config文件:

make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- defconfig

CROSS_COMPILE这里要注意一点,和交叉编译工具链名字有关,看一下你自己的arm64 gcc的前缀(如果是apt install gcc-12-aarch64-linux-gnu 安装的,前缀可能是 aarch64-linux-gnu- )

 

上面使用的defconfig文件在目录arch/arm64/configs/defconfig, 如果需要增减kernel CONFIG 直接修改这个文件即可。

编译内核

make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- Image -j8

 

这里的生成物 Image就是我们的kernel image, vmlinux是后面gdb调试使用的

编译module(ko): //这里并不必要,后续增加ko 时使用

make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- modules -j8

或者简洁点,导一个环境变量

export ARCH=arm64 export CROSS_COMPILE=aarch64-none-linux-gnu- make defconfig make all -j8

三、根文件系统制作

busybox配置编译

选择busybox, 比较便捷,下载链接:Index of /downloads

使用当前最新版本:busybox-1.36.1.tar.bz2

老套路:

export ARCH=arm64 export CROSS_COMPILE=aarch64-none-linux-gnu-

make menuconfig

Settings ---> [*] Build static binary (no shared libs) //静态编译

[*] Build with debug information //可选,带调试信息,方便后续调试

make; make install

busybox根目录下_install/ 就是根文件系统了

rootfs image制作

构建ext4 image

qemu-img create rootfs.img 512m

mkfs.ext4 rootfs.img

合并busybox 到img中

挂载rootfs.img到rootfs目录
mkdir rootfs
sudo mount rootfs.img rootfs

拷贝busybox的编译结果_install,同时创建关键目录(挂载虚拟文件系统需要)
sudo cp -rf _install/*  rootfs
sudo mkdir proc sys dev etc etc/init.d
sudo vim etc/init.d/rcS

rcS中的内容,主要是挂载常使用的虚拟文件系统
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
mount -t debugfs none /sys/kernel/debug

然后给rcS增加执行权限
sudo chmod +x  etc/init.d/rcS

最后umount rootfs
sudo umount rootfs

四、qemu启动kernel

qemu启动时也需要配置一个启动脚本加载kernel和rootfs,前面使用的是ext4 img是为了后续做一些实验,保存结果,以及调试ext4时都可以使用,简单mount img 然后往里面拷贝测试程序也比较方便

将前面编译生成的Image (arch/arm64/boot/Image ; rootfs.img 拷贝到一个目录,创建一个shell 脚本,记得增加可执行权限), 脚本内容如下

qemu-system-aarch64 \
    -machine virt,virtualization=true,gic-version=3 \
    -nographic \
    -m size=1024M \
    -cpu cortex-a72 \
    -smp 2 \ 
    -kernel Image \
    -drive format=raw,file=rootfs.img \
    -append "root=/dev/vda rw"

gic使用的是v3, 用的是arm64 A72 core (这里可以按自己需要去调整)

最后成功执行

水一篇操作手册,也是为了记录,虽然在不同的pc上搭建了很多次,有时也会犯重复错误

  • 18
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值