2017-01-31 21 views
0

我試圖模仿使用QEMU的Arietta G25板,但遇到一些困難。使用QEMU模擬Arietta G25板

我開始編寫Linux補丁程序來支持Arietta,如here所述。然後我用qemu-system-arm -M help檢查了支持的機器列表,注意到雖然Arietta板沒有列出,但有一個versatileabversatilepb的選項,它們具有與Arietta相同的處理器。

裏面的內核目錄arch/arm/boot,我跑的命令

QEMU_AUDIO_DRV=none \ 
qemu-system-arm -M versatilepb \ 
       -m 256M \ 
       -kernel zImage \ 
       -dtb dts/acme-arietta.dtb \ 
       -nographic \ 
       -append "console=ttyAMA0" 

我期望看到內核啓動並立即慌張由於缺乏一個根文件系統。但是,我的控制檯上沒有顯示任何文字。

我試着玩控制檯的參數(例如使用ttyS0,添加費率等),但沒有奏效。

回答

2

對於那些習慣於x86的ARM嵌入式世界的人來說,這是一個非常常見的混亂點。對於x86,基本上你購買的每一個硬件都將看起來像一個標準的PC - 內存,串口等都將在完全相同的位置並以相同的方式訪問。所以客人軟件通常只能在任何這些系統上工作。

ARM是非常不同的。不同的嵌入式板卡和SoC會有不同的設備,並將它們放在不同的地址。運行在它們上的軟件需要與這些設備一起構建,並且試圖在錯誤類型的設備上運行低級別軟件(如內核或引導加載程序或固件映像)將不起作用。這裏發生的事情是,你說過「啓動一個爲Arietta構建的內核並告訴它UART是Arietta的UART所在的地方」,但是你在一塊仿真硬件(versatilepb)上運行它,這非常非常不同。內核將嘗試與不存在的硬件進行通信並且只會崩潰。它不能打印任何東西,因爲它不知道通用pb UART的位置。

爲QEMU仿真新的電路板模型添加支持並不是一個簡單的過程(將其視爲與將該電路板添加到Linux內核的工作量相同),因爲您需要編寫設備模型用於該板上的所有硬件,以及來賓內核嘗試使用的硬件。