Ubuntu 16.04下搭建QEMU虚拟机启动linux kernel
一:安装QEMU虚拟机
QEMU 官网下载安装包 https://www.qemu.org/
本文安装qemu-4.1.1 安装步骤如下:
1):安装库
sudo apt-get install zlib1g-dev
sudo apt-get install libglib2.0-0
sudo apt-get install libglib2.0-dev
sudo apt-get install libtool
sudo apt-get install libsdl1.2-dev
sudo apt-get install autoconf
sudo apt-get install libpixman-1-0
sudo apt-get install libpixman-1-dev
2):config
配置 ./configure --target-list=aarch64-softmmu --audio-drv-list=
3):make
编译源码
4):sudo make install (安装到系统默认路径,自定义路径须在config 步骤中指定)
安装生成得可执行文件到系统默认路径如下图安装成功
二:准备Linux内核镜像
1):配置交叉编译器不再啰嗦
2):Linux内核官网下载linux内核源码,https://www.kernel.org/ 本文所用版本为 linux-4.9.37.tar.gz
3):解压内核并编译内核,进入内核源码目录linux-4.9.37,编辑编译脚本 build.sh如下:
4):执行./build.sh 编译生成zImage与dtb文件,我们以arm官方vexpress 开发板为例
5):在output 目录下我们创建run.sh 脚本如下:
#!/bin/bash
qemu-system-arm -M vexpress-a9 -m 512M -kernel ./zImage -dtb ./vexpress-v2p-ca9.dtb -nographic -append "console=ttyAMA0"
我们在output目录下执行run.sh启动zImage 启动到最后内核挂在跟文件系统失败报painc错误而崩掉
我们下载busybox制作rootfs,选用版本为busybox-1.26.2.tgz,解压,进入到busybox-1.26.2目录创建编译脚本build.sh如下:
#/bin/sh
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- install
执行build.sh 编译生成_install 目录
我们创建个rootfs目录然后将_install目录下所有文件拷贝到rootfs目录,然后
mkdir dev
mkdir app
mkdir proc
mkdir sys
mkdir -p etc/init.d
在dev目录下创建console 设备文件 sudo mknod console c 5 1
在etc/init.d 目录下创建rcS文件内容如下:
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
/sbin/mdev -s
至此rootfs文件系统制作完成
我们重新编译内核,在linux-4.9.37 目录下vim .config 添加rootfs路径到.config文件
或者重新make ARCH=arm menuconfig 配置
重新编译内核生成zImage 和dtb文件,这次生成的zImage已经包含了rootfs
编译完成后进入到output目录下,修改run.sh如下:
#!/bin/bash
qemu-system-arm -M vexpress-a9 -m 512M -kernel ./zImage -dtb ./vexpress-v2p-ca9.dtb -nographic -append "rdinit=/linuxrc console=ttyAMA0"
执行run.sh 成功启动