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