linux驱动开发-1 环境搭建

安装qemu

1
apt-get install qemu qemu-system qemu-user

安装交叉编译工具链

1
sudo apt-get install gcc-10-aarch64-linux-gnu

Linux内核网站下载5.10内核源码

1
2
3
4
5
6
7
export ARCH=arm64
export CROSS_COPILE=aarch64-linux-gnu-
make defconfig
# 如果需要可以在此 配置initramfs路径为"/tmp/rootfs/xxx"
# 记得勾选上"Compile the kernel with debug info",以及其他自己调试需要的配置选项
make menuconfig
make -j8 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-

制作根文件系统

1
2
3
4
5
6
7
mkdir rootfs
git clone https://github.com/mengning/menu.git
cd menu
# 修改Makefile,去掉"find init hello ***"和"qemu -kernel ../linux"语句
cd ../rootfs
cp ../menu/init ./
find . | cpio -o -Hnewc |gzip -9 > ../rootfs.img

安装调试环境

1
sudo apt-get install gdb-multiarch

启动调试环境

1
2
# 在一个窗口输入启动
qemu-system-aarch64 -M virt -cpu cortex-a53 -smp 2 -m 4096M -kernel /tmp/arch/arm64/boot/Image.gz -nographic -append "console=ttyAMA0 init=/linuxrc ignore_loglevel" -initrd /tmp/rootfs/rootfs.img -S -gdb tcp::9000

参数解释

1
2
3
4
5
6
7
8
-smp 核数目
-m 物理内存大小
-kernel 内核压缩镜像位置
-initrd rootfs位置
-nographic 不使用图形界面,不加可能会因为无法启动图形界面而失败
-append cmdline启动参数
-S 在入口处阻塞CPU
-gdb tcp::xxxx 指定通信通道为 本地tcp通道(因为是在同一个机器上),端口号为xxxx,如果不需要指定端口号可以用-s 代替

参考资料

QEMU搭建arm64 Linux调试环境 - 小乐叔叔的文章 - 知乎
https://zhuanlan.zhihu.com/p/345232459