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; [email protected]
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
[email protected]
http://os.inf.tu-dresden.de/mailman/listinfo/l4-hackers