1. 程式人生 > >CentOS 7 利用qemu模擬ARM vexpress A9開發板

CentOS 7 利用qemu模擬ARM vexpress A9開發板

ogr install 進入 復制 不同 .html ini 依賴 roo

聽說qemu用於仿真arm很不錯,今日就來試了一把。由於剛剛開始,了解的並不多。本文僅僅記錄Qemu裝載Linux kernel和busybox根文件系統的過程。後續將會深入了解仿真的其他內容。

先上成果圖:

技術分享

1. 安裝QEMU

QEMU是一套由Fabrice Bellard所編寫的以GPL許可證分發源碼的模擬處理器,在GNU/Linux平臺上使用廣泛。Bochs,PearPC等與其類似,但不具備其許多特性,比如高速度及跨平臺的特性,通過KQMEU這個開源的加速器,QEMU能模擬至接近真實電腦的速度。 之前已有記錄CentOS 7編譯安裝qemu的方法: http://www.cnblogs.com/BinBinStory/p/7618303.html 我的版本是2.10.0 技術分享

2. 編譯內核

解壓下載的kernel文件,進入解壓後的文件夾,運行下面的指令編譯。

生成vexpress開發板子的config文件:
make CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm vexpress_defconfig

編譯:

make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm

生成的內核鐿像位於arch/arm/boot/zImage, 後續qemu啟動時需要使用該鏡像。

這裏簡單介紹下qemu命令的參數:

-M vexpress-a9 模擬vexpress-a9單板,你可以使用-M ?參數來獲取該qemu版本支持的所有單板

-m 512M 單板運行物理內存512M

-kernel /home/ivan/kernel_git/linux/arch/arm/boot/zImage 告訴qemu單板運行內核鏡像路徑

-nographic 不使用圖形化界面,只使用串口

-append "console=ttyAMA0" 內核啟動參數,這裏告訴內核vexpress單板運行,串口設備是哪個tty。

註意:

我每次搭建,都忘了內核啟動參數中的console=參數應該填上哪個tty,因為不同單板串口驅動類型不盡相同,創建的tty設備名當然也是不相同的。那vexpress單板的tty設備名是哪個呢? 其實這個值可以從生成的.config文件CONFIG_CONSOLE宏找到。

如果搭建其它單板,需要註意內核啟動參數的console=參數值,同樣地,可從生成的.config文件中找到。

3. 制作根文件系統

到這裏是否大功告成了呢? 其實在上面的測試中,你會發現內核報panic,因為內核找不到根文件系統,無法啟init進程。

根文件系統要考慮兩個方面:

1. 根文件系統的內容

在嵌入式領域,幾乎所有的東西,都是mini版本,根文件系統也不例外。

本文制本的根文件系統 = busybox(包含基礎的Linux命令) + 運行庫 + 幾個字符設備

2. 根文件系統放在哪裏

其實依賴於每個開發板支持的存儲設備,可以放到Nor Flash上,也可以放到SD卡,甚至外部磁盤上。最關鍵的一點是你要清楚知道開發板有什麽存儲設備。

本文直接使用SD卡做為存儲空間,文件格式為ext3格式

下載、編譯和安裝busybox

wget http://www.busybox.net/downloads/busybox-1.27.2.tar.bz2

make defconfig

make CROSS_COMPILE=arm-linux-gnueabi-

make install 

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

形成根目錄結構

先在CentOS主機環境下,形成目錄結構,裏面存放的文件和目錄與單板上運行所需要的目錄結構完全一樣,然後再打包成鏡像(在開發板看來就是SD卡),這個臨時的目錄結構稱為根目錄。 1. 創建rootfs文件夾(根文件夾),根文件系統內的文件全部放到這裏
sudo mkdir rootfs

2. 拷貝busybox命令到根文件夾下

sudo cp busybox-1.20.2/_install/* -r rootfs/
mkdir -p ~/rootfs/{dev,etc/init.d,lib}

3. 從工具鏈中拷貝執行庫到lib文件夾下

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

4. 創建4個tty端終設備

sudo mknodrootfs/dev/tty1 c 4 1

sudo mknod rootfs/dev/tty2c 4 2

sudo mknod rootfs/dev/tty3c 4 3

sudo mknod rootfs/dev/tty4c 4 4

制作根文件系統鏡像

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

4. 系統啟動運行

完成上述所有步驟之後,就可以啟動qemu來模擬vexpress開發板了,命令參數如下:
qemu-system-arm -M vexpress-a9 -m 512M -kernel linux-kernel/linux-4.13/arch/arm/boot/zImage -dtb linux-kernel/linux-4.13/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "root=/dev/mmcblk0  console=ttyAMA0" -sd a9rootfs.ext3

從內核啟動打印。到命令行提示符出現,激動人心的時刻出現了……

5. qemu 退出方法

qemu 退出方法 ctrl + A 按 X ,不是很靈敏,但有效。

技術分享

----------------------------------------------------------------------------

搭建的過程看似簡單,可也遇到了不少麻煩,很多都是通過百度/bing解決的。

參考:

從零使用qemu模擬器搭建arm運行環境

用Qemu模擬vexpress-a9 (二) --- 創建根文件系統

qemu 退出方法

CentOS 7 利用qemu模擬ARM vexpress A9開發板