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 变量中加一下路径)
https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads
比如我现在用的 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=arm64export CROSS_COMPILE=aarch64-none-linux-gnu-make defconfigmake all -j8
三、根文件系统制作
busybox 配置编译
选择 busybox, 比较便捷,下载链接:Index of /downloads
使用当前最新版本:busybox-1.36.1.tar.bz2
老套路:
make menuconfig
make; make install
busybox 根目录下_install/ 就是根文件系统了
rootfs image 制作
构建 ext4 image
合并 busybox 到 img 中
四、qemu 启动 kernel
qemu 启动时也需要配置一个启动脚本加载 kernel 和 rootfs,前面使用的是 ext4 img 是为了后续做一些实验,保存结果,以及调试 ext4 时都可以使用,简单 mount img 然后往里面拷贝测试程序也比较方便
将前面编译生成的 Image (arch/arm64/boot/Image ; rootfs.img 拷贝到一个目录,创建一个 shell 脚本,记得增加可执行权限), 脚本内容如下
记录一下,虽然在不同的 pc 上搭建了很多次,有时也会犯重复错误
版权声明: 本文为 InfoQ 作者【无人知晓】的原创文章。
原文链接:【http://xie.infoq.cn/article/3415445f1c8831423a94c4bc2】。文章转载请联系作者。
评论