Fwd: Problems using qemu devices from l4re
Maria Soler
m.soler at virtualopensystems.com
Fri Jul 4 10:31:56 CEST 2014
Hello again,
I have (tried to) apply those changes and the result is as follows:
Execution:
---------------------------------------------------------------------------------------------
MOE: cmdline: moe rom/app.cfg
MOE: Starting: rom/ned rom/app.cfg
MOE: loading 'rom/ned'
Ned says: Hi World!
Ned: loading file: 'rom/app.cfg'
io | Dev_factory: register factory for N2Hw6DeviceE
io | GTF: register factory for 7Pci_dev
io | GTF: register factory for N2Hw12Msi_resourceE
io | Dev_factory: register factory for N2Hw11Gpio_deviceE
io | Io service
io | Ready. Waiting for request.
---------------------------------------------------------------------------------------------
and it stops.
In the application I am using the l4io_request_iomem call (I have also
tried with l4sigma0_map_iomem and the result is the exact same as it
was before the changes).
The configuration file is now:
-- Include L4 functionality
require("L4");
local l = L4.default_loader;
vbus_prodb = l:new_channel();
-- Start io
l:start(
{
caps = {
icu = L4.Env.icu;
input = vbus_prodb:svr();
},
}, "rom/io rom/app.io");
l:start(
{
caps = {
log = L4.Env.log:m("rws"),
prodb = vbus_prodb:svr();
vbus = vbus_prodb;
},
log = { "app", "green" },
},
"rom/app" , { FSTAB_FILE = "rom/fstab" }
On Thu, Jul 3, 2014 at 11:40 AM, Matthias Lange
<matthias.lange at kernkonzept.com> wrote:
> On Wed, Jul 02, 2014 at 04:38:07PM +0200, Maria Soler wrote:
>> Hello,
>>
>> I am running l4re on qemu (qemu-system-arm) and I have been trying to
>> use a qemu device from l4re, but I have been unsuccessful so far. This
>> device creates a file in the host and that is how I have been testing
>> if I was actually writing/reading on the device: I was trying to write
>> from the guest and read from the host (didn't work) and trying to
>> write from the host and read from the guest, but didn't work either.
>>
>> What I have tried so far:
>> - I have tried to use sigma0_map_iomem like this:
>> ---------------------------------------------
>> string = malloc(SIZE);
>> l4sigma0_map_iomem(L4_BASE_PAGER_CAP, 0xXXXXXXXX, string, SIZE, 1);
>> //I have tried both cached and uncached.
>> printf("Received: %s\n",string); //prints nothing, regardless of the
>> content of the file in the host
>> memset(p,'a',SIZE); //the file in the host remains unchanged
>> ---------------------------------------------
>>
>> The qemu device is mapped in address 0xXXXXXXXX and its size is bigger
>> than SIZE. SIZE is a multiple of 4KB and so is 0xXXXXXXXX.
>>
>> I have tried to use this option by itself and combined with an io
>> server (I actually tried this first, but now that I have seen that
>> there is no difference in the behavior if I add it or remove it, I
>> think they are maybe unrelated or most probably I am not using them
>> the right way). To create the io server I have included an app.io file
>> as follows:
>> ---------------------------------------------
>> -- Example configuration for io
>>
>> local hw = Io.system_bus()
>>
>> -- Configure two platform devices to be known to io
>> Io.hw_add_devices
>> {
>> comm = Io.Hw.Device
>> {
>> hid = "COMM";
>> Io.Res.irq(63);
>> Io.Res.mmio(BASE_ADDR, TOP_COMM);
>> },
>> data = Io.Hw.Device
>> {
>> hid = "DATA";
>> Io.Res.irq(63);
>> Io.Res.mmio(TOP_COMM+0x1000, TOP_DATA);
>> }
>>
>> }
>>
>> Io.add_vbusses
>> {
>> -- Create a virtual bus for a client and give access to the device
>> prodb = Io.Vi.System_bus
>> {
>> comm_bus = wrap(hw:match("comm"));
>> data_bus = wrap(hw:match("data"));
>> }
>> }
>> ---------------------------------------------
>>
>> and added to my .cfg file:
>> ---------------------------------------------
>> vbus = l:new_channel();
>>
>> -- Start io
>>
>> l:start(
>> {
>> caps = {
>> sigma0 = L4.cast(L4.Proto.Factory, L4.Env.sigma0):create(L4.Proto.Sigma0);
>> icu = L4.Env.icu;
>> input = vbus_prodb:svr();
>> },
>> }, "rom/io rom/app.io");
>>
>> l:start(
>> {
>> prodb = vbus:svr();
>> log = { "app", "green" }
>> },
>> "rom/app" , { FSTAB_FILE = "rom/fstab" }
>> );
>> ---------------------------------------------
>>
>> Both with and without the io server, the application compiles and
>> runs, but there is no communication with the file in the host, so I
>> guess I am not mapping the device in the right way.
>>
>> I have also tried to use libio instead of sigma0 as follows:
>> ---------------------------------------------
>> string = malloc(SIZE);
>> l4io_request_iomem(0xXXXXXXXX, SIZE, 1, string); //I have tried both
>> cached and uncached.
>> printf("Received: %s\n",string); //prints nothing, regardless of the
>> content of the file in the host
>> memset(p,'a',SIZE); //the file in the host remains unchanged
>> ---------------------------------------------
>>
>> And this warning appears: app | libio: Warning: Query of 'vbus' failed!
>> but it runs, so I don't really know what I am doing wrong. There is no
>> complete example that I have found with either libio or sigma0, so I
>> need some hints on this, please.
>
> As far as I can see from your configs you missed to connect the vbus to the
> applications vbus capability. In io you need to create the server side of the
> prodb vbus like
>
> prodb = vbus_prodb:svr()
>
> The application needs a line like
>
> vbus = vbus_prodb
>
> in its configuration. Then the application can query its vbus for connected
> devices.
>
> Matthias.
>
>
> --
> Matthias Lange, matthias.lange at kernkonzept.com, +49 - 351 - 41 88 86 14
>
> Kernkonzept GmbH. Sitz: Dresden. Amtsgericht Dresden, HRB 31129.
> Geschäftsführer: Dr.-Ing. Michael Hohmuth
>
More information about the l4-hackers
mailing list