導航:首頁 > 源碼編譯 > Qemu編譯aarch

Qemu編譯aarch

發布時間:2023-12-09 23:47:58

A. QEMU Monitor 使用

命令行啟動qemu之後,按鍵 Ctrl-a c 可以進入monitor,之後可以執行很多有用的命令。具體可以參考 https://qemu.readthedocs.io/en/latest/system/monitor.html 。但是文檔沒有提到的是其他進入monitor的方式,尤其是想要同時有consel 和 monitor的情況。

查詢手冊的執行參數一章可以看到參數 -monitor dev 可以指定monitor使用什麼字元設備輸出。但是用法沒給,而且必須使用字元設備也比較難用。

繼續查詢,這個回答很有幫助,提到如何開啟網路埠做monitor: https://unix.stackexchange.com/questions/426652/connect-to-running-qemu-instance-with-qemu-monitor

再查閱手冊,問題已經明白了。 dev設備 可以是很多形式,在執行參數 -serial dev 裡面講的很全面。 https://qemu.readthedocs.io/en/latest/system/invocation.html 。

而且這種靈活的使用方式不僅適用於monitor,也適用於 serial, 也就是能夠很方便的把guest os的consel重定向到各種形式的介面上(包括 虛擬控制台,tty,網路,管道,文件等)。

QEMU的強大令人驚嘆,回頭看看這塊源碼怎麼實現的。

這里給出具體參數,省去查找的麻煩:
qemu-system-aarch64 ... -monitor telnet:127.0.0.1:55555,server,nowait

使用telnet即可監聽埠: telnet 127.0.0.1 55555

UNIX套接字為簡單高效建立本地進程間通信的一種機制,介面和網路套接字一致,但是內部去掉了TCP/IP協議棧的繁瑣流程,提高通信效率。相關說明: https://akae.github.io/book/ch37s04.html

QEMU參數為: -monitor unix:qemu-monitor-socket,server,nowait , qemu-monitor-socket為套接字名稱,可以自定義。

使用socat連接: socat - unix-connext:qemu-monitor-socket 。 socat連接效果比telnet效果好。

socat工具十分強大,使用參考: http://brieflyx.me/2015/linux-tools/socat-introction/ 和 https://www.jianshu.com/p/54005e3095f3 。

B. qemu怎樣為選擇arm linux內核鏡像選擇運行arm平台

下載Linux內核

下載內核有兩種方法,一種是用git直接下載內核代碼樹,方便後面的內核開發。另一種是直接到內核社區下載對應版本的源碼包。我採用第一種方法,但後面發現主線上3.18版本和後面版本的代碼,使用這種搭建方法運行不起來。目前未查明問題的根因。如果讀者想快速搭建成功,建議選用3.16版本的內核進行搭建。

安裝arm的交叉編譯工具鏈

想必做嵌入式開發的朋友,對交叉編譯工具鏈不陌生。如果你訂制一個交叉編譯工具鏈,建議你使用crosstool-ng開源軟體來構建。但在這里建議直接安裝arm的交叉編譯工具鏈:

sudoapt-getinstallgcc-arm-linux-gnueabi

編譯Linux內核

生成vexpress開發板子的config文件:

makeCROSS_COMPILE=arm-linux-gnueabi-ARCH=armvexpress_defconfig

編譯:

makeCROSS_COMPILE=arm-linux-gnueabi-ARCH=arm

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

下載和安裝qemu模擬器

其實Ubuntu12.04有qemu的安裝包,但由於版本較低,對vexpress開發板支持不友好,建議下載高版本的qemu:

wget

配置qemu前,需要安裝幾個軟體包:

sudoapt-getinstallzlib1g-dev

sudoapt-getinstalllibglib2.0-0

sudoapt-getinstalllibglib2.0-dev

配置qemu,支持模擬arm架構下的所有單板:

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

編譯和安裝:

make

makeinstall

測試qemu和內核能否運行成功

qemu已經安裝好了,內核也編譯成功了,到這里最好是測試一下,編譯出來的內核是否OK,或者qemu對vexpress單板支持是否夠友好。

運行命令很簡單:

qemu-system-arm-Mvexpress-a9-m512M-kernel/home/ivan/kernel_git/linux/arch/arm/boot/zImage-nographic-append"console=ttyAMA0"

如果看到內核啟動過程中的列印,說明前的搭建是成功的。

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

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

-m512M單板運行物理內存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文件中找到。

製作根文件系統

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

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

1.根文件系統的內容

如果你看過《LinuxFromScratch》,相信你會對這一步產生恐懼感,但如果一直從事嵌入式開發,就可以放下心來。根文件系統就是簡單得不能再簡單的幾個命令集和態動態而已。為什麼LinuxFromScratch會有那麼復雜,是因為它要製作出一個Linux發生版。但在嵌入式領域,幾乎所有的東西,都是mini版本,根文件系統也不例外。

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

2.根文件系統放在哪裡

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

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

下載、編譯和安裝busybox

wget

makedefconfig

makeCROSS_COMPILE=arm-linux-gnueabi-

makeinstallCROSS_COMPILE=arm-linux-gnueabi-

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

形成根目錄結構

先在Ubuntu主機環境下,形成目錄結構,裡面存放的文件和目錄與單板上運行所需要的目錄結構完全一樣,然後再打包成鏡像(在開發板看來就是SD卡),這個臨時的目錄結構稱為根目錄

1.創建rootfs目錄(根目錄),根文件系統內的文件全部放到這里

sudomkdirrootfs

2.拷貝busybox命令到根目錄下

sudocpbusybox-1.20.2/_install/*-rrootfs/

3.從工具鏈中拷貝運行庫到lib目錄下

sudocp-P/usr/arm-linux-gnueabi/lib/*rootfs/lib/

4.創建4個tty端終設備

sudomknodrootfs/dev/tty1c41

sudomknodrootfs/dev/tty2c42

sudomknodrootfs/dev/tty3c43

sudomknodrootfs/dev/tty4c44

製作根文件系統鏡像

1.生成32M大小的鏡像

ddif=/dev/zeroof=a9rootfs.ext3bs=1Mcount=32

2.格式化成ext3文件系統

mkfs.ext3a9rootfs.ext3

3.將文件拷貝到鏡像中

sudomkdirtmpfs

sudomount-text3a9rootfs.ext3tmpfs/-oloop

cp-rrootfs/*tmpfs/

sudoumounttmpfs

系統啟動運行

完成上述所有步驟之後,就可以啟動qemu來模擬vexpress開發板了,命令參數如下:

qemu-system-arm-Mvexpress-a9-m512M-kernel/home/ivan/qemu/linux/arch/arm/boot/zImage-nographic-append"root=/dev/mmcblk0console=ttyAMA0"-sda9rootfs.ext3

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

寫在後面的話

通過上面的步驟,搭建出來一個最小的qemu+arm開發環境,你可以上面的基礎上修改內核,或者增加一些測試程序在單板上運行,甚至使用單板的flash設備。

在此,你可以做純arm架構的內核開發,或者與架構無關的內核開發,也可以做單板相關的驅動開發。

閱讀全文

與Qemu編譯aarch相關的資料

熱點內容
javaresponse文件 瀏覽:732
linuxrar壓縮文件夾 瀏覽:216
魅藍手機連接不上伺服器怎麼回事 瀏覽:377
工行app怎麼改已綁定銀行卡 瀏覽:531
oppo晶元程序員 瀏覽:600
oppok3應用怎麼加密 瀏覽:325
電腦軟盤怎麼加密碼 瀏覽:813
伺服器光交換機有什麼用 瀏覽:706
app上怎麼拍蛙小俠 瀏覽:215
志高聊天app怎麼下載 瀏覽:633
郵政app怎麼不能掃付款碼 瀏覽:557
筆記本電腦雙理由配置命令 瀏覽:63
拿著文件夾怎麼畫 瀏覽:875
博瑞發動機壓縮比 瀏覽:730
linux開源郵件伺服器 瀏覽:777
ios打地鼠源碼 瀏覽:472
伺服器換主機需要什麼系統 瀏覽:749
linux監控jvm內存 瀏覽:79
空調壓縮機自製工具 瀏覽:518
命令行控制路由器 瀏覽:957