先看看維基百科的解釋,什麼是QEMU
QEMU是一套由Fabrice Bellard所編寫的模擬處理器的自由軟件。它與Bochs,PearPC近似,但其具有某些後兩者所不具備的特性,如高速度及跨平台的特性。經由KVM(早期為kqemu加速器,現在kqemu已被KVM替換)這個開源的加速器,QEMU能模擬至接近真實電腦的速度。QEMU有兩種主要運作模式:
User mode模擬模式,亦即是用戶模式。QEMU能引導那些為不同中央處理器編譯的Linux程序。而Wine及Dosemu是其主要目標。
System mode模擬模式,亦即是系統模式。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
root-># apt-get install qemu-system-arm
使用此命令會自動解決依賴關系完成安裝過程,安裝完成可以通過qemu-system-arm -version
測試安裝是否成功。
ubuntu 的apt其實有qemu的安裝包,但是版本較低對vexpress的支持不好,此處直接下載較高版本的qemu自己手動安裝。 wget http://wiki.qemu-project.org/download/qemu-2.0.2.tar.bz2
首先需要安裝qemu依賴的環境
apt-get install libglib2.0-dev zlib1g-dev
下載完成後安裝前需要進行配置,使其支持ARM架構下的所有單板
cd qemu/
./configure --target-list=arm-softmmu --audio-drv-list=
make
make install
可以自行到www.kernel.org上下載最新版內核
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-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,說明內核已經正常啟動了。然後需要制作根文件系統。
wget http://www.busybox.net/downloads/busybox-1.20.2.tar.bz2
make defconfig
make CROSS_COMPILE=arm-linux-gnueabi-
make install
安裝完成後,會在busybox目錄下生成_install目錄,該目錄下的程序就是單板運行所需要的命令。
qemu-system-arm -M vexpress-a9 -m 512M -kernel /root/zImage-3.16 -nographic -append "root=/dev/mmcblk0 console=ttyAMA0" -sd a9rootfs.ext3
從內核啟動打印,到命令行提示符出現,到此qemu的arm環境就搭建完成了,可以 用來做內核學習了。
但是目前方式掛載的根文件系統使用起來很麻煩,每次修改完代碼重新編譯之後都需要重新制作文件系統鏡像。因此更推薦後邊的做法。
sudo apt-get install nfs-kernel-server
將前邊創建的rootfs文件夾的權限修改為777 sudo chmod 777 /root/rootfs
修改/etc/exports文件 sudo vim /etc/exports
添加/root/rootfs *(rw,insecure,sync,no_root_squash)
sudo /etc/init.d/nfs-kernel-server start
測試一下nfs環境是否搭建成功 sudo mount -t 127.0.0.1:/root/rootfs /mnt/
ls /mnt
查看是否掛載成功 sudo umount /mnt
qemu-system-arm -M vexpress-a9 -m 512M -nographic -append "console=ttyAMA0 root=/dev/nfs nfsroot=/root/rootfs rw ip=dhcp nousb" -kernel /root/zImage-3.16
其中nfsroot=後邊是nfs根文件系統位置
ip=dhcp指定qemu guest os 的ip分配方式
至此可以很方便的使用qemu掛載nfs文件系統進行內核學習和開發了。
本文錯略的介紹了qemu搭建內核學習的過程,沒有過多的關注細節,有興趣的可以研究一些qemu的其他參數,qemu的網絡配置,以及更詳細的文件系統構建方法。
Ubuntu 14.04中安裝QEMU http://www.linuxidc.com/Linux/2016-08/134084.htm
Ubuntu下使用KVM+Qemu 搭建虛擬機 http://www.linuxidc.com/Linux/2015-10/123796.htm
Linux入門學習教程:虛擬機體驗之QEMU篇 http://www.linuxidc.com/Linux/2015-03/114461.htm
Ubuntu 12.04之找不到Qemu命令 http://www.linuxidc.com/Linux/2012-11/73419.htm
Arch Linux上安裝QEMU+EFI BIOS http://www.linuxidc.com/Linux/2013-02/79560.htm
QEMU的翻譯框架及調試工具 http://www.linuxidc.com/Linux/2012-09/71211.htm
QEMU 代碼分析:BIOS 的加載過程 http://www.linuxidc.com/Linux/2014-12/110472.htm
QEMU 的詳細介紹:請點這裡
QEMU 的下載地址:請點這裡