簡體   English   中英

Qemu 引導原始 kernel 映像(不是 ELF)

[英]Qemu booting raw kernel image (not ELF)

有沒有辦法說服qemu(qemu-system-mipsel v4.1.0,如果重要的話)加載為(古代)u-boot構建的二進制(非elf)圖像?

我嘗試了我的 uImage 和 vmlinux.bin,但我總是得到“圖像不是 ELF”

完整的命令行是:

qemu-system-mipsel -M malta -kernel output/images/vmlinux.bin -serial stdio -drive file=output/images/rootfs.ext2,format=raw -append "rootwait root=/dev/hda" -net nic,model=pcnet -net user

錯誤是:

qemu-system-mipsel: could not load kernel 'output/images/vmlinux.bin': The image is not ELF

......這絕對是真的! 該圖像(實際上是它的uImage對應部分)在真實目標上運行良好(與馬耳他非常相似,但這超出了重點;失敗的 kernel 將是一個完全不同的問題)使用(在 u-boot 中)類似:

usb reset; fatload usb 0 85000000 uImage; fatload usb 0 86000000 initram.cpio.xz; setenv bootargs rd_start=0x86000000 rd_size=15000000 USE=usb; bootm 85000000

如前所述:我的問題是 qemu 甚至沒有嘗試加載圖像,而不是它在運行時失敗。

什么是正確的咒語?

您必須為 QEMU MIPS 構建 U-Boot 並將其作為 kernel 傳遞給 qemu-system-mips。 您可以使用 QEMU tftp 參數使保存 uImage 的目錄對 U-Boot 可用。

使用 U-Boot 的tftp命令加載 kernel 鏡像和bootm命令啟動 kernel。

您可能必須使用-bios標志來提供 U-boot 映像,然后自己設置環境以移交給 kernel。 據我了解,QEMU 要求將 ELF 格式的圖像提供給-kernel標志,大概(重點強調這個詞)因為 ELF 標頭中包含的數據對於配置環境而不是真正的引導加載程序是必要的(因為您'有效地繞過了啟動階段並直接跳轉到 kernel 執行)。 -bios沒有這些要求,因為您可能不會看到使用 ELF 標頭的第一階段二進制文件。

如果您知道 kernel 映像的入口點,這似乎是您基於該 uboot 命令所做的,您可以將-bios標志與-device loader,addr=[entry point],cpu-num=0結合使用-device loader,addr=[entry point],cpu-num=0 . 但是,如果您的硬件中有任何 MMU、TLB 或其他特定於架構的尋址,您可能會遇到問題。

帶着懷疑的態度對待所有這一切,因為我只是在利用我通過做與你類似的事情獲得的知識來工作。 可能有更好的方法來做到這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM