Hello,
I was trying to run Linux inside a Vancouver virtual machine and using a virtual disk. But, I got an error when Linux kernel try to mount the root file system.
I tested the Linux kernel and the virtual disk image using Qemu and it worked well. I was also able to start the same Linux kernel on Vancouver but by providing an initrd ramfs file.
Please see below the trace of the linux boot:
(5) # [ 23.652175] VFS: Cannot open root device "(null)" or unknown-block(0,0) (5) # [ 23.652175] Please append a correct "root=" boot option; here are the availa (5) # | ble partitions: (5) # [ 23.652175] Kernel panic - not syncing: VFS: Unable to mount root fs on unkn (5) # | own-block(0,0) (5) # [ 23.652175] Pid: 1, comm: swapper/0 Tainted: G W 3.2.16-rt27 #3 (5) # [ 23.652175] Call Trace: (5) # [ 23.652175] [<c05f5299>] panic+0x66/0x173 (5) # [ 23.652175] [<c0849ca1>] mount_block_root+0x1d3/0x26c (5) # [ 23.652175] [<c02311bc>] ? sys_mknod+0x2c/0x30 (5) # [ 23.656100] [<c0849d93>] mount_root+0x59/0x5f (5) # [ 23.656100] [<c0849ee7>] prepare_namespace+0x14e/0x192 (5) # [ 23.656100] [<c0221665>] ? sys_access+0x25/0x30 (5) # [ 23.656100] [<c0849344>] kernel_init+0x13f/0x14e (5) # [ 23.656100] [<c0849205>] ? parse_early_options+0x25/0x25 (5) # [ 23.656100] [<c05fe6c2>] kernel_thread_helper+0x6/0x10
and this is the script I used to run Vancouver and Linux :
#!/usr/bin/env novaboot # -*-sh-*- HYPERVISOR_PARAMS=serial WVDESC=Kernel compile inside VM (on virtual disk, EPT + VPID) WVTEST_TIMEOUT=1200 QEMU_FLAGS=-cpu phenom -m 2048M bin/apps/sigma0.nul tracebuffer_verbose S0_DEFAULT hostserial hostvga hostkeyb:0,0x60,1,12 script_start:1,1 \ service_config vdisk_empty:736870912 service_disk bin/apps/vancouver.nul bin/boot/munich imgs/bzImage imgs/mdisk.img vancuver.nulconfig <<EOF sigma0::mem:512 sigma0::dma name::/s0/log name::/s0/timer name::/s0/fs/rom name::/s0/admission name::/s0/disk disk::0 || rom://bin/apps/vancouver.nul PC_PS2 ahci:0xe0800000,14,0x30 drive:0,0,0 || rom://bin/boot/munich || rom://imgs/bzImage clocksource=tsc console=ttyS0 || rom://imgs/mdisk.img EOF
Could someone tell me how to correct this error. Or give me some hints to another solution to build a disk image.
I need a disk image in order to add some executable that I already compiled on my host machine and to run these executable on the Linux guest OS once it will start on Vancouver VM.
Thank you very much in advance for your help.
Mehdi
Thus spake Mehdi AICHOUCH foxmehdi@gmail.com:
Hello,
I was trying to run Linux inside a Vancouver virtual machine and using a virtual disk. But, I got an error when Linux kernel try to mount the root file system.
#!/usr/bin/env novaboot # -*-sh-*- HYPERVISOR_PARAMS=serial WVDESC=Kernel compile inside VM (on virtual disk, EPT + VPID) WVTEST_TIMEOUT=1200 QEMU_FLAGS=-cpu phenom -m 2048M bin/apps/sigma0.nul tracebuffer_verbose S0_DEFAULT hostserial hostvga hostkeyb:0,0x60,1,12 script_start:1,1 \ service_config vdisk_empty:736870912 service_disk bin/apps/vancouver.nul bin/boot/munich imgs/bzImage imgs/mdisk.img vancuver.nulconfig <<EOF sigma0::mem:512 sigma0::dma name::/s0/log name::/s0/timer name::/s0/fs/rom name::/s0/admission name::/s0/disk disk::0 || rom://bin/apps/vancouver.nul PC_PS2 ahci:0xe0800000,14,0x30 drive:0,0,0 || rom://bin/boot/munich || rom://imgs/bzImage clocksource=tsc console=ttyS0 || rom://imgs/mdisk.img EOF
What your configuration script is telling Vancouver, is that you want to use mdisk.img as a initrd/initramfs for your Linux kernel. In addition you attach an empty virtual disk as a virtual SATA disk (which probably fails because disk::0 is wrong, see below). If, as I suspect, mdisk.img is a harddisk image, this will not work.
You have two options:
If your root filesystem is small, you should use an initramfs or initrd.
Or you have to tell sigma0 to offer mdisk.img as a virtual disk by using vdisk:rom://imgs/mdisk.img instead of vdisk_empty:736870912. In this case you also need to correct disk::0 into sigma0::drive:0 in vancouver.nulconfig, to allow access to this disk.
HTH, Julian
Hello Julian,
Thank you very much for your answer! It clarified to me many points.
You are right, I would like to use a virtual disk by providing a hard disk image.
I correct all the wrong parameters regarding the sigma0 and vancouver virtual disk configuration in my script.
But, I still get an error when Linux try to mount the virtual file system.
I used my script to boot Linux from the hard disk image "bootable-hdd.img" as in the example "vancouver-boot-from-disk.wv" and it worked well.
But, when I modified this script in order to make vancouver starts my patched Linux kernel and the "bootable-hdd.img" hard disk image, it failed at the mounting of the VFS.
Here are some traces from NOVA, NUL and Linux boot:
NOVA Microhypervisor v5-ee02aed (x86_32): Nov 23 2012 12:23:57 [gcc 4.6.2]
[ 0] CORE:0:0:0 10:2:3:0 [0] AMD Phenom(tm) 9550 Quad-Core Processor => hostkeyb:0+0x60+1+12 <= => script_start:1+1 <= => service_config <= => vdisk:rom://imgs/bootable-hdd.img <= vdisk: Opened 'imgs/bootable-hdd.img' 0x7dde00 bytes. vdisk: Attached as vdisk 0. => service_disk <= disk: Added '0' Constructing service /disk... Service /disk registered.
...
(5) INIT done (5) reset CPU from c mtr_in effff (5) > bool VirtualBiosMultiboot::receive(MessageBios&) rip ffff ilen 0 cr0 10 efl 2 (5) module 0 start 0x81c00000+934 cmdline rom://bin/boot/munich
(5) module 1 start 0x81c02000+42ffd0 cmdline rom://imgs/bzImage root=/dev/sda1 clocks (5) module 2 start 0x82033000+7dde00 cmdline rom://imgs/bootable-hdd.img
(5) # MUNICH: v.0.4.6 starts Linux (5) # MUNICH: 3.2.16-rt27 (mehdi@mehdi-laptop) #3 SMP PREEMPT RT Sat Apr 28 23:30:12 (5) # | CEST 2012 (5) # MUNICH: root=/dev/sda1 clocksource=tsc console=ttyS0 (5) # MUNICH: initrd 1C33000 (5) # MUNICH: copy image (5) # MUNICH: start kernel
...
(5) # [ 23.256381] VFS: Cannot open root device "sda1" or unknown-block(0,0) (5) # [ 23.256381] Please append a correct "root=" boot option; here are the availa (5) # | ble partitions: (5) # [ 23.256381] Kernel panic - not syncing: VFS: Unable to mount root fs on unkn (5) # | own-block(0,0) (5) # [ 23.256381] Pid: 1, comm: swapper/0 Tainted: G W 3.2.16-rt27 #3 (5) # [ 23.256381] Call Trace: (5) # [ 23.256381] [<c05f5299>] panic+0x66/0x173 (5) # [ 23.256381] [<c0849ca1>] mount_block_root+0x1d3/0x26c (5) # [ 23.256381] [<c02311bc>] ? sys_mknod+0x2c/0x30 (5) # [ 23.256381] [<c0849d93>] mount_root+0x59/0x5f (5) # [ 23.256381] [<c0849ee7>] prepare_namespace+0x14e/0x192 (5) # [ 23.256381] [<c0221665>] ? sys_access+0x25/0x30 (5) # [ 23.256381] [<c0849344>] kernel_init+0x13f/0x14e (5) # [ 23.256381] [<c0849205>] ? parse_early_options+0x25/0x25 (5) # [ 23.256381] [<c05fe6c2>] kernel_thread_helper+0x6/0x10
And this is my script to Linux inside a vancouver VM using virtual disk.
#!/usr/bin/env novaboot # -*-sh-*- HYPERVISOR_PARAMS=serial QEMU_FLAGS=-cpu phenom -smp 2 -m 512 bin/apps/sigma0.nul tracebuffer_verbose S0_DEFAULT mmconfig hostserial hostvga hostkeyb:0,0x60,1,12 service_config \ vdisk:rom://imgs/bootable-hdd.img \ service_disk \ script_start:1 bin/apps/vancouver.nul bin/boot/munich imgs/bzImage imgs/bootable-hdd.img vancuver.nulconfig <<EOF sigma0::mem:64 sigma0::dma name::/s0/log name::/s0/timer name::/s0/fs/rom name::/s0/admission name::/s0/disk sigma0::drive:0 || rom://bin/apps/vancouver.nul PC_PS2 ahci:0xe0800000,14,0x30 drive:0,0,0 || rom://bin/boot/munich ||
rom://imgs/bzImage root=/dev/sda1 clocksource=tsc console=ttyS0 || EOF
Could you please help me finding what's wrong in my test case. Thank you very much in advance.
Mehdi.
On Mon, Nov 26, 2012 at 6:40 PM, Julian Stecklina < jsteckli@os.inf.tu-dresden.de> wrote:
Thus spake Mehdi AICHOUCH foxmehdi@gmail.com:
Hello,
I was trying to run Linux inside a Vancouver virtual machine and using a virtual disk. But, I got an error when Linux kernel try to mount the root file system.
#!/usr/bin/env novaboot # -*-sh-*- HYPERVISOR_PARAMS=serial WVDESC=Kernel compile inside VM (on virtual disk, EPT + VPID) WVTEST_TIMEOUT=1200 QEMU_FLAGS=-cpu phenom -m 2048M bin/apps/sigma0.nul tracebuffer_verbose S0_DEFAULT hostserial hostvga hostkeyb:0,0x60,1,12 script_start:1,1 \ service_config vdisk_empty:736870912 service_disk bin/apps/vancouver.nul bin/boot/munich imgs/bzImage imgs/mdisk.img vancuver.nulconfig <<EOF sigma0::mem:512 sigma0::dma name::/s0/log name::/s0/timer
name::/s0/fs/rom
name::/s0/admission name::/s0/disk disk::0 || rom://bin/apps/vancouver.nul PC_PS2 ahci:0xe0800000,14,0x30 drive:0,0,0
||
rom://bin/boot/munich || rom://imgs/bzImage clocksource=tsc console=ttyS0 || rom://imgs/mdisk.img EOF
What your configuration script is telling Vancouver, is that you want to use mdisk.img as a initrd/initramfs for your Linux kernel. In addition you attach an empty virtual disk as a virtual SATA disk (which probably fails because disk::0 is wrong, see below). If, as I suspect, mdisk.img is a harddisk image, this will not work.
You have two options:
If your root filesystem is small, you should use an initramfs or initrd.
Or you have to tell sigma0 to offer mdisk.img as a virtual disk by using vdisk:rom://imgs/mdisk.img instead of vdisk_empty:736870912. In this case you also need to correct disk::0 into sigma0::drive:0 in vancouver.nulconfig, to allow access to this disk.
HTH, Julian
l4-hackers@os.inf.tu-dresden.de