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 " <start name=\"[gpio_drv]\"> <resource name=\"RAM\" quantum=\"4M\"/> <provides><service name=\"Gpio\"/></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> <has_value input="xray_enabled" value="no" /> <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