歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> QEMU搭建Kernel調試開發環境

QEMU搭建Kernel調試開發環境

日期:2017/2/28 13:47:14   编辑:Linux教程

QEMU簡介

先看看維基百科的解釋,什麼是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 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和內核啟動是否成功

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 http://www.busybox.net/downloads/busybox-1.20.2.tar.bz2 
make defconfig
make CROSS_COMPILE=arm-linux-gnueabi-
make install 

安裝完成後,會在busybox目錄下生成_install目錄,該目錄下的程序就是單板運行所需要的命令。

形成根文件系統

  1. 創建rootfs目錄(根目錄),根文件系統內的文件全部放到這裡
    sudo mkdir rootfs
  2. 拷貝busybox命令到根目錄下
    sudo cp busybox-1.20.2/_install/* -r rootfs/

制作根文件系統鏡像

  1. 生成32M大小的鏡像
    dd if=/dev/zero of=a9rootfs.ext3 bs=1M count=32
  2. 格式化成ext3文件系統
    mkfs.ext3 a9rootfs.ext3
  3. 將文件拷貝到鏡像中
    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 

從內核啟動打印,到命令行提示符出現,到此qemu的arm環境就搭建完成了,可以 用來做內核學習了。
但是目前方式掛載的根文件系統使用起來很麻煩,每次修改完代碼重新編譯之後都需要重新制作文件系統鏡像。因此更推薦後邊的做法。

使用nfs文件系統啟動

安裝nfs服務程序

sudo apt-get install nfs-kernel-server

創建nfs共享文件夾

將前邊創建的rootfs文件夾的權限修改為777
sudo chmod 777 /root/rootfs
修改/etc/exports文件
sudo vim /etc/exports
添加/root/rootfs *(rw,insecure,sync,no_root_squash)

啟動nfs服務

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掛載nfs根文件系統

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 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved