qemu_buildroot
此文档属于实践类文档,直接讲解某一个具体的板子对应的qemu操作步骤,不分析qemu的原理。
0. 简述
如果大家想要研究linux kernel driver框架原理?或想要研究linux kernel各种子系统原理?利用qemu摸拟某一个具体的板子,进行研究,是最合适的步骤,下面我一步一步介绍,共分成四步骤:
下载buildroot源码
配置、编译buildroot
qemu启动linux kernel
gdb调试linux kernel
1. 下载buildroot源码
目前是2020/02/25,目前最新的稳定版的buildroot是buildroot-2019.11.1,所以此文档用buildroot-2019.11.1
buildroot官网:https://buildroot.org/
2. 配置、编译buildroot
具体详细的buildroot操作,请看buildroot官方手册,下面只用最简单的步骤进行操作:
注意:此处利用arm vexpress板子进行讲解
$ make O=output/qemu_arm_vexpress qemu_arm_vexpress_defconfig // 配置buildroot
$ cd output/qemu_arm_vexpress
$ make // 编译buildroot
编译完成后,生成如下目录与文件:
qemu@qemu-VB:~/workplace/buildroot-2019.11.1/output/qemu_arm_vexpress$ ls -l
总用量 24
drwxr-xr-x 54 qemu qemu 4096 2月 25 08:53 build
drwxr-xr-x 11 qemu qemu 4096 2月 24 17:39 host
drwxr-xr-x 2 qemu qemu 4096 2月 25 08:53 images
-rw-r--r-- 1 qemu qemu 645 2月 25 08:49 Makefile
lrwxrwxrwx 1 qemu qemu 114 2月 25 08:53 staging -> host/arm-buildroot-linux-uclibcgnueabihf/sysroot
drwxr-xr-x 17 qemu qemu 4096 2月 24 17:33 target
各目录与文件的说明:
build:目录,存储各种源码的编译目录,如linux kernel目录、qemu目录
host:目录,存储编译过程需要用到的工具,如编译linux kernel的交叉工具链/bin/arm-linux-xxx
images:目录,最后生成的可执行文件,如rootfs.ext2/vexpress-v2p-ca9.dtb/zImage
Makefile:文件,让用户可以在output/qemu_arm_vexpress目录中,执行make [target]命令
staging:交叉工具链的软链接,为了向后兼容
target:目录,板子根文件系统,但是没有/dev/相关文件,所以不能作为NFS使用
3. qemu启动linux kernel
$ qemu-system-arm -M vexpress-a9 \
-m 512M \
-nographic \
-kernel zImage \
-dtb vexpress-v2p-ca9.dtb \
-append "root=/dev/mmcblk0 rw console=ttyAMA0" \
-sd rootfs.ext2
上面命令为了简单容易理解,没有列出对应文件的目录位置,下面一一说明:
host/bin/qemu-system-arm 或 build/host-qemu-3.1.1.1/arm-softmmu/qemu-system-arm
images/zImage 或 build/linux-4.19.16/arch/arm/boot/zImage
images/vexpress-v2p-ca9.dtb 或 build/linux-4.19.16/arch/arm/boot/dts/vexpress-v2p-ca9.dtb
images/rootfs.ext2
上面命令的各参数说明:
-M:指定开发板
-m:指定内存
-nographic 不使用图形化
4. gdb调试linux kernel
$ qemu-system-arm -S -s -M vexpress-a9 \
-m 512M \
-nographic \
-kernel zImage \
-dtb vexpress-v2p-ca9.dtb \
-append "root=/dev/mmcblk0 rw console=ttyAMA0" \
-sd rootfs.ext2
上面命令的各参数说明:
-S:Do not start CPU at startup (you must type ’c’ in the monitor)
-s:Shorthand for
-gdb tcp::1234
, i.e. open a gdbserver on TCP port 1234
此时,linux kernel暂停在启动时,等待gdb来连接它,如下:
$ host/bin/arm-linux-gdb build/linux-4.19.16/vmlinux
(gdb) target remote localhost:1234
Remote debugging using localhost:1234
0x60000000 in ?? ()
(gdb)
5. 参考链接
Last updated
Was this helpful?