2012-12-11 123 views
4

我正在研究QEMU的源代碼。QEMU由Eclipse運行正常,但在調試時失敗

我用Eclipse打開它並配置了環境。然後,我可以爲ARM平臺構建它並通過啓動Linux來運行它。

調試時,在運行某些功能後失敗。 的錯誤信息是:

qemu: could not open disk image rdinit=/bin/sh": No such file or directory
+0

它看起來像QEMU嘗試使用主機的'/斌/ sh'沒有architectur e檢查。嘗試在互聯網上爲您的目標平臺獲取已編譯的'sh'二進制文件('busybox'重命名爲'sh'將運行正常)並將其與QEMU一起使用 –

+0

使用Eclipse,QEMU可以使用busybox作爲文件系統引導Linux。但是,當我在相同的環境中調試QEMU時發生錯誤。這很奇怪,因爲如果我可以運行QEMU,我將能夠調試它。 –

回答

0

看起來像有缺失"(雙引號字符)在項目配置文件中的某個地方,或者,也許,一個多餘的。

典型的QEMU調用是qemu-system-arm -kernel path/to/zImage -initrd path/to/test_rootfs -append "root=/dev/ram rdinit=/test"

如果你跳過第一個雙引號只是-append後 - QEMU會認爲rdinit=/test是一個磁盤映像,並嘗試打開它作爲一個文件

一個可能的解決方案是到grep Eclipse項目目錄爲"rdinit"關鍵字和檢查所有grep的結果丟失/冗餘報價

cd /your/project/dir 
grep -rw rdinit . 
+0

這是我的命令: -M versatilepb -kernel zImage -initrd rootfs.img -append「root =/dev/ram rdinit =/bin/sh」 因此,我不會忘記雙引號後的後綴。 因爲QEMU可以成功運行,所以我不認爲命令中有什麼錯誤。 它只在調試時失敗。 –

+0

當你正在調試時會發生什麼?也許調試器失去了一個報價?也許你可以使用'strace'來查看被調用的命令? –

+0

調試時,QEMU在函數static int parse_block_error_action(const char * buf,int is_read)失敗,並輸出錯誤消息: qemu:無法打開磁盤映像rdinit =/bin/sh:沒有這樣的文件或目錄 –

相關問題