Hello l4-hackers,

I try to run a vm with l4re on a RPI4b with this files bellow, but I don't know how to find the root device to finalize the boot process.

I haven't played on the network part yet, but if you have any advice on the subject as well, I'm a taker.

Help needed please. Thanks.

vm_hw.vbus
------8<------------------------------------------------------------------------------------------------
Io.add_vbusses
{
  vm_hw = Io.Vi.System_bus(function()
    MMC = wrap(Io.system_bus().mmc);
  end);
}
------8<------------------------------------------------------------------------------------------------

io.cfg
------8<------------------------------------------------------------------------------------------------
local Res = Io.Res
local Hw = Io.Hw
local add_children = Io.Dt.add_children

add_children(Io.system_bus(), function()
    mmc = Hw.Device(function()
        compatible = { "brcm,bcm2835-mmc" };
        Resource.reg0 = Res.mmio(0xfe300000, 0xfe3000FF);
        Resource.irq0 = Res.irq(0x7e + 32);
        Property.flags = Io.Hw_device_DF_dma_supported;
    end)
end)
------8<------------------------------------------------------------------------------------------------

mmc.dts
------8<------------------------------------------------------------------------------------------------
/dts-v1/;
/include/ "virt-arm_virt-64.dts"

/ {
  mmc@fe300000 {
    compatible = "brcm,bcm2835-mmc", "brcm,bcm2835-sdhci";
    reg = <0xfe300000 0x100>;
    interrupts = <0x0 0x7e 0x4>;
    clocks = <0x3 0x1c>;
    dmas = <0xa 0xb>;
    dma-names = "rx-tx";
    brcm,overclock-50 = <0x0>;
    status = "disabled";
    pinctrl-names = "default";
    pinctrl-0 = <0x19>;
    bus-width = <0x4>;
    phandle = <0x2d>;
  };
};
------8<------------------------------------------------------------------------------------------------

mfa.cfg
------8<------------------------------------------------------------------------------------------------
local L4 = require "L4";
local l = L4.default_loader;

vbus_l4linux = l:new_channel();

-- Start io & flash memory
l:start({
    caps = {
        sigma0 = L4.cast(L4.Proto.Factory, L4.Env.sigma0):create(L4.Proto.Sigma0),
        icu = L4.Env.icu,
        vm_hw = vbus_l4linux:svr()
    },
    log = {"IO", "y"}
}, "rom/io rom/io.cfg rom/vm_hw.vbus -vvvvvv");

l:startv({
    caps = {
        ram = L4.Env.user_factory:create(
          L4.Proto.Dataspace, 256 * 1024 * 1024,
          L4.Mem_alloc_flags.Continuous |
          L4.Mem_alloc_flags.Pinned |
          L4.Mem_alloc_flags.Super_pages,
          21):m("rws");
        vbus = vbus_l4linux;
    },
    log = L4.Env.log:m("rws")
}, "rom/uvmm", "-v",
        "--kernel", "rom/Image.gz",
        "--ramdisk", "rom/ramdisk-armv8-64.rd",
        "--dtb", "rom/mmc.dtb",
        "--cmdline", "console=hvc0 ramdisk_size=10000 root=/dev/mmcblkp3 rw");
------8<------------------------------------------------------------------------------------------------

in modules.list
------8<------------------------------------------------------------------------------------------------
entry mfa
roottask moe rom/mfa.cfg
module l4re
module hello
module uvmm
module ned
module mfa.cfg
module uvmm
module cons
module dtb/virt-arm_virt-64.dtb
module mmc.dtb
module[shell] echo $SRC_BASE_ABS/pkg/uvmm/configs/vmm.lua
module ramdisk-armv8-64.rd
module[uncompress] Image.gz
module io
module io.cfg
module vm_hw.vbus
------8<------------------------------------------------------------------------------------------------


Log from console
------8<------------------------------------------------------------------------------------------------
## Starting application at 0x010000
L4 Bootstrapper
  Build: #29 Sat Sep 18 16:38:05 CEST 2021, 10.2.1 20210110
  Raspberry Pi Model 4B, Rev 1.4, 8192MB, SoC BCM2711 [d03114]
  Warranty intact, OTP reading allowed, OTP programming allowed, Overvoltage allowed
  RAM: 0000000000000000 - 000000003b3fffff: 970752kB
  RAM: 0000000040000000 - 00000000fbffffff: 3080192kB
  RAM: 0000000100000000 - 00000001ffffffff: 4194304kB
  Total RAM: 8052MB
  Scanning fiasco
  Scanning sigma0
  Scanning moe
  Moving up to 18 modules behind 1100000
  moving module 17 { 39dc000-39dc066 } -> { 3ac1000-3ac1066 } [103]
  moving module 16 { 39db000-39db16e } -> { 3ac0000-3ac016e } [367]
  moving module 15 { 3796000-39da99f } -> { 387b000-3abf99f } [2378144]
  moving module 14 { 16d9000-37959ff } -> { 17be000-387a9ff } [34327040]
  moving module 13 { 1359000-16d8fff } -> { 143e000-17bdfff } [3670016]
  moving module 12 { 1358000-1358dbf } -> { 143d000-143ddbf } [3520]
  moving module 11 { 1357000-1357756 } -> { 143c000-143c756 } [1879]
  moving module 10 { 1356000-13565e9 } -> { 143b000-143b5e9 } [1514]
  moving module 09 { 130a000-1355ecf } -> { 13ef000-143aecf } [310992]
  moving module 08 { 1254000-130962f } -> { 1339000-13ee62f } [742960]
  moving module 07 { 1253000-1253386 } -> { 1338000-1338386 } [903]
  moving module 06 { 11d3000-1252a97 } -> { 12b8000-1337a97 } [522904]
  moving module 05 { 111d000-11d262f } -> { 1202000-12b762f } [742960]
  moving module 04 { 10f0000-111c9e7 } -> { 11d5000-12019e7 } [182760]
  moving module 03 { 10d2000-10ef957 } -> { 11b7000-11d4957 } [121176]
  moving module 02 { 109e000-10d13d7 } -> { 1183000-11b63d7 } [209880]
  moving module 01 { 1098000-109dd6f } -> { 117d000-1182d6f } [23920]
  moving module 00 { 101b000-1097387 } -> { 1100000-117c387 } [508808]
  Loading fiasco
  Loading sigma0
  Loading moe
  find kernel info page...
  found kernel info page (via ELF) at 3000
Regions of list 'regions'
    [        0,       fff] {     1000} Arch   mpspin
    [     1000,     8dfff] {    8d000} Kern   fiasco
    [    8e000,     8e347] {      348} Root   mbi_rt
    [   100000,    10a46f] {     a470} Sigma0 sigma0
    [   140000,    170cab] {    30cac} Root   moe
    [   171cb0,    17eed7] {     d228} Root   moe
    [  1000000,   101900b] {    1900c} Boot   bootstrap
    [  10000e8,   100011b] {       34} Root   cpu_boot
    [  101a1a4,   101ae49] {      ca6} Boot   modinfo
    [  11b7000,   3ac1066] {  290a067} Root   Module
  found kernel options (via ELF) at 4000
  Sigma0 config    ip:00100474 sp:00000000
  Roottask config  ip:00141584 sp:00000000
  Starting kernel fiasco at 000016d0
Hello from Startup::stage2
Number of IRQs available at this GIC: 256
FPU: Initialize
ARM generic timer: freq=54000000 interval=54000 cnt=1197663468
SERIAL ESC: allocated IRQ 125 for serial uart
Not using serial hack in slow timer handler.
Welcome to L4/Fiasco.OC!
L4/Fiasco.OC microkernel on arm
Rev: unknown compiled with gcc 10.2.1 20210110 for RPi4 (Broadcom 2711)    []
Build: #1 Sat Sep 18 00:56:20 CEST 2021

Allocate ARM PPI 25 to virtual 0
Allocate ARM PPI 27 to virtual 1
Allocate ARM PPI 25 to virtual 0
Allocate ARM PPI 27 to virtual 1
Allocate ARM PPI 25 to virtual 0
Cache config: ON
Allocate ARM PPI 27 to virtual 1
ID_PFR[01]:  00002222 00000000Calibrating timer loop... Cache config: ON
Allocate ARM PPI 25 to virtual 0
done.
Allocate ARM PPI 27 to virtual 1
MDB: use page size: 30
Cache config: ON
ID_PFR[01]:  00002222 00000000MDB: use page size: 21
 ID_[DA]FR0: 10305106 00000000
 ID_[DA]FR0: 10305106 00000000
ID_MMFR[04]: 00001124 00000000 00000000 00000000
ID_MMFR[04]: 00001124 00000000 00000000 00000000
MDB: use page size: 12
ID_PFR[01]:  00002222 00000000S ID_[DA]FR0: 10305106 00000000
IID_MMFR[04]: 00001124 00000000 00000000 00000000
GMA0: Hello!
  KIP @ 3000
  allocated 4KB for maintenance structures
SIGMA0: Dump of all resource maps
RAM:------------------------
[4:RWX:8e000;8efff]
[0:RWX:8f000;fffff]
[0:RWX:10b000;13ffff]
[4:R-X:140000;170fff]
[4:RW-:171000;17efff]
[0:RWX:17f000;ffffff]
[4:---:1000000;1000fff]
[0:RWX:1001000;11b6fff]
[4:RWX:11b7000;3ac1fff]
[0:RWX:3ac2000;3b3fffff]
[0:RWX:40000000;fbffffff]
[0:RWX:100000000;1feffffff]
IOMEM:----------------------
[0:RW-:0;fff]
[0:RW-:3b400000;3fffffff]
[0:RW-:fc000000;ffffffff]
[0:RW-:200000000;ffffffffffffffff]
MOE: Hello world
MOE: found 8185968 KByte free memory
MOE: found RAM from 8e000 to 1ff000000
MOE: allocated 8175 KByte for the page array @0x17f000
MOE: virtual user address space [0-7fffffffff]
MOE: rom name space cap -> [C:103000]
MOE: rwfs name space cap -> [C:105000]
  BOOTFS: [11b7000-11d4958] [C:107000] l4re
  BOOTFS: [11d5000-12019e8] [C:109000] hello
  BOOTFS: [1202000-12b7630] [C:10b000] uvmm
  BOOTFS: [12b8000-1337a98] [C:10d000] ned
  BOOTFS: [1338000-1338387] [C:10f000] mfa.cfg
  BOOTFS: [1339000-13ee630] [C:111000] uvmm
  BOOTFS: [13ef000-143aed0] [C:112000] cons
  BOOTFS: [143b000-143b5ea] [C:114000] virt-arm_virt-64.dtb
  BOOTFS: [143c000-143c757] [C:116000] mmc.dtb
  BOOTFS: [143d000-143ddc0] [C:118000] vmm.lua
  BOOTFS: [143e000-17be000] [C:11a000] ramdisk-armv8-64.rd
  BOOTFS: [17be000-387aa00] [C:11c000] Image.gz
  BOOTFS: [387b000-3abf9a0] [C:11e000] io
  BOOTFS: [3ac0000-3ac016f] [C:120000] io.cfg
  BOOTFS: [3ac1000-3ac1067] [C:122000] vm_hw.vbus
MOE: cmdline: moe rom/mfa.cfg
MOE: Starting: rom/ned rom/mfa.cfg
MOE: loading 'rom/ned'
Ned says: Hi World!
Ned: loading file: 'rom/mfa.cfg'
IO      | Io service
IO      | Verboseness level: 7
IO      | unused physical memory space:
IO      |   [0000003b400000-0000003fffffff]
IO      |   [000000fc000000-000000ffffffff]
IO      |   [00000200000000-ffffffffffffffff]
IO      | no 'iommu' capability found, using CPU-phys for DMA
VMM[]: Created VCPU 0 @ 17000
VMM[GIC]: create ARM GICv2
IO      | Loading: config 'rom/io.cfg'
IO      | Loading: config 'rom/vm_hw.vbus'
IO      | Add IRQ resources to vbus: IRQ     [0000000000009e-0000000000009e 1] none (align=0 flags=1)
IO      | vm_hw: [N12_GLOBAL__N_112Virtual_sbusE]
IO      |   Resources: ==== start ====
IO      |   Resources: ===== end =====
IO      |   L4ICU: [N2Vi6Sw_icuE]
IO      |     Resources: ==== start ====
IO      |     Resources: ===== end =====
IO      |   MMC: [N2Vi9Proxy_devE]
IO      |     Resources: ==== start ====
IO      |     IOMEM   [000000fe300000-000000fe3000ff 100] 32-bit non-pref (align=ff flags=2)
IO      |     IRQ     [0000000000009e-0000000000009e 1] none (align=0 flags=1)
IO      |     DMADOM  [00000000000000-00000000000000 1] (align=0 flags=6)
IO      |     Resources: ===== end =====
IO      | Real Hardware -----------------------------------
IO      | System Bus:
IO      |   Resources: ==== start ====
IO      |   DMADOM  [00000000000000-00000000000000 1] (align=0 flags=6)
IO      |   Resources: ===== end =====
IO      |   mmc:
IO      |     compatible= { "brcm,bcm2835-mmc" }
IO      |     Clients: ===== start ====
IO      |       MMC: [N2Vi9Proxy_devE]
IO      |     Clients: ===== end ====
IO      |     Resources: ==== start ====
IO      |     IOMEM   [000000fe300000-000000fe3000ff 100] 32-bit non-pref (align=ff flags=2)
IO      |     IRQ     [0000000000009e-0000000000009e 1] none (align=0 flags=1)
IO      |     DMADOM  [00000000000000-00000000000000 1] (align=0 flags=6)
IO      |     Resources: ===== end =====
IO      | warning: could not register control interface at cap 'platform_ctl'
IO      | Ready. Waiting for request.
VMM[main]: Hello out there.
VMM[ram]: RAM: @ 0x3c00000 size=0x10000000 (ci)
VMM[ram]: RAM: VMM mapping @ 0x2000000 size=0x10000000
VMM[ram]: RAM: VM offset=0xfffffffffe400000
VMM[main]: Loading kernel...
VMM[file]: load: @ 0x3c00000
VMM[file]: copy in: to offset 0x0-0x20bc9ff
VMM[main]: Loading ram disk...
VMM[ram]: load: rom/ramdisk-armv8-64.rd -> 0x13800000
VMM[file]: load: @ 0x13800000
VMM[file]: copy in: to offset 0xfc00000-0xff7ffff
VMM[main]: Loaded ramdisk image rom/ramdisk-armv8-64.rd to 13800000 (size: 00380000)
VMM[]: Create virtual console
VMM[guest]: New mmio mapping: @ f1040000 10000
VMM[GIC]: GICC virtualization only supports sizes up to 0x1000, adjusting device tree node
VMM[GIC]: GIC interrupt-controller.reg update: Adjusting GICC size from 20000 to 1000
VMM[guest]: New mmio mapping: @ f1060000 1000
VMM[guest]: New mmio mapping: @ f1120000 100
VMM[]: virtio_net@10000.l4vmm,virtiocap: capability net is invalid.
VMM[vm]: Device creation for virtual device virtio_net@10000 failed. Disabling device.
VMM[Timer]: Guest timer frequency is 54000000
using (1/54), (9942053/29) to calculate timeouts
VMM[psci]: Register PSCI device: hvc mode
VMM[ioproxy]: Adding MMIO resource MMC.reg0 : [0xfe300000 - 0xfe3000ff]
VMM[ioproxy]: Registering IRQ resource MMC.irq0 : 0x9e
VMM[ram]: Cleaning caches for device tree [11fff000-11fff823] ([13bff000])
VMM[main]: Populating RAM of virtual machine
VMM[mmio]:      Mapping [2000000 - 11ffffff] -> [3c00000 - 13bfffff]
VMM[mmio]:      Mapping [GICC] -> [f1060000 - f1060fff]
VMM[mmio]:      Mapping [1e000 - 1e0ff] -> [f1120000 - f11200ff]
IO      | new iomem region: p=000000fe000000 v=00000000400000 s=400000 (bmb=0x36100)
IO      | map mem: p=000000fe300000 v=00000000700000 s=1000: done(0)
VMM[mmio]:      Mapping [200000 - 2000ff] -> [fe300000 - fe3000ff]
VMM[]: reschedule(): Initiating cpu startup for 418000
VMM[guest]: Powered up cpu0 [0x1f010]
VMM[]: Starting Cpu0 @ 0x3c00000 in 64Bit mode (handler @ 103ed60, stack: 8000fba0, task: 41e000, mpidr: 80000000 (orig: 80000000)
VMM[]: 04bab7c8: msr PMUSERENR_EL0 = 00000000 (ignored)
VMM[]: ffff800010013d68: msr OSDLR_EL1 = 00000000 (ignored)
VMM[]: ffff800010013d6c: msr OSLAR_EL1 = 00000000 (ignored)
VMM[]: ffff80001002ee5c: msr DBGBCR0_EL1 = 00000000 (ignored)
VMM[]: ffff80001002ef1c: msr DBGBVR0_EL1 = 00000000 (ignored)
VMM[]: ffff80001002ee50: msr DBGBCR1_EL1 = 00000000 (ignored)
VMM[]: ffff80001002ef10: msr DBGBVR1_EL1 = 00000000 (ignored)
VMM[]: ffff80001002ee44: msr DBGBCR2_EL1 = 00000000 (ignored)
VMM[]: ffff80001002ef04: msr DBGBVR2_EL1 = 00000000 (ignored)
VMM[]: ffff80001002ee38: msr DBGBCR3_EL1 = 00000000 (ignored)
VMM[]: ffff80001002eef8: msr DBGBVR3_EL1 = 00000000 (ignored)
VMM[]: ffff80001002ee2c: msr DBGBCR4_EL1 = 00000000 (ignored)
VMM[]: ffff80001002eeec: msr DBGBVR4_EL1 = 00000000 (ignored)
VMM[]: ffff80001002ee20: msr DBGBCR5_EL1 = 00000000 (ignored)
VMM[]: ffff80001002eee0: msr DBGBVR5_EL1 = 00000000 (ignored)
VMM[]: ffff80001002ecdc: msr DBGWCR0_EL1 = 00000000 (ignored)
VMM[]: ffff80001002ed9c: msr DBGWVR0_EL1 = 00000000 (ignored)
VMM[]: ffff80001002ecd0: msr DBGWCR1_EL1 = 00000000 (ignored)
VMM[]: ffff80001002ed90: msr DBGWVR1_EL1 = 00000000 (ignored)
VMM[]: ffff80001002ecc4: msr DBGWCR2_EL1 = 00000000 (ignored)
VMM[]: ffff80001002ed84: msr DBGWVR2_EL1 = 00000000 (ignored)
VMM[]: ffff80001002ecb8: msr DBGWCR3_EL1 = 00000000 (ignored)
VMM[]: ffff80001002ed78: msr DBGWVR3_EL1 = 00000000 (ignored)
VQ[0x1cb30]: num=256 d:0x4c14000 a:0x4c15000 u:0x4c16000
VQ[0x1cb78]: num=256 d:0x4c0c000 a:0x4c0d000 u:0x4c0e000
[    1.400282] cacheinfo: Unable to detect cache hierarchy for CPU 0
[    1.414509] loop: module loaded
[    1.418690] megasas: 07.714.04.00-rc1
[    1.425640] libphy: Fixed MDIO Bus: probed
[    1.431368] tun: Universal TUN/TAP device driver, 1.6
[    1.437279] thunder_xcv, ver 1.0
[    1.440867] thunder_bgx, ver 1.0
[    1.444438] nicpf, ver 1.0
[    1.448109] hclge is initializing
[    1.451734] hns3: Hisilicon Ethernet Network Driver for Hip08 Family - version
[    1.459356] hns3: Copyright (c) 2017 Huawei Corporation.
[    1.465047] e1000: Intel(R) PRO/1000 Network Driver
[    1.470243] e1000: Copyright (c) 1999-2006 Intel Corporation.
[    1.476424] e1000e: Intel(R) PRO/1000 Network Driver
[    1.481710] e1000e: Copyright(c) 1999 - 2015 Intel Corporation.
[    1.488029] igb: Intel(R) Gigabit Ethernet Network Driver
[    1.493756] igb: Copyright (c) 2007-2014 Intel Corporation.
[    1.499697] igbvf: Intel(R) Gigabit Virtual Function Network Driver
[    1.506325] igbvf: Copyright (c) 2009 - 2012 Intel Corporation.
[    1.512801] sky2: driver version 1.30
[    1.517367] VFIO - User Level meta-driver version: 0.3
[    1.524155] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[    1.531114] ehci-pci: EHCI PCI platform driver
[    1.535919] ehci-platform: EHCI generic platform driver
[    1.541542] ehci-orion: EHCI orion driver
[    1.545902] ehci-exynos: EHCI Exynos driver
[    1.550435] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[    1.556998] ohci-pci: OHCI PCI platform driver
[    1.561801] ohci-platform: OHCI generic platform driver
[    1.567415] ohci-exynos: OHCI Exynos driver
[    1.572213] usbcore: registered new interface driver usb-storage
[    1.580207] i2c /dev entries driver
[    1.587651] sdhci: Secure Digital Host Controller Interface driver
[    1.594246] sdhci: Copyright(c) Pierre Ossman
[    1.599228] Synopsys Designware Multimedia Card Interface Driver
[    1.606125] sdhci-pltfm: SDHCI platform and OF driver helper
[    1.612955] ledtrig-cpu: registered to indicate activity on CPUs
[    1.620526] usbcore: registered new interface driver usbhid
[    1.626435] usbhid: USB HID core driver
[    1.634165] NET: Registered protocol family 17
[    1.639199] 9pnet: Installing 9P2000 support
[    1.643874] Key type dns_resolver registered
[    1.648725] registered taskstats version 1
[    1.653117] Loading compiled-in X.509 certificates
[    1.659117] Btrfs loaded, crc32c=crc32c-generic, integrity-checker=on, zoned=no
[    1.667260] ALSA device list:
[    1.670540]   No soundcards found.
[    1.674948] VFS: Cannot open root device "mmcblkp3" or unknown-block(0,0): error -6
[    1.683078] Please append a correct "root=" boot option; here are the available partitions:
[    1.691888] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
[    1.700521] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.13.0 #2
[    1.706738] Hardware name: L4 VM (DT)
[    1.710614] Call trace:
[    1.713229]  dump_backtrace+0x0/0x1b0
[    1.717121]  show_stack+0x1c/0x70
[    1.720653]  dump_stack+0xd0/0x12c
[    1.724272]  panic+0x16c/0x334
[    1.727531]  mount_block_root+0x1bc/0x24c
[    1.731768]  mount_root+0x104/0x138
[    1.735469]  prepare_namespace+0x134/0x174
[    1.739793]  kernel_init_freeable+0x260/0x2a4
[    1.744398]  kernel_init+0x18/0x124
[    1.748108]  ret_from_fork+0x10/0x30
[    1.751908] Kernel Offset: disabled
[    1.755604] CPU features: 0x10000071,00000846
[    1.760204] Memory Limit: none
[    1.763464] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0) ]---
------8<------------------------------------------------------------------------------------------------