2009年8月4日 星期二

More on QEMU

兩年前在 [QEMU 安裝與試跑] 探討了模擬 ARM Versatile 系統。 原以為這樣就會使用 QEMU 了,最近兩天為了模擬 x86 不成功,只好重新拾起 [QEMU Documentation] 仔細再 K 一下,補足原本欠缺的觀念,以下紀錄的是該準備的 sources & images :

linux-2.6.28 由 [kernel archive] 下載解壓的,
linux-0.2.img.bz2 由 QEMU Documentation | [download] | 下載得到,
bzImage-2.6.28-test 由 linux-2.6.28 編好之後所得,
initrd.img-2.6.28-test.bz2 由 linux-2.6.28 編好安裝模組 (make modules_install) 後,利用 update-initramfs -c -k 2.6.28-test 所得到的
檔案系統 (bunzip2 -c initrd.img-2.6.28-test.bz2 | cpio -idm)

以下紀錄了幾次錯誤的啟動方式:
#> qemu -kernel bzImage-2.6.28-test
==>A disk image must be given for 'hda' when booting a Linux kernel
(if you really don't want it, use /dev/zero)
#> qemu -kernel bzImage-2.6.28-test -hda /dev/zero
==> booting from Hard Disk
==>failed : not a bootable disk
==> no bootable device
沒頭緒,翻翻線上手冊好了---
在 [QEMU Documentation] 3.8 節 Direct Linux Boot 提到:
`...It is very useful for fast Linux kernel testing.
The syntax is :
qemu -kernel arch/i386/boot/bzImage -hda root-2.4.20.img -append "root=/dev/hda" `

"...Use ‘-kernel’ to provide the Linux kernel image and ‘-append’ to give the kernel command line arguments. The ‘-initrd’ option can be used to provide an INITRD image.
When using the direct Linux boot, a disk image for the first hard disk ‘hda’ is required because its boot sector is used to launch the Linux kernel..."

所以我們得準備一個 disk image,也就是剛才下載的 linux-0.2.img,讓 QEMU 透過 disk image 的 boot sector 載入 kernel image,並且傳 kernel parameter "root=/dev/hda" ,告訴 kernel 說 root filesystem 在 disk image 上!

#>qemu -kernel bzImage-2.6.28-test  -hda linux-0.2.img -append "root=/dev/hda"

終於成功 ,顯示出的 kernel 為餵進去的 2.6.28-test.,注意 disk image 不能用壓縮的 bz2 or gz ,否則會發生 waiting for root filesystem...的現象...殘念!

結論:在模擬 x86 上,需要有 disk image (即使不使用 disk image 上的 kernel image 也一樣),跟模擬 ARM 有所不同。





沒有留言:

張貼留言