Hi Adam & Hackers, Did some research into L4Re memory management and IO server.
For my original question 1: on native device tree file adapting to L4linux: 1> Since Sigma0 got one-2-one mapping statically from Fiasco microkernel, I think I still can directly use those reg_address declaration for each device nodes within native rpi3's bcm2710-rpi-3-b.dts. I will only make following simple changes comparing to simple.dts from l4re in case they are necessary for L4Linux to use. >>model = "L4Linux (DT)"; >>compatible = "L4Linux"; <</* compatible = "raspberrypi,3-model-b", "brcm,bcm2837"; <<model = "Raspberry Pi 3 Model B";*/ /*------------------ copied from l4re..simple.dts ------------------*/ intc: l4icu { compatible = "l4,icu"; interrupt-controller; /* type can be 'gic' or 'single' currently */ l4icu-type = "gic"; #interrupt-cells = <3>; /* l4icu-type = "single"; #interrupt-cells = <1>; */ }; /*------------------------------------------------------------------*/ 2> For my original question 3: in terms of io config for IO server. Still don't have clear idea how to do it. Should I only need create a vBUS and grant access for L4linux to network NIC devices? Specifically I copied Raspberry PI3 NIC part of device tree node here for reference as below ----------------------------------------------------------------------------------------------------------------- usb@7e980000 { compatible = "brcm,bcm2708-usb"; reg = <0x7e980000 0x10000 0x7e006000 0x1000>; interrupts = <0x2 0x0 0x1 0x9>; #address-cells = <0x1>; #size-cells = <0x0>; clocks = <0x18>; clock-names = "otg"; phys = <0x19>; phy-names = "usb2-phy"; power-domains = <0x14 0x6>; phandle = <0x6d>; usb1@1 { compatible = "usb424,9514"; reg = <0x1>; #address-cells = <0x1>; #size-cells = <0x0>; usbether@1 { compatible = "usb424,ec00"; reg = <0x1>; phandle = <0x6e>; }; }; }; -------------------------------------------------------------------------------------------------------------------------------- Is this sufficient to do IO config as following rpi_devices.io? Within rpi_devices.io, I defined a named vBUS as l4lx. How does L4linux client know this "l4lx" vBUS is for me? Should I need configure it within L4linux somewhere? ---------------------------------------------------------------------------------------------------------------------------- local Res = Io.Res local Hw = Io.Hw local hw = Io.system_bus() -- create a virtual bus for client with its name as 'l4lx' -- Give it access to NIC device -- 'l4lx is name of vbus Io.add_vbus("l4lx", Io.Vi.System_bus { -- add device which matches the compatibility ID (CID) -- usb_net_smsc9514 for rpi-3b -- 'usb424,ec00' -- NIC = wrap(hw:match("usb424,ec00")); NIC = wrap(hw.NIC); }) Io.hw_add_devices(function() -- create a new named NIC device NIC = Hw.Device(function() Property.hid = "smsc9514"; compatible = {"usb424,ec00"}; -- Resource.regs = Res.mmio(0x4e000000, 0x4e000fff); -- Resource.irq = Res.irq(41); end); end) --------------------------------------------------------------------------------------------------------~ Much Appreciated! Lei Zhou ________________________________________ From: Lei Zhou Sent: Thursday, June 20, 2019 6:43 PM To: Adam Lackorzynski; l4-hackers@os.inf.tu-dresden.de Subject: Enable L4Linux network access on Raspberry Pi-b. Hi Adam & Hackers, Has anybody enabled network access for L4linux Raspberry pi3? I read through all the history on related topics and understand the process to get it working. I summarized the steps as below and major problem for me is how to convert device tree for L4linux and compose corresponding rpi_deices.io configuration. Please see my specific question inlined in those steps. Thanks in advance for your feedback. 1. configure and Compile l4linux to support flattened device tree support. Also enables CONFIG_USB_LAN78XX=y && CONFIG_USB_USBNET=y CONFIG_USB_NET_SMSC95XX=y CONFIG_L4_SERVER = y CONFIG_USE_OF = y 2. Adapt https://github.com/raspberrypi/linux/blob/rpi-4.19.y/arch/arm/boot/dts/bcm2710-rpi-3-b.dts into ./l4linux/arch/l4/boot/dts/simple.dts [Lei's question]: I understand why bcm2710-rpi-3-b.dts cannot be used directly because some of the reg_address physical address doesn't apply and might fail to be mapped. How can I pick network access specific device nodes and its dependancies(power or clock etc) and how to change those illegal reg_address? 3. Create an rpi3_devices.io for L4Re with the devices and their resources and assign the desired devices to a vbus. [Lei's question]: Should I define all device nodes one-2-one mapping from step 2's device tree? 4. Update your ned script and modules.list -- vim:set ft=lua: local L4 = require("L4"); loader = L4.default_loader; -- Start io vbus_l4linux = loader:new_channel(); --vbus_input = loader:new_channel(); --vbus_fbdrv = loader:new_channel(); loader:start( { caps = { sigma0 = L4.cast(L4.Proto.Factory, L4.Env.sigma0):create(L4.Proto.Sigma0); icu = L4.Env.icu; -- input = vbus_input:svr(); l4linux = vbus_l4linux:svr(); -- fbdrv = vbus_fbdrv:svr(); }, log = {"IO", "y"}, l4re_dbg = L4.Dbg.Warn, }, "rom/io -vvv rom/rpi_devices.io"); -- Start L4linux loader:start( { caps = { -- fb = mag_svc:create(L4.Proto.Goos, "g=640x480"); vbus = vbus_l4linux; }, log = L4.Env.log:m("rws"), l4re_dbg = L4.Dbg.Warn, }, "rom/vmlinuz mem=64M console=ttyLv0 l4x_rd=rom/ramdisk- l4x_dtb=rom/rpi3b-simple.dtb" .. L4.Info.arch() .. ".rd " .. "root=1:0 ramdisk_size=4000 init=/bin/sh earlyprintk=1 "); 5. Build final bootstrap_l4linux.uimage for Raspberry. Thanks very much! Lei Zhou _______________________________________________ l4-hackers mailing list l4-hackers@os.inf.tu-dresden.de http://os.inf.tu-dresden.de/mailman/listinfo/l4-hackers