Add network device to L4Linux

Matthias Lange matthias.lange at kernkonzept.com
Fri Sep 15 08:08:17 CEST 2017


Hi Yang,

I have to admit that I don't know what's going wrong yet. Your
configuration looks reasonable. I need a little bit more time to
reproduce your issue and to analyze the problem.

Regards,
Matthias.

On 09/13/2017 01:56 PM, Yiyang Su wrote:
> Hi,
> 
> 
> Starting from a previous work [1], I have succeeded in booting L4Linux on
> 
> Cubietruck with the snapshot (l4re-snapshot-2016082114). Then I have
> 
> been trying to configure L4Linux to access Ethernet device. With current
> 
> configuration I cannot boot L4Llinux anymore. Following is my configuration
> 
> and boot log:
> 
> 
> l4lx-net-cubi.devs
> 
> ===========================================
> 
> local Res = Io.Res
> local Hw = Io.Hw
> 
> Io.hw_add_devices(function()
>     NIC = Hw.Device(function()
>         Property.hid = "sun7ia20gmac";
>         compatible = {"allwinner,sun7i-a20-gmac"};
>         Resource.regs = Res.mmio(0x01c50000, 0x01c5ffff);
>         --Resource.irq = Res.irq(0);
>         Resource.irq = Res.irq(85);
>         --Resource.irq = Res.irq(4);
>         Property.flags = Io.Hw_device_DF_dma_supported;
>     end);
> end)
> 
> 
> 
> l4lx-net-cubi.io
> 
> ===========================================
> 
> local hw = Io.system_bus()
> 
> Io.add_vbus("l4linux", Io.Vi.System_bus
> {
>     NIC = wrap(hw:match("allwinner,sun7i-a20-gmac"));
> })
> 
> 
> l4lx-net-cubi.cfg
> 
> ===========================================
> 
> local L4 = require("L4");
> 
> local loader = L4.default_loader;
> 
> vbus_l4linux = loader:new_channel();
> 
> loader:start(
>     {
>         caps = {
>             icu = L4.Env.icu,
>             sigma0 = L4.cast(L4.Proto.Factory,
> L4.Env.sigma0):create(L4.Proto.Sigma0),
>             l4linux = vbus_l4linux:svr(),      
>         },
>         log = {"IO", "y"},
>         l4re_dbg = L4.Dbg.Warn,
>     },
>     "rom/io -vvv rom/l4lx-net-cubi.devs rom/l4lx-net-cubi.io"
> );
> 
> -- start L4Linux
> loader:start(
>     {
>         caps = {
>             vbus = vbus_l4linux,
>         },
>         --log = {"l4linux", "cyan"},
>         log = L4.Env.log:m("rws"),
>         l4re_dbg = L4.Dbg.Warn,
>     },
>     "rom/vmlinuz mem=64M console=ttyLv0 earlyprintk=1
> l4x_dtb=rom/sun7i-a20-cubietruck.dtb "
>     .. "l4x_rd=rom/ramdisk-" ..  L4.Info.arch() .. ".rd "
>     .. "root=1:0 rw ramdisk_size=4000"
> );
> 
> 
> modules.list
> ============================================
> entry L4Linux-net-cubi
> roottask moe rom/l4lx-net-cubi.cfg
> module l4re
> module ned
> module io
> module sun7i-a20-cubietruck.dtb
> module l4lx-net-cubi.cfg
> module l4lx-net-cubi.devs
> module l4lx-net-cubi.io
> module vmlinuz
> module[perl] "ramdisk-$ENV{ARCH}.rd"
> 
> 
> boot log
> ===================================
> U-Boot SPL 2017.03-rc3 (Aug 14 2017 - 13:26:17)
> DRAM: 2048 MiB
> CPU: 912000000Hz, AXI/AHB/APB: 3/2/2
> Trying to boot from MMC1
> 
> 
> U-Boot 2017.03-rc3 (Aug 14 2017 - 13:26:17 +0200) Allwinner Technology
> 
> CPU:   Allwinner A20 (SUN7I)
> Model: Cubietech Cubietruck
> I2C:   ready
> DRAM:  2 GiB
> MMC:   SUNXI SD/MMC: 0
> *** Warning - bad CRC, using default environment
> 
> Setting up a 1024x768 vga console (overscan 0x0)
> In:    serial
> Out:   vga
> Err:   vga
> SCSI:  SATA link 0 timeout.
> AHCI 0001.0100 32 slots 1 ports 3 Gbps 0x1 impl SATA mode
> flags: ncq stag pm led clo only pmp pio slum part ccc apst
> Net:   eth0: ethernet at 01c50000
> starting USB...
> USB0:   USB EHCI 1.00
> USB1:   USB OHCI 1.0
> USB2:   USB EHCI 1.00
> USB3:   USB OHCI 1.0
> scanning bus 0 for devices... 1 USB Device(s) found
> scanning bus 2 for devices... 1 USB Device(s) found
>        scanning usb for storage devices... 0 Storage Device(s) found
> Hit any key to stop autoboot:  0
> switch to partitions #0, OK
> mmc0 is current device
> Scanning mmc 0:1...
> Found U-Boot script /boot/boot.scr
> reading /boot/boot.scr
> 1165 bytes read in 24 ms (46.9 KiB/s)
> ## Executing script at 43100000
> Failed to mount ext2 filesystem...
> ** Unrecognized filesystem type **
> reading boot/uImage
> 10481728 bytes read in 652 ms (15.3 MiB/s)
> ## Booting kernel from Legacy Image at 48000000 ...
>    Image Name:   L4 Image #32
>    Image Type:   ARM Linux Kernel Image (uncompressed)
>    Data Size:    10481664 Bytes = 10 MiB
>    Load Address: 41000000
>    Entry Point:  41000000
>    Verifying Checksum ... OK
>    Loading Kernel Image ... OK
> 
> Starting kernel ...
> 
> 
> L4 Bootstrapper
>   Build: #32 Mi 13. Sep 11:47:18 CEST 2017, 4.9.4
>   Scanning up to 1024 MB RAM, starting at offset 32MB
>   Memory size is 1024MB (40000000 - 7fffffff)
>   RAM: 0000000040000000 - 000000007fffffff: 1048576kB
>   Total RAM: 1024MB
>   Scanning fiasco
>   Scanning sigma0
>   Scanning moe
>   Moving up to 12 modules behind 41100000
>   moving module 02 { 419cd000-419fe49b } -> { 41abd000-41aee49b } [201884]
>   moving module 01 { 419bb000-419cc337 } -> { 41aab000-41abc337 } [70456]
>   moving module 00 { 4192d000-419ba98b } -> { 41a1d000-41aaa98b } [579980]
>   moving module 11 { 4162d000-4192cfff } -> { 4171d000-41a1cfff } [3145728]
>   moving module 10 { 4122b000-4162c473 } -> { 4131b000-4171c473 } [4199540]
>   moving module 09 { 4122a000-4122a0c2 } -> { 4131a000-4131a0c2 } [195]
>   moving module 08 { 41229000-412291ef } -> { 41319000-413191ef } [496]
>   moving module 07 { 41228000-4122835d } -> { 41318000-4131835d } [862]
>   moving module 06 { 4121f000-41227d73 } -> { 4130f000-41317d73 } [36212]
>   moving module 05 { 41094000-4121e8d3 } -> { 41184000-4130e8d3 } [1616084]
>   moving module 04 { 41032000-410936a7 } -> { 41122000-411836a7 } [399016]
>   moving module 03 { 41010000-4103145f } -> { 41100000-4112145f } [136288]
>   Loading fiasco
>   Loading sigma0
>   Loading moe
>   find kernel info page...
>   found kernel info page (via ELF) at 40002000
> Regions of list 'regions'
>     [ 40000000,  400001cf] {      1d0} Root   mbi_rt
>     [ 40001000,  40001a7f] {      a80} Kern   fiasco
>     [ 40002000,  4009afff] {    99000} Kern   fiasco
>     [ 400c0000,  400ca287] {     a288} Sigma0 sigma0
>     [ 400d0000,  400d6177] {     6178} Sigma0 sigma0
>     [ 40140000,  40168fcb] {    28fcc} Root   moe
>     [ 40170000,  40176ff3] {     6ff4} Root   moe
>     [ 41000000,  4100f5cb] {     f5cc} Boot   bootstrap
>     [ 41100000,  41a1cfff] {   91d000} Root   Module
>   found kernel options (via ELF) at 40003000
>   API Version: (87) experimental
>   Sigma0 config    ip:400c0100 sp:00000000
>   Roottask config  ip:40140210 sp:00000000
>   Starting kernel fiasco at 4000124c
>   Non-HYP kernel detected but running in HYP mode, switching back.
> Hello from Startup::stage2
> Number of IRQs available at this GIC: 160
> FPU: Initialize
> FPU0: Subarch: 2, Part: 30, Rev: 4, Var: 7, Impl: 41
> ARM generic timer: freq=24000000 interval=24000 cnt=212673046
> SERIAL ESC: allocated IRQ 33 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 4.9.4 for Allwinner A20    []
> Build: #4 Mon Sep 11 10:25:38 CEST 2017
> 
> Calibrating timer loop... done.
> MDB: use page size: 20
> MDB: use page size: 12
> SIGMA0: Hello!
>   KIP @ 40002000
>   allocated 4KB for maintenance structures
> SIGMA0: Dump of all resource maps
> RAM:------------------------
> [4:40000000;40000fff]
> [0:4009b000;400bffff]
> [0:400cb000;400cffff]
> [0:400d7000;4013ffff]
> [4:40140000;40168fff]
> [0:40169000;4016ffff]
> [4:40170000;40176fff]
> [0:40177000;410fffff]
> [4:41100000;41a1cfff]
> [0:41a1d000;7effffff]
> IOMEM:----------------------
> [0:0;3fffffff]
> [0:80000000;ffffffff]
> MOE: Hello world
> MOE: found 1021976 KByte free memory
> MOE: found RAM from 40000000 to 7f000000
> MOE: allocated 1008 KByte for the page array @0x40177000
> MOE: virtual user address space [0-bfffffff]
> MOE: rom name space cap -> [C:103000]
>   BOOTFS: [41100000-41121460] [C:105000] l4re
>   BOOTFS: [41122000-411836a8] [C:107000] ned
>   BOOTFS: [41184000-4130e8d4] [C:109000] io
>   BOOTFS: [4130f000-41317d74] [C:10b000] sun7i-a20-cubietruck.dtb
>   BOOTFS: [41318000-4131835e] [C:10d000] l4lx-net-cubi.cfg
>   BOOTFS: [41319000-413191f0] [C:10f000] l4lx-net-cubi.devs
>   BOOTFS: [4131a000-4131a0c3] [C:111000] l4lx-net-cubi.io
>   BOOTFS: [4131b000-4171c474] [C:113000] vmlinuz
>   BOOTFS: [4171d000-41a1d000] [C:115000] ramdisk-arm.rd
> MOE: cmdline: moe rom/l4lx-net-cubi.cfg
> MOE: Starting: rom/ned rom/l4lx-net-cubi.cfg
> MOE: loading 'rom/ned'
> Ned says: Hi World!
> Ned: loading file: 'rom/l4lx-net-cubi.cfg'
> IO      | Io service
> IO      | Verboseness level: 4
> IO      | unused physical memory space:
> IO      |   [00000000000000-0000003fffffff]
> IO      |   [00000080000000-000000ffffffff]
> IO      | no 'iommu' capability found use CPU-phys for DMA
> IO      | Loading: config 'rom/l4lx-net-cubi.devs'
> IO      | warning: inconsistent fixed resource @ device: /System Bus/
> IO      |   : hid=sun7ia20gmac
> IO      |   DMADOM  [00000000000000-00000000000000 1] non-pref (32bit)
> (align=0 flags=6)
> IO      | Loading: config 'rom/l4lx-net-cubi.io'
> IO      | Real Hardware -----------------------------------
> IO      | System Bus: hid=
> IO      |   Resources: ==== start ====
> IO      |   DMADOM  [00000000000000-00000000000000 1] non-pref (32bit)
> (align=0 flags=6)
> IO      |   Resources: ===== end =====
> IO      |   NIC: hid=sun7ia20gmac
> IO      |     Clients: ===== start ====
> IO      |       NIC: [N2Vi9Proxy_devE]
> IO      |     Clients: ===== end ====
> IO      |     Resources: ==== start ====
> IO      |     IRQ     [00000000000055-00000000000055 1] none (32bit)
> (align=0 flags=1)
> IO      |     IOMEM   [00000001c50000-00000001c5ffff 10000] non-pref
> (32bit) (align=ffff flags=2)
> IO      |     DMADOM  [00000000000000-00000000000000 1] non-pref (32bit)
> (align=0 flags=6)
> IO      |     Resources: ===== end =====
> IO      | warning: could not register control interface at cap
> 'platform_ctl'
> IO      | Ready. Waiting for request.
> PH  0 offs=00010000 flags=rwx PH-type=0x1
>       virt=02000000 evirt=0245b5dc
>       phys=02000000 ephys=0245b5dc
>       f_sz=003d3653 memsz=0045b5dc
> PH  1 offs=00394898 flags=r-x PH-type=0x4
>       virt=02384898 evirt=023848bc
>       phys=02384898 ephys=023848bc
>       f_sz=00000024 memsz=00000024
> PH  2 offs=00000000 flags=rwx PH-type=0x6474e551
>       virt=00000000 evirt=00000000
>       phys=00000000 ephys=00000000
>       f_sz=00000000 memsz=00000000
> Starting binary at 0x2000330, argc=9 argv=0xafff4f84 *argv=0xb1007ff4
> argv0=rom/vmlinuz
> External resolver is at 0xa80007cc
> ======> L4Linux starting... <========
> Linux version 4.7.0-l4 (yiyang at i85217) (gcc version 4.9.4 (Linaro GCC
> 4.9-2017.01) ) #4 Wed Sep 13 11:18:30 CEST 2017
> Binary name: rom/vmlinuz
>    This is an AEABI build.
> Linux kernel command line (8 args): mem=64M console=ttyLv0 earlyprintk=1
> l4x_dtb=rom/sun7i-a20-cubietruck.dtb l4x_rd=rom/ramdisk-arm.rd root=1:0
> rw ramdisk_size=4000
> CPU mapping (l:p)[1]: 0:0
> Image: 02000000 - 02600000 [6144 KiB].
> Areas: Text:     02000000 - 023848bc [3602kB]
>        RO-Data:  022ad000 - 02370000 [780kB]
>        Data:     023ac000 - 023cefe0 [139kB]
>        Init:     02385000 - 023ac000 [156kB]
>        BSS:      023d3653 - 0245b5dc [543kB]
> Device scan:
>   Device: L4ICU
>   Device: NIC
>     IRQ: 00000055 - 00000055
>     MEM: 01c50000 - 01c5ffff
>     DMAD: 00000000 - 00000000
> Device scan done.
> l4lx_thread_create: Created thread 41e (cpu0) (u:b3000e00, v:b3000c00,
> sp:023adfa4)
> main thread will be 41e
> L4x: section-with-init(-data): Virt: 0x2000000 to 0x245bfff [4464 KiB]
> section-with-init(-data): Phys: 0x40273000 to 0x406cefff, [4464 KiB]
> L4x: section-with-init-text: Virt: 0x2000000 to 0x245bfff [4464 KiB]
> error: failed to get physical address for 2000000.
> L4x: Main thread running, waiting...
> L4x: Memory size: 64MB
> L4x: Setting superpages for main memory
> L4x: Adjusted memory start: 02000000
> L4x:     Main memory: Virt: 0x2600000 to 0x65fffff [65536 KiB]
>     Main memory: Phys: 0x41c00000 to 0x45bfffff, [65536 KiB]
> l4x: vmalloc area: 06600000 - 0e600000
> L4x:            text: Virt: 0x2000000 to 0x245bfff [4464 KiB]
> error: failed to get physical address for 2000000.
> 
> 
> The boot process stops at this point. Compare with other boot logs in
> archives the following step could
> be the loading ramdisk and device tree blob. Then I delete the
> "l4x_dtb=rom/sun7i-a20-cubietruck.dtb"
> from the cmdline, it can boot the L4Linux again. Does it mean there is a
> problem with loading the device tree blob?
> 
> Any suggestion is very appreciated. Thanks.
> 
> Best regards,
> Yang
> 
> 
> [1] http://os.inf.tu-dresden.de/pipermail/l4-hackers/2017/008120.html



More information about the l4-hackers mailing list