众所周知,QEMU是一个可以模拟ARM架构的虚拟机,拥有高速、开源、跨平台、支持多种架构等优点。接下来,我们将使用QEMU模拟vexpress-a9,并在上面跑一个Linux kernel,为接下来的工作实验做准备。
实验环境及软件版本
ubuntu 16.04.2
Linux kernel-4.14.7
QEMU-2.11.0
Busybox-1.27.2
下载Linux kernel
wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.14.7.tar.xz
这里利用wget下载linux-4.14.7版本,下载完成后解压:
tar xvJf linux-4.14.7.tar.xz
编译Linux内核
由于我们要让Linux kernel在模拟的arm架构上运行,这里需要进行交叉编译
安装arm交叉编译工具链
sudo apt-get install gcc-arm-linux-gnueabi
进入kernel源文件目录
cd linux-4.14.7
make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm vexpress_defconfig
make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm menuconfig
(如果运行menuconfig显示缺失ncurses包,则运行以下命令安装即可)
sudo apt-get install libncurses5-dev
进入菜单配置,进行以下设置:
System Type -->
[ ] Enable the L2x0 outer cache controller
取消该选项,否则QEMU运行不起来
Kernel Features -->
[*] Use the ARM EABI to compile the kernel
确保该选项被选择
使用交叉工具链编译
make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm
编译成功后,arch/arm/boot目录下生成内核镜像文件zImage
可以将zI