2017-07-20 49 views
1

幾年前,我開始學習Arm架構。我發現了Qemu,我用它的realview a8仿真板根據Armv7進行編程。該板有一個LCD控制器,一箇中斷控制器等。我可以找到他們的所有規格,並最終做一個非常非常基本的調度程序,在Arm組件中編程一切,它很酷。然後我停下來,忙於工作。Qemu Aarch64支持主板

現在我試圖回到它,這次用Armv8和AArch64。但是我找不到AArch64支持哪些板卡。查詢Qemu顯示了與qemu-system-arm和qemu-system-aarch64相同的列表。即使Armv7的a8,a9和A15板卡也出現在qemu-system-aarch64列表中。這是否意味着沒有電路板仿真,我應該針對特定的cpu編程,如A53(正如我在網上看到的一些例子)。

回答

2

的「我該如何選擇一個板」的問題是一個相當普遍的一個和我們的文件對項目的wiki通常的回答:http://wiki.qemu.org/Documentation/Platforms/ARM

爲AArch64簡短的回答是,你要使用「的virt」除非你明確知道你想模擬一個64位Xilinx開發板(聽起來你不這樣做)。您還需要使用-cpu cortex-a53指定CPU類型,因爲「virt」板的默認值爲cortex-a15(32位CPU)。

qemu-system-aarch64二進制文件支持所有32位CPU和主板,與qemu-system-x86_64允許您運行32位x86 CPU來賓的方式相同,這就是爲什麼列表很長並充滿了32位主板。儘管如此,您不能僅僅嘗試使用帶有-cpu cortex-a53的32位電路板,這就像試圖將Core2Duo插入舊i386主板並且即使QEMU不打印錯誤信息也無法正常工作關於這個組合。

對於虛擬板,由於這不是建模一個真實的硬件,所以它的細節只在QEMU源代碼和設備樹blob中指定,我們傳遞給guest虛擬機。對於裸機客戶操作系統,你需要知道:

  1. 沒有在地址0x0啓動閃存
  2. 的UART是PL011(你可以使用-bios或-pflash QEMU命令行選項填寫)在0x0900000
  3. RAM從0x40000000
  4. 開始關於哪些設備都存在,並且其中它們在存儲器應該從設備樹團塊,其可以在RAM的底部找到獲得,假設你是裸露的所有其他信息通過-bios或-pflash加載金屬塊。 (如果你說你是一個通過-kernel加載的Linux內核,那麼我們通過內核啓動ABI指定的方式傳遞DTB,但裸機圖像通常不應該使用內核)
+0

大約4年前的最後時間,當我接觸手臂時,我做了裸機編程。我記得我使用過這樣的命令行:** $ qemu-system-arm -M versatilepb -m 128M -nographic -kernel test.bin **在這個[https://balau82.wordpress.com/2010/02/ 28/hello-world-for-bare-metal-arm-using-qemu /]。我進一步閱讀了DTB的工作原理,所以最後一次當我在Qemu上使用-Kernel選項時,qemu在r2中爲我提供了DTB指針,但是我完全忽略它,它一切正常? – san216

+0

此外,如果現在我必須使用一個虛擬板,我猜我必須有一個DTB解析器天氣,我使用-bios選項或-Kernel選項才能訪問由qemu模擬的外設。我想訪問一個我可以編程的中斷控制器,並執行一些基本的Aarch64異常處理。我的思路是否正確? – san216

+0

versatilepb板是真實硬件的模型,因此QEMU模擬硬件的功能,並且可以編寫假定存在硬件的客人代碼。對於這種模型,QEMU不會生成DTB。用戶可以通過-dtb命令行選項提供一個。 –

1

是的,您應該按照您的說法針對特定的cpu編程。

「-machine」 - 根據電路板參考文檔定義一組器件,無需CPU。

「-cpu」 - 根據該CPU內核的參考定義屬於該特定CPU內核的一組ISA功能和寄存器復位值。 (here is how qemu do it for aarch64

想象一下qemu作爲目標ISA軟件線程的環境。所有與外圍設備的交互都通過加載/存儲和中斷交付來執行。 爲了仿真外圍設備,我們需要知道MMIO基地址,其中斷號碼爲GIC,以及此類設備的編程模型。 qemu術語中的「Board」是一組這樣的設備。

Qemu對armv7機器與armv8 cpus的使用沒有任何限制,反之亦然。 Here您可以看到qemu如何將AArch64引導加載程序置於內存中,只有當指定的CPU支持此指令集時,否則它將爲Aarch32。

同樣可用於qemu-system-arm的所有「板卡」也可用於qemu-system-aarch64:您可以在qemu sources查看構建配置文件。

同樣在hw/arm/ dir。他們的實現非常簡單,所有工作都集中在board_init功能:構建設備,分配中斷線,將bootloader & dtb放在內存中。

+0

所以如果我理解正確地說,我仍然可以使用像realview-pb-A8這樣的東西,並使用-cpu選項切換ISA,從而與Aarch64一起工作,並使用板卡和外設規範對它們進行編程,因爲它們獨立於CPU ISA。順便說一下,我承認我並不瞭解bootloader的鏈接,因爲我沒有太多的關於qemu如何在引擎蓋下工作的背景以及我試圖更好地理解這些非常低級的事情。感謝dtb鏈接。我也一直在努力解決啓動固件,UEFI等問題,而且這種聯繫也很有幫助。 – san216