1. 安装qemu
sudo apt install qemu-system-arm
2. 安装交叉编译器
sudo apt install gcc-arm-linux-gnueabi
3.下载并编译gdb
./configure --target=arm-linux-gnueabi
make -j16
make install
4.下载并编译linux内核源码
make vexpress_defconfig ARCH=arm
make -j8 ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- // 可以使用bear命令生成compile_commands.json文件
5.下载并编译busybox
make defconfig ARCH=arm
make -j16 ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
make install ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
6.制作文件系统image
qemu-img create -f raw disk.img 512M
mkfs -t ext3 disk.img
mkdir tmpfs
sudo mount -o loop disk.img tmpfs
mkdir -p tmpfs/{dev,etc/init.d,lib,proc,sys,mnt}
cp -r busybox-1.33.0/_install/* tmpfs/
cp -r /usr/arm-linux-gnueabi/lib/* tmpfs/lib/
vi tmpfs/etc/init.d/rcS
添加以下内容
############################
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
/sbin/mdev -s
############################
chmod 744 tmpfs/etc/init.d/rcS
sudo umount tmpfs
7.qemu启动内核
// 注意: -s -S参数仅在gdb调试的时候使用
qemu-system-arm -s -S -M vexpress-a9 -m 512M -kernel linux-4.4.267/arch/arm/boot/zImage -dtb linux-4.4.267/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "root=/dev/mmcblk0 rw console=ttyAMA0" -sd disk.img
7.gdb调试qemu启动内核,可配合vscode使用
gdb-multiarch vmlinux
(gdb) target remote :1234
8.使用buildroot
make qemu_arm_vexpress_defconfig
sudo make -j16
在output/images下生成zImage、vexpress-v2p-ca9.dtb、rootfs.ext2三个文件,分别是内核、DeviceTree文件和文件系统
// 注意: -s -S参数仅在gdb调试的时候使用
sudo qemu-system-arm -s -S -M vexpress-a9 -smp 4 -m 1024M -kernel output/images/zImage -append "root=/dev/mmcblk0 console=ttyAMA0 loglevel=8" -dtb output/images/vexpress-v2p-ca9.dtb -sd output/images/rootfs.ext2 -nographic
gdb-multiarch output/build/linux-5.10.7/vmlinux
(gdb) target remote :1234