Hey Alexander,
Thanks to your suggestion I now have the UP board booting via UEFI and
USB input is working as expected. Thanks for your help. I am happy to
help test any UEFI modifications you make in future releases. For
anyone who is interested in reproducing this I will summarize what I did
to get a working demo built.
I created a build dir that specifies the sel4 kernel. This option is
listed as deprecated but it still works.
$ ./tool/create_builddir sel4_x86_32 build_sel4
I modified the build.conf file to build a UEFI image rather than and iso
for qemu and I enabled the libports and dde_linux repos. I pasted the
full text of my build.conf below.
I then modified the demo.run file to:
* remove ps2_drv
* remove fb_drv
* add fb_boot_drv
* add usb_drv
The usb_drv sections were copied from repos/dde_linux/run/usb_hid.run
but I removed the portions that referred to capslock, numlock and
scrlock as they were causing errors that interfered with the boot
process. I pasted the full text of my modified demo.run below.
Then all I had to do was prepare the dde_linux port and build my image:
$ ./tool/ports/prepare_port dde_linux
$ make run/demo
####### etc/build.conf #######
GENODE_DIR := /home/esandberg/projects/embedded/genode-17.11/genode-17.11
BASE_DIR := $(GENODE_DIR)/repos/base
CONTRIB_DIR := $(GENODE_DIR)/contrib
MAKE += -j4
KERNEL ?= sel4
KERNEL_RUN_OPT(sel4) := --include image/uefi
RUN_OPT += ${KERNEL_RUN_OPT(${KERNEL})} --include boot_dir/$(KERNEL)
REPOSITORIES += $(GENODE_DIR)/repos/base-$(KERNEL)
REPOSITORIES += $(GENODE_DIR)/repos/base
REPOSITORIES += $(GENODE_DIR)/repos/os
REPOSITORIES += $(GENODE_DIR)/repos/demo
REPOSITORIES += $(GENODE_DIR)/repos/libports
REPOSITORIES += $(GENODE_DIR)/repos/dde_linux
####### repos/os/run/demo.run #######
#
# Build
#
if {[have_spec odroid_xu]} {
puts "Run script does not support this platform."
exit 0
}
set build_components {
core init
drivers/timer
server/nitpicker app/pointer app/status_bar app/global_keys_handler
app/nit_focus
server/liquid_framebuffer app/launchpad app/scout
test/nitpicker server/nitlog
drivers/framebuffer drivers/input
server/report_rom server/rom_filter
drivers/usb
}
proc gpio_drv { } { if {[have_spec rpi] && [have_spec hw]} { return
hw_gpio_drv }
if {[have_spec rpi] && [have_spec foc]} { return
foc_gpio_drv }
return gpio_drv }
source ${genode_dir}/repos/base/run/platform_drv.inc
lappend_if [need_usb_hid] build_components drivers/usb
lappend_if [have_spec gpio] build_components drivers/gpio
append_platform_drv_build_components
build $build_components
create_boot_directory
#
# Generate config
#
append config {
<config>
<parent-provides>
<service name="ROM"/>
<service name="IRQ"/>
<service name="IO_MEM"/>
<service name="IO_PORT"/>
<service name="PD"/>
<service name="RM"/>
<service name="CPU"/>
<service name="LOG"/>
</parent-provides>
<default-route>
<any-service> <parent/> <any-child/> </any-service>
</default-route>
<default caps="100"/>}
append config {
<start name="usb_drv" caps="120">
<resource name="RAM" quantum="16M"/>
<provides><service name="Input"/></provides>
<config uhci="yes" ohci="yes" ehci="yes" xhci="yes"
bios_handoff="no">
<hid/>
</config>
<route>
<service name="ROM"> <parent/> </service>
<service name="CPU"> <parent/> </service>
<service name="PD"> <parent/> </service>
<service name="IO_PORT"> <parent/> </service>
<service name="IO_MEM"> <parent/> </service>
<service name="LOG"> <parent/> </service>
<service name="RM"> <parent/> </service>
<service name="Platform"> <any-child/> </service>
<service name="Timer"> <child name="timer"/> </service>
</route>
</start> }
append_if [have_spec sdl] config {
<start name="fb_sdl">
<resource name="RAM" quantum="12M"/>
<provides>
<service name="Input"/>
<service name="Framebuffer"/>
</provides>
</start>}
append_platform_drv_config
append_if [have_spec framebuffer] config {
<start name="fb_boot_drv">
<resource name="RAM" quantum="12M"/>
<provides><service name="Framebuffer"/></provides>
</start>}
append_if [have_spec gpio] config "
<provides></provides>
<config/>
</start>"
append_if [have_spec imx53] config {
<start name="input_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="Input"/></provides>
<config/>
</start> }
append config {
<start name="timer">
<resource name="RAM" quantum="1M"/>
<provides><service name="Timer"/></provides>
</start>
<start name="report_rom">
<resource name="RAM" quantum="1M"/>
<provides> <service name="Report"/> <service name="ROM"/> </provides>
<config verbose="no">
<policy label="status_bar -> focus" report="nitpicker ->
focus"/>
<policy label="nitpicker_config -> xray"
report="global_keys_handler -> xray"/>
<policy label="global_keys_handler -> hover" report="nitpicker ->
hover"/>
<policy label="nit_focus -> clicked" report="nitpicker ->
clicked"/>
<policy label="nitpicker -> focus" report="nit_focus ->
focus"/>
</config>
</start>
<start name="nitpicker_config">
<binary name="rom_filter"/>
<resource name="RAM" quantum="1M"/>
<provides><service name="ROM"/></provides>
<config>
<input name="xray_enabled" rom="xray" node="xray">
<attribute name="enabled" /> </input>
<output node="config">
<attribute name="focus" value="rom"/>
<inline>
<report focus="yes" xray="yes" hover="yes" keystate="yes"
clicked="yes"/>
<domain name="pointer" layer="1" origin="pointer"
content="client" label="no"/>
<domain name="panel" layer="2"
content="client" label="no" hover="always"/>
</inline>
<if>
<then>
<inline>
<domain name="launchpad" layer="3"
content="client" label="no" hover="always" focus="click"
ypos="18" height="-18" />
<domain name="" layer="3"
content="client" label="no" hover="always" focus="click"
ypos="18" height="-18" />
</inline>
</then>
<else>
<inline>
<domain name="launchpad" layer="3" color="#dd0000"
content="tinted" label="yes" hover="focused" focus="click"
ypos="18" height="-18" />
<domain name="" layer="3" color="#55dd34"
content="tinted" label="yes" hover="focused" focus="click"
ypos="18" height="-18" />
</inline>
</else>
</if>
<inline>
<policy label_prefix="pointer" domain="pointer"/>
<policy label_prefix="status_bar" domain="panel"/>
<policy label_prefix="scout -> launchpad" domain="launchpad"/>
<default-policy domain=""/>
<global-key name="KEY_SCROLLLOCK" label="global_keys_handler ->
input" />
<global-key name="KEY_F1" label="global_keys_handler ->
input" />
<global-key name="KEY_F2" label="global_keys_handler ->
input" />
</inline>
</output>
</config>
<route>
<service name="ROM" label="xray"> <child name="report_rom"/> </service>
<any-service> <parent/> </any-service>
</route>
</start>
<start name="global_keys_handler">
<resource name="RAM" quantum="1M"/>
<config>
<bool name="xray" initial="no"/>
<press name="KEY_SCROLLLOCK" bool="xray" change="toggle"/>
<press name="KEY_F1" bool="xray" change="on"/>
<release name="KEY_F1" bool="xray" change="off"/>
<press name="KEY_F2" bool="xray" change="toggle"/>
<report name="xray" delay_ms="125">
<hovered domain="panel"/>
<bool name="xray"/>
</report>
</config>
<route>
<service name="Report"> <child name="report_rom"/> </service>
<service name="ROM" label="hover"> <child name="report_rom"/> </service>
<any-service> <parent/> <any-child/> </any-service>
</route>
</start>
<start name="nitpicker">
<resource name="RAM" quantum="1M"/>
<provides><service name="Nitpicker"/></provides>
<configfile name="nitpicker.config"/>
<route>
<service name="ROM" label="nitpicker.config">
<child name="nitpicker_config"/> </service>
<service name="ROM" label="focus">
<child name="report_rom"/> </service>
<service name="Report">
<child name="report_rom"/> </service>
<any-service> <parent/> <any-child/> </any-service>
</route>
</start>
<start name="pointer">
<resource name="RAM" quantum="1M"/>
<config/>
</start>
<start name="nit_focus">
<resource name="RAM" quantum="1M"/>
<config> <default-policy focus="yes"/> </config>
<route>
<service name="ROM" label="clicked"> <child name="report_rom"/>
</service>
<service name="Report"> <child name="report_rom"/> </service>
<any-service> <parent/> </any-service>
</route>
</start>
<start name="status_bar">
<resource name="RAM" quantum="1M"/>
<route>
<service name="ROM" label="focus"> <child name="report_rom"/> </service>
<any-service> <parent/> <any-child/> </any-service>
</route>
</start>
<start name="scout" caps="10000">
<resource name="RAM" quantum="64M" />
</start>
</config>}
install_config $config
#
# Create launchpad configuration
#
set launchpad_config_fd [open "bin/launchpad.config" w]
puts $launchpad_config_fd {<config>
<launcher name="testnit" ram_quota="768K" caps="50"/>
<launcher name="scout" ram_quota="41M" caps="200"/>
<launcher name="launchpad" ram_quota="6M" caps="1000">
<configfile name="launchpad.config" />
</launcher>
<launcher name="nitlog" ram_quota="1M" caps="50"/>
<launcher name="liquid_fb" ram_quota="7M" caps="70">
<config resize_handle="on" />
</launcher>
<launcher name="nitpicker" ram_quota="1M" caps="70">
<config>
<domain name="" layer="3" conten="client" label="no" focus="click"/>
<default-policy domain="" />
</config>
</launcher>
</config>}
close $launchpad_config_fd
#
# Boot modules
#
# generic modules
set boot_modules {
core ld.lib.so init
timer
nitpicker pointer status_bar report_rom rom_filter global_keys_handler
nit_focus
liquid_fb launchpad scout testnit nitlog
launchpad.config
usb_drv
}
# platform-specific modules
lappend_if [have_spec linux] boot_modules fb_sdl
lappend_if [have_spec framebuffer] boot_modules fb_boot_drv
lappend_if [need_usb_hid] boot_modules usb_drv
lappend_if [have_spec gpio] boot_modules [gpio_drv]
lappend_if [have_spec imx53] boot_modules input_drv
append_platform_drv_boot_modules
build_boot_image $boot_modules
run_genode_until forever
--
Edward Sandberg
Adventium Labs
111 3rd Avenue S. Suite #100
Minneapolis, MN 55401