嗯,我搜索整個互聯網的代碼將運行使用ARM-Linux的gnueabi,作爲和QEMU。 打印整數值。來自字符串。例程將有所幫助。ARM採用的Qemu
回答
顯然還沒有搜查了整個互聯網......因爲,如果不出意外,QEMU的源代碼包含的所有問題的答案...
QEMU仿真系統。你是否試圖在模擬手臂系統上做裸機?或者你是否試圖運行arm linux操作系統,並在操作系統中創建一個程序集,該程序在qemu上運行的操作系統上運行?如果是後者則與qemu無關,這是一個操作系統問題,而不是qemu問題。它不是一個語言問題(asm),而是一個操作系統問題。 asm和low level是兩個不同的東西。 asm並不意味着低層訪問,對於低層次的東西絕對不是必需的(並且很少使用)。
如果你不感興趣的一個操作系統,但只是裸機,這裏是許多途徑獲得QEMU的控制檯上的串行輸出之一。字符串和整數等是一個無語言問題(相同的解決方案可以應用於任何編程語言,asm,c,python等)解決問題然後將語言應用於問題)。
的start.s
.globl _start
_start:
ldr r0,=0x101f1000
mov r1,#0
loop:
add r1,r1,#1
and r1,r1,#7
add r1,r1,#0x30
str r1,[r0]
mov r2,#0x0D
str r2,[r0]
mov r2,#0x0A
str r2,[r0]
b loop
MEMMAP
MEMORY
{
rom : ORIGIN = 0x00010000, LENGTH = 32K
}
SECTIONS
{
.text : { *(.text*) } > rom
}
的Makefile
CROSS_COMPILE ?= arm-none-linux-gnueabi
AOPS = --warn --fatal-warnings
COPS = -Wall -Werror -O2 -nostdlib -nostartfiles -ffreestanding
hello_world.bin : startup.s memmap
$(CROSS_COMPILE)-as $(AOPS) startup.s -o startup.o
$(CROSS_COMPILE)-ld startup.o -T memmap -o hello_world.elf
$(CROSS_COMPILE)-objdump -D hello_world.elf > hello_world.list
$(CROSS_COMPILE)-objcopy hello_world.elf -O binary hello_world.bin
運行與
qemu-system-arm -M versatilepb -m 128M -nographic -kernel hello_world.bin
但我不知道如何擺脫控制檯
相反,如果你這樣做:
qemu-system-arm -M versatilepb -m 128M -kernel hello_world.bin
,然後CTRL-ALT-3(不是F3,但3)將切換到串行控制檯 和您可以看到輸出,並可以通過關閉控制檯窗口關閉qemu。
在versatilepb qemu的目標發送寄存器UART是在地址0x101f1000。因爲這是一個模擬,你可以「試試」,發現寫入這個地址,而不做任何真實世界的uart設置「正常工作」,並且作爲一個仿真系統,它可能立即傳輸角色,所以你不必等待爲它完成或輪詢一個空的TX緩衝槽或類似的東西。只是爆炸。這會讓你開始,然後如果你感興趣的話,你可以嘗試在現實世界中做些什麼。 (其他目標中的其他飛鏢可能更接近現實世界,需要一些初始化,並等待空的tx buf)。
ASM使得上述比較痛苦,只是用C代替你低的水平/裸機程序。
另外,如果你使用arm裸機,你可以使用如果你知道你在做什麼,但是最終會發現arm-none-eabi更適合,因爲你沒有使用操作系統少得多的linux。
謝謝,很好的答案。 – 2013-04-04 09:21:32
感謝@dwelch爲這個不錯的答案,你會讓我知道在你的例子中使用memmap文件嗎? – 2014-02-25 18:05:49
我在這裏調用的memmap只是一個gnu鏈接器(ld)鏈接器腳本,通常帶有文件擴展名.ld,但我還沒有符合那種習慣呢......它告訴鏈接器在鏈接時將內容放入內存的位置,程序去哪裏數據去哪裏等等。在這種情況下,所有程序都沒有數據,所以.text是所有鏈接器腳本真正需要的。 – 2014-02-25 18:37:28
- 1. Qemu中的ARM NEON支持
- 2. 使用qemu-system-arm從閃存啓動
- 3. QEMU中的ARM中斷處理
- 4. qemu-arm無法運行arm編譯的二進制文件
- 5. 採用ARM或x86引導
- 6. qemu模擬ARM機器無法啓動
- 7. 玩/學-QEMU(for ARM),Angstrom Linux(或Debian)
- 8. 採用ARM-Linux的gnueabihf當beaglebone黑
- 9. Qemu-ARM用戶仿真。使用Go時出錯
- 10. libvirt qemu-system-arm,錯誤:XML錯誤:沒有PCI總線可用
- 11. 在qemu-arm中運行Android應用程序?
- 12. 使用KVM加速在ARM上運行qemu
- 13. 在ARM主機上使用qemu在Alpine/Docker上安裝bash
- 14. 爲什麼qemu-arm在這個arm彙編代碼中反覆運行pthread_join?
- 15. libm函數sinf不會在ARM QEMU機器上返回
- 16. 構建錯誤:qemu-arm:未找到命令
- 17. 解釋ARM霓虹燈圖像採樣
- 18. 如何在Qemu上單步執行GDB中的ARM彙編程序?
- 19. QEMU中
- 20. 「(gdb)run」在qemu仿真arm架構上運行可執行文件時崩潰
- 21. qemu-kvm的區別?
- 22. qemu-kvm的主題
- 23. 用gcc3.4編譯qemu neo
- 24. 使用gdb調試qemu
- 25. QEMU msi仿真
- 26. Raspbian掛在qemu
- 27. 不能Qemu中
- 28. 時間QEMU
- 29. 如何QEMU
- 30. QEMU窗口輸出重定向到終端中運行的qemu
我認爲人們對這個問題投了反對票,因爲它缺乏一些研究。順便說一句,這有問題,我看到了一個很好的答案。所以我決定加大對這個問題的評價,這樣它就會保持在網絡上而不是接近。 – 2013-04-04 09:21:08