【轉帖】Linux系統上面qemu 模擬arm

零基礎在Linux系統搭建Qemu模擬arm

       因爲最近的一個項目,須要用到qemu模擬arm系統跑程序,因此作了一次搭建,在網上找到了兩篇文章,寫得都很詳細,其中一篇文章是對另一篇文章進行的修改和添加,可是基於本身系統去作,仍是發現了最新修改的文章過程當中的一些錯漏,加之想記錄下這次本身的搭建,因此寫下這篇博客。html

參考博客文章(1):https://blog.csdn.net/linyt/article/details/42504975linux

參考博客文章(2):https://blog.csdn.net/sxw1002/article/details/52841671express

 

本次PC系統:Ubuntu16.04app

目標系統:以Versatile Express-A9開發板爲例搭建環境工具

(一)Qemu編譯安裝

1.Qemu源碼下載:wget http://wiki.qemu-project.org/download/qemu-2.7.0.tar.bz2oop

2.安裝所須要的軟件包(參考兩文章):post

sudo apt-get install zlib1g-dev學習

sudo apt-get install libglib2.0-0flex

sudo apt-get install libglib2.0-devspa

sudo apt-get install autoconf

sudo apt-get install flex bison

sudo apt-get install libtool  

3.解壓Qemu安裝包

sudo tar -jxvf qemu-2.7.0.tar.bz2

4.進入Qemu包

cd qemu-2.7.0

5.編譯安裝

./configure --target-list=arm-softmmu --audio-drv-list=

make

make install

注:最初原文此處用的是2.0的安裝包,可是在編譯的時候總會出現以下錯誤:

fatal error: linux/compiler-gcc5.h: No such file or directory

此錯誤是由於2.0版本的Qemu並不支持Gcc5.h,起初仍找了不少方法去修改這種錯誤,例以下載Gcc或者從別的地方
找Gcc補進來,但並無什麼用。而用Qemu2.7安裝包便不會出現這些問題。
 
最終結果:
 
 

(二)Linux內核編譯

1.安裝交叉編譯工具

sudo apt-get install gcc-arm-linux-gnueabi

2.內核下載

wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.8.tar.xz

解壓: tar -xvf linux-4.8.tar.xz

注:此處不用原文的3.16版本,是由於咱們的下載交叉編譯器指令默認直接下載最新版的交叉編譯器,可是3.16並不支持最新版的交叉編譯器,在以後的make中會反覆出現error,因此此處換用4.8版本的Linux內核,換用以後一路風順,不會出現問題。

如有朋友有興趣想要編譯3.16版本的內核,能夠下降交叉編譯器的版本,使用4.7版本的交叉編譯器,因爲下降版本的話後面的環境變量的設置都要改動,有點麻煩,因此這裏我就不展現出來。

3.配置編譯

    export CROSS_COMPILE=arm-linux-gnueabi-

    export ARCH=arm

    make vexpress_defconfig

    make -j2

徹底以後便在arch/arm/boot/目錄中生成了zImage:

 

(三)根文件的製做 

(1)busybox的下載

     wget http://www.busybox.net/downloads/busybox-1.25.0.tar.bz2 --no-check-certificate

     解壓:tar -jxvf busybox-1.20.2.tar.bz2

(2)配置編譯

    make defconfig

    make CROSS_COMPILE=arm-linux-gnueabi-

    make CROSS_COMPILE=arm-linux-gnueabi- install

      

(3)開始製做根目錄

1.建立必要的目錄

    mkdir rootfs

    cd rootfs

    mkdir rootfs /lib

    mkdir rootfs /dev

2.拷貝busybox編譯生產的目錄和文件,編譯器自帶的lib

    sudo cp busybox-1.25.0/_install/* -r rootfs/

    sudo cp -P /usr/arm-linux-gnueabi/lib/* rootfs/lib/

3.建立4個tty終端設備

    sudo mknod rootfs/dev/tty1 c 4 1

    sudo mknod rootfs/dev/tty2 c 4 2

    sudo mknod rootfs/dev/tty3 c 4 3

    sudo mknod rootfs/dev/tty4 c 4 4

4.生成32M大小的鏡像,並拷文件系統樹到鏡像文件中

    dd if=/dev/zero of=a9rootfs.ext3 bs=1M count=32

    mkfs.ext3 a9rootfs.ext3

    mkdir tmpfs

    mount -t ext3 a9rootfs.ext3 tmpfs/ -o loop

    cp -r rootfs/*  tmpfs/

    sudo umount tmpfs 

到此全部的配置編譯所有完成,能夠運行虛擬機了:

在終端輸入指令:qemu-system-arm -M vexpress-a9 -m 512M -kernel /home/chris/Desktop/linux-4.8/arch/arm/boot/zImage -dtb  /home/chris/Desktop/linux-4.8/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "root=/dev/mmcblk0  console=ttyAMA0" -sd a9rootfs.ext3

由於我是安裝在桌面因此是那樣的目標路徑,若安裝在不一樣地方就改一改就好了。(此圖取自參考文章)

本着通過記錄自身搭建過程,並以此爲經驗供有須要的朋友參考學習,絕無其餘意思,原文不少步驟與參考文章相同,但絕無抄襲之意,在此再次感謝上方連接的兩位做者。但願此文章對學習嵌入式的朋友有幫助。

相關文章
相關標籤/搜索