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

_______________________________________________
Devel mailing list
[email protected]
https://sel4.systems/lists/listinfo/devel

Reply via email to