完全参考这个链接,记录一下
Ubuntu16.04 安装 qemu 运行 Linux 3.16 - 灰信网(软件开发博客聚合)
安装 qemu
sudo apt install qemu qemu-system-arm
安装交叉编译工具链
sudo apt install gcc-arm-linux-gnueabi
下载编译内核:用的是14.04,中间没有报错
wget --no-check-certificate https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.16.tar.xz
xz -d linux-3.16.tar.xz
tar -xvf linux-3.16.tar
cd linux-3.16.82
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabi-
make vexpress_defconfig
make zImage
make modules
make dtbs
把 bin 文件都放在一起:
mkdir bin
cp arch/arm/boot/zImage bin/
cp arch/arm/boot/dts/*ca9.dtb bin/
cp .config bin/
制作根文件系统
下载、编译和安装busybox
wget --no-check-certificate https://busybox.net/downloads/busybox-1.31.0.tar.bz2
tar -jxvf busybox-1.31.0.tar.bz2
cd busybox-1.31.0
make defconfig
make CROSS_COMPILE=arm-linux-gnueabimake install CROSS_COMPILE=arm-linux-gnueabi-
创建 rootfs 目录:
mkdir rootfs mkdir rootfs/lib
拷贝 busybox 命令:
cp _install/* -r rootfs/
从工具链中拷贝运行库到 lib 下:
sudo cp -P /usr/arm-linux-gnueabi/lib/* rootfs/lib/
创建4个tty终端设备
mkdir -p rootfs/dev
sudo mknod rootfs/dev/tty1 c 4 1
sudo mknod rootfs/dev/tty2 c 4 2
sudo mknod rootfs/dev/tty3 c 4 3
sudo mknod rootfs/dev/tty4 c 4 4
生成镜像:
dd if=/dev/zero of=rootfs.ext3 bs=1M count=32
格式化为 ext3 文件系统映像:
mkfs.ext3 rootfs.ext3
先挂载刚才的镜像,然后将文件拷贝到镜像中:
mkdir tmpfs sudo mount -t ext3 rootfs.ext3 tmpfs/ -o loop sudo cp -r rootfs/* tmpfs/ sudo umount tmpfs
启动QEMU :进入内核目录 linux-3.16.82,执行如下命令:
sudo qemu-system-arm -M vexpress-a9 -m 512M -dtb bin/vexpress-v2p-ca9.dtb -kernel bin/zImage -nographic -append "root=/dev/mmcblk0 rw console=ttyAMA0" -sd rootfs.ext3 -net nic,vlan=0 -net tap,vlan=0,ifname=tap0
qemu退出
先按住“ctrl+a”,然后松开再按“x”键即可
gdb调试
参考链接如何在x86架构Linux上使用qemu+gdb调试aarch64的内核 - 知乎
cd linux-3.16.82
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabi-
/* 添加这两个编译选项 */
CONFIG_DEBUG_INFO=y
CONFIG_GDB_SCRIPTS=y
make vexpress_defconfig
make zImage
cp arch/arm/boot/zImage bin/
1、安装gdb
apt-get install gdb-multiarch
(报错信息如下)
sudo apt-get -f install(即可安装成功)
2、启动内核
sudo qemu-system-arm -M vexpress-a9 -m 512M -dtb bin/vexpress-v2p-ca9.dtb -kernel bin/zImage -nographic -append "root=/dev/mmcblk0 rw console=ttyAMA0" -sd rootfs.ext3 -net nic,vlan=0 -net tap,vlan=0,ifname=tap0 -S -gdb tcp::8889
3、启动gdb
cd linux-3.16
gdb-multiarch vmlinux
set architecture arm
4、连接qemu的内核
target remote:8889
加断点运行
加打印信息