Hallo Josef,
thanks for your tips. I went through the code and found the dwc3 driver which uses `module_platform_driver`. In the source it gets called with `module_platform_driver(dwc3_driver)` and the declaration in Genode is `extern "C" void module_dwc3_driver_init();`. The efifb framebuffer driver I try to include gets called with `module_platform_driver(efifb_driver)` so the corresponding declaration should be `extern "C" void module_efifb_driver_init();`. I tried both the macros of 'repos/dde_linux/src/lib/usb/include/spec/arm/platform/lx_emul.h' as you said and of 'repos/dde_linux/src/lib/usb/include/lx_emul.h' (which gets included by 'repos/dde_linux/src/lib/usb/spec/arndale/platform.cc' which uses the dwc3 driver. None of these macros worked, I always got a undefined reference error from the linker. Did I miss something?
Regards, JK
Am 26.04.2017 um 15:45 schrieb Josef Söntgen:
Hello Johannes,
- Johannes Kliemann <Johannes.Kliemann@...250...> [2017-04-26 15:00:35 +0200]:
how are modules in dde_linux loaded exactly? For example the i915 driver seems to be loaded with `module_i915_init` which somehow connects to `module_init(i915_init)` but I can't see how this is done.
Please take a look at 'repos/dde_linux/src/include/lx_emul/module.h' which defines the macros used by the vanilla sources. In this case we just generated a function that can be called directly.
I want to add a new driver which is loaded by `module_platform_driver(...)`. What steps are required to add this driver besides adding the declaration in main.cc?
Until now the usb_drv on ARM was the only dde_linux driver that needed this macro, hence it is defined in its private Linux emulation header (see 'repos/dde_linux/src/lib/usb/include/spec/arm/platform/lx_emul.h'). Normally we only move definitions or rather emulation code to the somewhat generic lx_kit/lx_emul locations if used by more than one driver.
For now I suggest to implement the macro privately in the intel_fb driver as well and we will come up with a better solution later on.
Regards, Josef