下载

qemu-system-arm 启动仿真arm芯片
qemu-system-arm -M ? 察看支持arm平台有哪些(开发板)
qemu-system-arm -cpu ? 察看支持arm哪些cpu
qemu-img 格式化虚拟客户端映像、附加存储设备以及网络存储
1.安装交叉编译链(根据自己的需求去安装编译链,我这里安装的是32位)

step1:下载编译链,执行命令:
wget https://releases.linaro.org/components/toolchain/binaries/latest-7/arm-linux-
gnueabihf/gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabihf.tar.xz

关于编译链的资料参考:
     arm交叉编译器gnueabi、none-eabi、arm-
eabi、gnueabihf的区别
https://releases.linaro.org/components/toolchain/binaries/latest-7/arm-linux-gnueabihf/

step2:解压源码
tar -xjf gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabihf.tar.xz

step3:添加环境变量,使你的编译链全局可用   
gedit /etc/profile

在最后一行加入:
export PATH=$PATH:/qemu-lab/gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabihf/bin

该路径是你编译链加压后的编译工具所在的路径
step4:保存退出后使该变量生效:
source /etc/profile
此时在终端敲arm-linux + tab看下,一切正常的话会看到安装好的编译链
2.安装qemu
step1:
	wget https://download.qemu.org/qemu-2.11.0.tar.xz
step2:
	tar xvJf qemu-2.11.0.tar.xz
step3:
	cd /qemu-lab/qemu-2.11.0
step4:
	./configure
step5:
	make -j4
step6:
	make install
3.下载内核
step1:下载内核:
https://www.kernel.org/pub/linux/kernel/

step2:配置内核config:
make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm vexpress_defconfig
这里我们的config选用了网上资料较多,qemu支持也比较好的vexpress_defconfig,你也可以选用其他的

step3:编译内核:
make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm -j4
编译成功后会有这行打印,会告诉我们的镜像地址:Kernel: arch/arm/boot/zImage is ready
此时建议建立一个qemu-image目录用于存放所有编译出来的镜像文件,这里我们将内核镜像拷贝到这个目录备用

cp ./arch/arm/boot/zImage ./qemu-image/
4.使用qemu启动内核

因为我目前不太关注uboot,所以此次暂且不去深究uboot启动内核的细节,qemu可以绕过uboot直接指定内核启
动,接下来我们直接启动内核

启动内核命令:
qemu-system-arm -M vexpress-a9  -kernel ./qemu-image/zImage  -append "init=/linuxrc 
root=/dev/mmcblk0p1 rw  console=ttyAMA0" -nographic

-M用于指定机器型号
-kernel用于指定内核镜像
init用于指定文件系统起来后执行的linux的第一个进程
root用于指定使用哪个设备作为根文件系统
console用于指定终端
-nographic表示不使用图形界面
NOTE:tty配置错的话将看不到打印输出,这是我踩的最深的坑
tty的区别可以看内核文档:kernel/src/Documentation/serial-console.txt

在Ubuntu下直接通过apt命令来下载:

apt-get install qemu
apt install qemu

使用

安装QEMU之后,可以找到有如下的命令可用:

qemu-

qemu查看目录 如何查看qemu版本_qemu查看目录

可以看到它可以模拟很多种不同的架构
还有像qemu-img其实是一个工具,可以用来生成虚拟盘。

为了使用QEMU来安装和使用额外的系统(这里还是一个Ubuntu16.04系统),首先需要的是创建一个虚拟硬盘,下面是具体的命令:

qemu-img create -f qcow2 OS.img 20G

参数说明:
    create:表示执行的动作是创建虚拟盘;
    -f qcow2:指定虚拟盘的格式;
    OS.img是虚拟盘的名称,大小是20G。


之后开始安装系统,命令如下:
	qemu-system-x86_64 -boot d -cdrom ubuntu-16.04-desktop-amd64.iso -hda OS.img -m 2048
-bios OVMF.fd

参数说明:
    qemu-system-x86_64命令是结合自己的电脑构架使用的,因为这边使用的是Intel x64平台;
    -boot d:表示从CDROM启动系统,因为虚拟盘中目前还没有系统,需要从CDROM中启动安装盘;
    -cdrom:指定了安装的系统镜像;
    -hda:指定之前创建的虚拟盘;
    -m:指定了QEMU使用的系统内存大小,这里指定的是2G;
    -bios:指定了QEMU运行的BIOS,默认使用的是seabios,这里使用了自己编译的OVMF.fd,至于如何生成
OVMF.fd,可以参考其它的文章。

QEMU运行的速度及其慢,为了解决这个问题,可以使用KVM,它是内核层面对虚拟话的支持。
这里首先需要下载qemu-kvm,命令如下:

apt install qemu-kvm

下载之后,使用kvm命令来启动QEMU,命令的参数还是一样,只是将qemu-system-x86_64换成了kvm:

kvm -boot d -cdrom ubuntu-16.04-desktop-amd64.iso -hda OS.img -m 2048 -bios OVMF.fd

安装结束之后使用如下的命令启动:

kvm -bios OVMF.fd -hda OS.img -m 2048 -smp 4

基本参数还是没有变,这里增加了一个-smp参数,是用来指定QEMU使用的核数的,这里指定的是4核,可以在系统启动之后通过cat /proc/cpuinfo来查看:

实际上使用QEMU主要是为了调试OVMF.fd及它与OS的交互,因此这里再说下OVMF。
前面在使用QEMU的时候都加上了-bios参数,指定了自己编译的OVMF.fd,此时启动的QEMU就可以进入到BIOS下: