qemu运行编译的linux内核

2021-02-01, updated 2021-09-12

使用qemu模拟arm环境运行编译好的内核

内核编译

arm内核默认配置位置,其它平台类似

arch/arm/configs

配置

make  vexpress_defconfig ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-

编译

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-

编译生成内核位置

arch/arm/boot/zImage
arch/arm/boot/dts/vexpress-v2p-ca9.dtb 

qemu 启动

qemu-system-arm -M vexpress-a9 -m 512m -kernel ./qemu-image/zImage -dtb boot/vexpress-v2p-ca9.dtb -nographic -append console=ttyAMA0

制作文件系统

下载、编译和安装busybox

wget http://www.busybox.net/downloads/busybox-1.20.2.tar.bz2
make defconfig
make CROSS_COMPILE=arm-linux-gnueabi-
make install CROSS_COMPILE=arm-linux-gnueabi-

安装完毕后。会在busybox文件夹下生成_install文件夹。该文件夹下的程序就是单板执行所须要的命令。

形成根文件夹结构

先在Ubuntu主机环境下,形成文件夹结构,里面存放的文件和文件夹与单板上执行所须要的文件夹结构全然一样。然后再打包成镜像(在开发板看来就是SD卡)。这个暂时的文件夹结构称为根文件夹

  1. 创建rootfs文件夹(根文件夹),根文件系统内的文件全部放到这里
sudo mkdir rootfs
  1. 拷贝busybox命令到根文件夹下
sudo cp busybox-1.20.2/_install/* -r rootfs/
  1. 从工具链中拷贝执行库到lib文件夹下
sudo cp -P /usr/arm-linux-gnueabi/lib/* rootfs/lib/
  1. 创建4个tty端终设备
sudo mknodrootfs/dev/tty1 c 4 1
sudo mknod rootfs/dev/tty2c 4 2
sudo mknod rootfs/dev/tty3c 4 3
sudo mknod rootfs/dev/tty4c 4 4

制作文件系统镜像

  1. 生成32M大小的镜像
dd if=/dev/zero of=a9rootfs.ext3 bs=1M count=32
  1. 格式化成ext3文件系统
mkfs.ext3 a9rootfs.ext3
  1. 将文件复制到镜像中
sudo mkdir tmpfs
sudo mount -t ext3 a9rootfs.ext3 tmpfs/ -o loop
cp -r rootfs/*  tmpfs/
sudo umount tmpfs

启动

qemu-system-arm -M vexpress-a9 -m 512M -kernel /home/ivan/qemu/linux/arch/arm/boot/zImage -nographic -append "root=/dev/mmcblk0  console=ttyAMA0" -sd a9rootfs.ext3

退出qemu

在没有图形界面的情况下,可以使用 Ctrl+A 再按X的方式退出 也可以使用如下命令彻底退出

ps -A | grep qemu-system-arm | awk '{print $1}' | xargs sudo kill -9
words: 512 tags: linux driver kernel arm qemu