QEMU搭建Kernel调试开发环境

先看看维基百科的解释,什么是QEMU

QEMU是一套由Fabrice Bellard所编写的模拟处理器的自由软件。它与Bochs,PearPC近似,但其具有某些后两者所不具备的特性,如高速度及跨平台的特性。经由KVM(早期为kqemu加速器,现在kqemu已被KVM替换)这个开源的加速器,QEMU能模拟至接近真实电脑的速度。QEMU有两种主要运作模式: User mode模拟模式,亦即是用户模式。QEMU能引导那些为不同中央处理器编译的Linux程序。而Wine及Dosemu是其主要目标。 System mode模拟模式,亦即是系统模式。QEMU能模拟整个电脑系统,包括中央处理器及其他周边设备。它使得为系统源代码进行测试及除错工作变得容易。其亦能用来在一部主机上虚拟数部不同虚拟电脑。

简而言之,qemu就是一个虚拟机软件,我们可以在里边跑自己构建的操作系统,这对于学习内核或者驱动开发来说真的是相当方便,可以抛开开发板,单拿一台笔记本电脑就可以学习内核测试模块代码,甚至直接做开发。真的是非常方便,废话不多说,开工。

下载安装qemu

笔者测试过Ubuntu 12.10 和 ubuntu 16.04两个版本,ubuntu 12.10apt提供的qemu版本较老对arm verpress板子支持的不够好(网友前辈说的,具体哪里不好,我也不知道)。
而ubuntu 16.04 apt提供的是2.5版本的qemu,版本比较新,就不用自己编译安装了。
两种方式全凭个人喜好。

root-># lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04 LTS Release: 16.04 Codename: xenial root-># qemu-system-arm -version QEMU emulator version 2.5.0 (Debian 1:2.5+dfsg-5ubuntu10.4), Copyright (c) 2003-2008 Fabrice Bellard ubuntu apt-get方式安装 root-># apt-get install qemu-system-arm

使用此命令会自动解决依赖关系完成安装过程,安装完成可以通过qemu-system-arm -version
测试安装是否成功。

自己下载安装

ubuntu 的apt其实有qemu的安装包,但是版本较低对vexpress的支持不好,此处直接下载较高版本的qemu自己手动安装。
wget
首先需要安装qemu依赖的环境
apt-get install libglib2.0-dev zlib1g-dev
下载完成后安装前需要进行配置,使其支持ARM架构下的所有单板

cd qemu/ ./configure --target-list=arm-softmmu --audio-drv-list= make make install 下载编译内核 下载内核

可以自行到上下载最新版内核

root-># wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.16.tar.gz 编译内核 root-># apt-get install libncurses5-dev root->#tar -zxvf linux-3.16.tar.gz root-># cd linux-3.16 root-># cp arch/arm/configs/vexpress_defconfig .config root-># make menuconfig CROSS_COMPILE=arm-linux- ARCH=arm root-># make -j4 CROSS_COMPILE=arm-linux- ARCH=arm

qemu模拟最好的arm芯片是ARM亲生的vexpress A9,本文搭建环境就以此为基础。

测试qemu和内核启动是否成功 qemu-system-arm -M vexpress-a9 -m 512M -nographic -append "console=ttyAMA0" -kernel /root/zImage-3.0

这里简单介绍下qemu命令的参数:

-M vexpress-a9 模拟vexpress-a9单板,你可以使用-M ?参数来获取该qemu版本支持的所有单板 -m 512M 单板运行物理内存512M -kernel /root/zImage-3.16 告诉qemu单板运行内核镜像路径 -nographic 不使用图形化界面,只使用串口 -append "console=ttyAMA0" 内核启动参数,这里告诉内核vexpress单板运行,串口设备是哪个tty。

发现启动到挂载根文件系统的时候出现kernel painc,说明内核已经正常启动了。然后需要制作根文件系统。

制作根文件系统 编译busybox wget make defconfig make CROSS_COMPILE=arm-linux-gnueabi- make install

安装完成后,会在busybox目录下生成_install目录,该目录下的程序就是单板运行所需要的命令。

形成根文件系统

创建rootfs目录(根目录),根文件系统内的文件全部放到这里
sudo mkdir rootfs

拷贝busybox命令到根目录下
sudo cp busybox-1.20.2/_install/* -r rootfs/

制作根文件系统镜像

生成32M大小的镜像
dd if=/dev/zero of=a9rootfs.ext3 bs=1M count=32

格式化成ext3文件系统
mkfs.ext3 a9rootfs.ext3

将文件拷贝到镜像中
sudo mkdir tmpfs
sudo mount -t ext3 a9rootfs.ext3 tmpfs/ -o loop
cp -r rootfs/* tmpfs/
sudo umount tmpfs

使用qemu启动自定义系统 qemu-system-arm -M vexpress-a9 -m 512M -kernel /root/zImage-3.16 -nographic -append "root=/dev/mmcblk0 console=ttyAMA0" -sd a9rootfs.ext3

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/14733.html