Obtaining and accessing device abstractions in L4Re

Paul Boddie paul at boddie.org.uk
Tue Jul 4 23:11:41 CEST 2017


Hello,

I've been trying to write some drivers in L4Re, starting out with a GPIO 
driver for a currently-unsupported board, and I think I have mostly understood 
the concepts involved. Fortunately, there are already a couple of drivers to 
borrow ideas from...

pkg/io/io/server/src/drivers/gpio/bcm2835.cc
pkg/io/io/server/src/drivers/gpio/omap.cc

And if I am not mistaken, such drivers can be accessed from other components 
by just doing something like this (testing for validity as we go):

vbus = l4re_env_get_cap("vbus");
l4vbus_get_device_by_hid(vbus, 0, &gpio_handle, gpio_hid, 0, 0);
l4vbus_gpio_set(vbus, gpio_handle, gpio_reg, value);

It appears that if I just declare the device appropriately in my board's 
hw_devices.io file, I should be able to get a handle for it using code like 
the above. And all access can apparently be done via the l4vbus_gpio functions 
with this handle.

(I was also wondering if it was possible to actually instantiate or obtain a 
device directly instead of obtaining a handle, for code written in C++, but 
the above is easily good enough at the moment.)

But now I want to make another, non-GPIO, driver abstraction, instead of 
directly accessing the mapped memory regions concerned (which I see that some 
of the drivers do). It seems like I should be able to...

 * define a class for the abstraction inheriting from Hw::Device
 * declare the device in hw_devices.io using this class
 * provide various properties in the hw_devices.io declaration
   (for configuration purposes)
 * read the properties in the actual class implementation
 * access registers in memory just as the GPIO drivers do

I think I can muddle through all this. But how should another component access 
methods provided by this driver? Do I have to implement functionality like 
that provided by the following files...?

pkg/io/libvbus/lib/src/vbus_gpio.cc
pkg/io/libvbus/include/vbus_gpio-ops.h
pkg/io/io/server/src/virt/gpio/vgpio.cc

Does any of this make any sense? :-)

I'm just getting started here, but thanks are due in advance for any advice 
anyone may have!

Paul



More information about the l4-hackers mailing list