Hi I'm testing some examples of Genode on RaspberryPI, but i got some troubles. I'm trying to test arora, qt5 and sdl examples. I'm using Genode 14.05. I have configured the following ports:
./tool/ports/prepare_port arora ./tool/ports/prepare_port dde-linux ./tool/ports/prepare_port libc ./tool/ports/prepare_port stdcxx ./tool/ports/prepare_port mesa ./tool/ports/prepare_port zlib ./tool/ports/prepare_port icu ./tool/ports/prepare_port jpeg ./tool/ports/prepare_port libpng ./tool/ports/prepare_port openssl ./tool/ports/prepare_port freetype ./tool/ports/prepare_port lwip ./tool/ports/prepare_port qoost ./tool/ports/prepare_port bintuils ./tool/ports/prepare_port sdl make prepare PKG=qt5 (on libports)
On etc/build.conf have activated the following repositories:
REPOSITORIES += $(GENODE_DIR)/repos/base-hw REPOSITORIES += $(GENODE_DIR)/repos/base REPOSITORIES += $(GENODE_DIR)/repos/os REPOSITORIES += $(GENODE_DIR)/repos/demo REPOSITORIES += $(GENODE_DIR)/repos/libports REPOSITORIES += $(GENODE_DIR)/repos/ports REPOSITORIES += $(GENODE_DIR)/repos/dde_linux REPOSITORIES += $(GENODE_DIR)/repos/gems
To compile the example have used the following command lines:
make run/arora make run/qt5 make run/sdl
During the compilation process of the examples, get this line, but finally the elf image is generated:
/usr/local/genode-gcc/bin/genode-arm-ld: BFD (GNU Binutils) 2.22 assertion fail ../../../../contrib/binutils-2.22/bfd/elf32-arm.c:12049
To generate the img file from the elf image have used:
/usr/local/genode-gcc/bin/genode-arm-objcopy -Obinary var/run/arora/image.elf genode_arora.img /usr/local/genode-gcc/bin/genode-arm-objcopy -Obinary var/run/qt5/image.elf genode_qt5.img /usr/local/genode-gcc/bin/genode-arm-objcopy -Obinary var/run/sdl/image.elf genode_sdl.img
To test this img on the RPI have created the config.txt file with:
kernel=<file>.img kernel_address=0x00800000
To test the examples i'm using a RPI model B and a version of QEMU with functional support for RPI:
https://github.com/Torlus/qemu/
When test the elf images with QEMU get the output on serial console, but this version of QEMU seems like don't support framebuffer emulation. After that have tried to run examples on the real PI but only get the coloured screen. I have compiled and tested on th RPI the Demo and Hello examples. If somebody can help me? Best regards
Hello,
On 09/05/2014 05:30 AM, Reinier Millo Sánchez wrote:
Hi I'm testing some examples of Genode on RaspberryPI, but i got some troubles. I'm trying to test arora, qt5 and sdl examples. I'm using Genode 14.05. I have configured the following ports:
./tool/ports/prepare_port arora ./tool/ports/prepare_port dde-linux ./tool/ports/prepare_port libc ./tool/ports/prepare_port stdcxx ./tool/ports/prepare_port mesa ./tool/ports/prepare_port zlib ./tool/ports/prepare_port icu ./tool/ports/prepare_port jpeg ./tool/ports/prepare_port libpng ./tool/ports/prepare_port openssl ./tool/ports/prepare_port freetype ./tool/ports/prepare_port lwip ./tool/ports/prepare_port qoost ./tool/ports/prepare_port bintuils ./tool/ports/prepare_port sdl make prepare PKG=qt5 (on libports)
On etc/build.conf have activated the following repositories:
REPOSITORIES += $(GENODE_DIR)/repos/base-hw REPOSITORIES += $(GENODE_DIR)/repos/base REPOSITORIES += $(GENODE_DIR)/repos/os REPOSITORIES += $(GENODE_DIR)/repos/demo REPOSITORIES += $(GENODE_DIR)/repos/libports REPOSITORIES += $(GENODE_DIR)/repos/ports REPOSITORIES += $(GENODE_DIR)/repos/dde_linux REPOSITORIES += $(GENODE_DIR)/repos/gems
To compile the example have used the following command lines:
make run/arora make run/qt5 make run/sdl
During the compilation process of the examples, get this line, but finally the elf image is generated:
/usr/local/genode-gcc/bin/genode-arm-ld: BFD (GNU Binutils) 2.22 assertion fail ../../../../contrib/binutils-2.22/bfd/elf32-arm.c:12049
To generate the img file from the elf image have used:
/usr/local/genode-gcc/bin/genode-arm-objcopy -Obinary var/run/arora/image.elf genode_arora.img /usr/local/genode-gcc/bin/genode-arm-objcopy -Obinary var/run/qt5/image.elf genode_qt5.img /usr/local/genode-gcc/bin/genode-arm-objcopy -Obinary var/run/sdl/image.elf genode_sdl.img
To test this img on the RPI have created the config.txt file with:
kernel=<file>.img kernel_address=0x00800000
To test the examples i'm using a RPI model B and a version of QEMU with functional support for RPI:
https://github.com/Torlus/qemu/
When test the elf images with QEMU get the output on serial console, but this version of QEMU seems like don't support framebuffer emulation. After that have tried to run examples on the real PI but only get the coloured screen. I have compiled and tested on th RPI the Demo and Hello examples. If somebody can help me? Best regards
Thank you very much for the provided information. I really appreciate the degree of detailing in your post, so one can reproduce all steps.
Unfortunately, the Rasperry Pi support was broken in release 14.05. We got aware of that fact at the end of July by a post on this list. Now, we nightly test the Rasperry Pi platform, and things should work properly. Please, switch to Genode's release 14.08. I'm afraid you'll have to do some of the prepare steps again, but the build system will warn you if this is the case. Also, please assure to do a 'make cleanall' in your build directory after the upgrade, before you proceed again.
Regards Stefan
PS: I'm sorry, I've missed your previous mails about building for Rasperry Pi, otherwise I would have warned you earlier
-- Lic. Reinier Millo Sánchez Centro de Estudios de Informática Universidad Central "Marta Abreu" de Las Villas
Slashdot TV. Video for Nerds. Stuff that matters. http://tv.slashdot.org/
genode-main mailing list genode-main@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/genode-main
Hi Stefan I have switched to Genode's release 14.08, prepared again the ports and compiled the examples in the same way, but when try to test it on RPI, only the colored screen again. Someone have tested successfully this examples on RPI hardware? I have tested successfully the Demo example.
Best regards
On 09/05/2014 02:58 AM, Stefan Kalkowski wrote:
Hello,
On 09/05/2014 05:30 AM, Reinier Millo Sánchez wrote:
Hi I'm testing some examples of Genode on RaspberryPI, but i got some troubles. I'm trying to test arora, qt5 and sdl examples. I'm using Genode 14.05. I have configured the following ports:
./tool/ports/prepare_port arora ./tool/ports/prepare_port dde-linux ./tool/ports/prepare_port libc ./tool/ports/prepare_port stdcxx ./tool/ports/prepare_port mesa ./tool/ports/prepare_port zlib ./tool/ports/prepare_port icu ./tool/ports/prepare_port jpeg ./tool/ports/prepare_port libpng ./tool/ports/prepare_port openssl ./tool/ports/prepare_port freetype ./tool/ports/prepare_port lwip ./tool/ports/prepare_port qoost ./tool/ports/prepare_port bintuils ./tool/ports/prepare_port sdl make prepare PKG=qt5 (on libports)
On etc/build.conf have activated the following repositories:
REPOSITORIES += $(GENODE_DIR)/repos/base-hw REPOSITORIES += $(GENODE_DIR)/repos/base REPOSITORIES += $(GENODE_DIR)/repos/os REPOSITORIES += $(GENODE_DIR)/repos/demo REPOSITORIES += $(GENODE_DIR)/repos/libports REPOSITORIES += $(GENODE_DIR)/repos/ports REPOSITORIES += $(GENODE_DIR)/repos/dde_linux REPOSITORIES += $(GENODE_DIR)/repos/gems
To compile the example have used the following command lines:
make run/arora make run/qt5 make run/sdl
During the compilation process of the examples, get this line, but finally the elf image is generated:
/usr/local/genode-gcc/bin/genode-arm-ld: BFD (GNU Binutils) 2.22 assertion fail ../../../../contrib/binutils-2.22/bfd/elf32-arm.c:12049
To generate the img file from the elf image have used:
/usr/local/genode-gcc/bin/genode-arm-objcopy -Obinary var/run/arora/image.elf genode_arora.img /usr/local/genode-gcc/bin/genode-arm-objcopy -Obinary var/run/qt5/image.elf genode_qt5.img /usr/local/genode-gcc/bin/genode-arm-objcopy -Obinary var/run/sdl/image.elf genode_sdl.img
To test this img on the RPI have created the config.txt file with:
kernel=<file>.img kernel_address=0x00800000
To test the examples i'm using a RPI model B and a version of QEMU with functional support for RPI:
https://github.com/Torlus/qemu/
When test the elf images with QEMU get the output on serial console, but this version of QEMU seems like don't support framebuffer emulation. After that have tried to run examples on the real PI but only get the coloured screen. I have compiled and tested on th RPI the Demo and Hello examples. If somebody can help me? Best regards
Thank you very much for the provided information. I really appreciate the degree of detailing in your post, so one can reproduce all steps.
Unfortunately, the Rasperry Pi support was broken in release 14.05. We got aware of that fact at the end of July by a post on this list. Now, we nightly test the Rasperry Pi platform, and things should work properly. Please, switch to Genode's release 14.08. I'm afraid you'll have to do some of the prepare steps again, but the build system will warn you if this is the case. Also, please assure to do a 'make cleanall' in your build directory after the upgrade, before you proceed again.
Regards Stefan
PS: I'm sorry, I've missed your previous mails about building for Rasperry Pi, otherwise I would have warned you earlier
-- Lic. Reinier Millo Sánchez Centro de Estudios de Informática Universidad Central "Marta Abreu" de Las Villas
Slashdot TV. Video for Nerds. Stuff that matters. http://tv.slashdot.org/
genode-main mailing list genode-main@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/genode-main
Hello Reinier,
I have switched to Genode's release 14.08, prepared again the ports and compiled the examples in the same way, but when try to test it on RPI, only the colored screen again. Someone have tested successfully this examples on RPI hardware? I have tested successfully the Demo example.
the SDL and Qt5 examples are indeed not expected to work on the Raspberry Pi out of the box. Most run scripts still lack two things that are important for the RPi, namely the platform driver and the USB HID driver. Those components are included in the 'os/run/demo.run' script but are lacking in many others such as the 'libports/run/sdl.run'. However, you should still get serial output in any case. Normally, the serial output gives enough indications about the missing pieces. Given the demo.run script as example, complementing the other run scripts with the missing pieces should be straight forward.
Has the switch to version 14.08 resolved the build problem?
As another heads-up warning regarding the Rpi, the USB driver is still not perfect. There are two issues. First, the keyboard is not working reliably unless you set the number of used host channels to 8 instead of 2 using the 'dwc_param_host_channels_default' define in <genode-dir>/contrib/dde_linux-<hash>/src/lib/dde_linux/drivers/usb/host/dwc_otg/dwc_otg_core_if.h. Second, the USB driver draws an enormous amount of CPU time because it has to issue USB start-of-frame (SOF) transactions every microframe (that is every 250 microseconds). So when the USB driver is running, there is hardly any CPU time left for the other processes. On Linux, this problem has been somehow fixed by the so-called FIQ optimization. I am still pondering about the best way to relieve this issue when using the base-hw kernel.
Best regards Norman
Hi Norman That's right, this is the problem on Arora, QT5, and SDL examples
[init] fb_drv: no route to service "Platform" [init] usb_drv: no route to service "Platform"
now I'm checking the platform driver and USB HID at the run scripts. I'm emulating the examples on QEMU to get the serial output. I have switched to Genode 14.08, but now in 14.08 the Demo example don't run on the real harware. I have tested successfully the Demo example from Genode 14.05, i'm goint to check the main difference between versions to try catch the problem. Best regards
On 09/05/2014 02:58 PM, Norman Feske wrote:
Hello Reinier,
I have switched to Genode's release 14.08, prepared again the ports and compiled the examples in the same way, but when try to test it on RPI, only the colored screen again. Someone have tested successfully this examples on RPI hardware? I have tested successfully the Demo example.
the SDL and Qt5 examples are indeed not expected to work on the Raspberry Pi out of the box. Most run scripts still lack two things that are important for the RPi, namely the platform driver and the USB HID driver. Those components are included in the 'os/run/demo.run' script but are lacking in many others such as the 'libports/run/sdl.run'. However, you should still get serial output in any case. Normally, the serial output gives enough indications about the missing pieces. Given the demo.run script as example, complementing the other run scripts with the missing pieces should be straight forward.
Has the switch to version 14.08 resolved the build problem?
As another heads-up warning regarding the Rpi, the USB driver is still not perfect. There are two issues. First, the keyboard is not working reliably unless you set the number of used host channels to 8 instead of 2 using the 'dwc_param_host_channels_default' define in <genode-dir>/contrib/dde_linux-<hash>/src/lib/dde_linux/drivers/usb/host/dwc_otg/dwc_otg_core_if.h. Second, the USB driver draws an enormous amount of CPU time because it has to issue USB start-of-frame (SOF) transactions every microframe (that is every 250 microseconds). So when the USB driver is running, there is hardly any CPU time left for the other processes. On Linux, this problem has been somehow fixed by the so-called FIQ optimization. I am still pondering about the best way to relieve this issue when using the base-hw kernel.
Best regards Norman
Hi Norman Trying to test the Arora example on RaspberryPI. I have compiled it for hw_rpi, when try to run Arora get this serial output, like you have told me about the Platform service:
Genode 14.08 int main(): --- create local services --- int main(): --- start init --- int main(): transferred 166 MB to init int main(): --- init created, waiting for exit condition --- [init -> fb_drv] --- fb_drv started --- [init] fb_drv: no route to service "Platform" [init -> fb_drv] C++ runtime: Genode::Parent::Service_denied [init -> fb_drv] void* abort(): abort called [init -> usb_drv] Services::Services(): No <storage> config node found - not starting the USB Storage (Block) service [init -> usb_drv] Enabled UHCI (USB 1.0/1.1) support [init -> usb_drv] Enabled EHCI (USB 2.0) support [init] usb_drv: no route to service "Platform" [init -> usb_drv] C++ runtime: Genode::Parent::Service_denied [init -> usb_drv] void* abort(): abort called [init -> arora] tar archive 'qt5_fs_arora.tar' local at 230000, size is 503808 [init -> arora] void init_libc_lock_pipe(): init_libc_lock_pipe() [init -> arora] using the pipe libc plugin [init -> arora] void init_nic_dhcp(): init_nic_dhcp() [init -> arora] Using DHCP for interface configuration. [init -> arora] {anonymous}::Plugin::Plugin(): using the lwIP libc plugin
After that i have modified the arora.run script based on demo.run to support the service Platform, this is a patch version of the changes:
diff --git a/repos/ports/run/arora.run b/repos/ports/run/arora.run index c229bd6..a4a7207 100644 --- a/repos/ports/run/arora.run +++ b/repos/ports/run/arora.run @@ -9,10 +9,14 @@ set feature(Nic) 1 set build_components [qt5_build_components feature]
append build_components { + drivers/input server/loader server/tar_rom server/nit_fb app/launchpad test/nitpicker app/arora }
+lappend_if [have_spec gpio] build_components drivers/gpio +lappend_if [have_spec platform_rpi] build_components drivers/platform + build $build_components
create_boot_directory @@ -44,6 +48,13 @@ append config {
append config [qt5_start_nodes feature]
+append_if [have_spec platform_rpi] config { + <start name="platform_drv"> + <resource name="RAM" quantum="1M"/> + <provides><service name="Platform"/></provides> + <config/> + </start>} + append config { <start name="loader"> <resource name="RAM" quantum="2M"/> @@ -131,6 +142,8 @@ if {[have_spec qt4_deprecated]} { } }
+lappend_if [have_spec platform_rpi] boot_modules platform_drv + build_boot_image $boot_modules
append qemu_args " -m 512 "
When try to run the Arora example get the framebuffer initialized but don't start the arora browser on the framebuffer, this is the serial output:
Genode 14.08 int main(): --- create local services --- int main(): --- start init --- int main(): transferred 165 MB to init int main(): --- init created, waiting for exit condition --- [init -> fb_drv] --- fb_drv started --- [init -> platform_drv] --- Raspberry Pi platform driver --- [init -> usb_drv] Services::Services(): No <storage> config node found - not starting the USB Storage (Block) service [init -> usb_drv] Enabled UHCI (USB 1.0/1.1) support [init -> usb_drv] Enabled EHCI (USB 2.0) support [init -> usb_drv] Using configured mac: 2e:60:90:0c:4e:01 [init -> usb_drv] dev_info: DWC OTG Controller [init -> usb_drv] dev_info: new USB bus registered, assigned bus number 1 [init -> usb_drv] dev_info: irq 17, io mem 0x00000000 [init -> usb_drv] dev_info: USB hub found [init -> usb_drv] dev_info: 1 port detected [init -> nitpicker] create session with args: label="wm", ram_quota=28672 [init -> nitpicker] create session with args: label="pointer", ram_quota=28672 [init -> nitpicker] create session with args: label="wm -> decorator", ram_quota=28672 [init -> arora] tar archive 'qt5_fs_arora.tar' local at 230000, size is 503808 [init -> arora] void init_libc_lock_pipe(): init_libc_lock_pipe() [init -> arora] using the pipe libc plugin [init -> arora] void init_nic_dhcp(): init_nic_dhcp() [init -> arora] Using DHCP for interface configuration. [init -> arora] {anonymous}::Plugin::Plugin(): using the lwIP libc plugin
I think that "No <storage> config node found ..." should not be causing the problem running the Arora browser. Any ideas or suggestions?
Best regards
On 09/05/2014 02:58 PM, Norman Feske wrote:
Hello Reinier,
I have switched to Genode's release 14.08, prepared again the ports and compiled the examples in the same way, but when try to test it on RPI, only the colored screen again. Someone have tested successfully this examples on RPI hardware? I have tested successfully the Demo example.
the SDL and Qt5 examples are indeed not expected to work on the Raspberry Pi out of the box. Most run scripts still lack two things that are important for the RPi, namely the platform driver and the USB HID driver. Those components are included in the 'os/run/demo.run' script but are lacking in many others such as the 'libports/run/sdl.run'. However, you should still get serial output in any case. Normally, the serial output gives enough indications about the missing pieces. Given the demo.run script as example, complementing the other run scripts with the missing pieces should be straight forward.
Has the switch to version 14.08 resolved the build problem?
As another heads-up warning regarding the Rpi, the USB driver is still not perfect. There are two issues. First, the keyboard is not working reliably unless you set the number of used host channels to 8 instead of 2 using the 'dwc_param_host_channels_default' define in <genode-dir>/contrib/dde_linux-<hash>/src/lib/dde_linux/drivers/usb/host/dwc_otg/dwc_otg_core_if.h. Second, the USB driver draws an enormous amount of CPU time because it has to issue USB start-of-frame (SOF) transactions every microframe (that is every 250 microseconds). So when the USB driver is running, there is hardly any CPU time left for the other processes. On Linux, this problem has been somehow fixed by the so-called FIQ optimization. I am still pondering about the best way to relieve this issue when using the base-hw kernel.
Best regards Norman
Hi Reinier,
After that i have modified the arora.run script based on demo.run to support the service Platform, this is a patch version of the changes:
diff --git a/repos/ports/run/arora.run b/repos/ports/run/arora.run index c229bd6..a4a7207 100644 --- a/repos/ports/run/arora.run +++ b/repos/ports/run/arora.run @@ -9,10 +9,14 @@ set feature(Nic) 1 set build_components [qt5_build_components feature] append build_components { + drivers/input
this line is not needed because on the Rpi, the "Input" service is provided by the USB driver.
server/loader server/tar_rom server/nit_fb app/launchpad test/nitpicker app/arora } +lappend_if [have_spec gpio] build_components drivers/gpio
This line can be omitted because the Rpi platform does not enable the "gpio" spec value anyway. But it does not do harm either.
+lappend_if [have_spec platform_rpi] build_components drivers/platform + build $build_components create_boot_directory @@ -44,6 +48,13 @@ append config { append config [qt5_start_nodes feature] +append_if [have_spec platform_rpi] config { + <start name="platform_drv"> + <resource name="RAM" quantum="1M"/> + <provides><service name="Platform"/></provides> + <config/> + </start>} + append config { <start name="loader"> <resource name="RAM" quantum="2M"/> @@ -131,6 +142,8 @@ if {[have_spec qt4_deprecated]} { } } +lappend_if [have_spec platform_rpi] boot_modules platform_drv + build_boot_image $boot_modules append qemu_args " -m 512 "
The remainder of the patch looks good to me.
When try to run the Arora example get the framebuffer initialized but don't start the arora browser on the framebuffer, this is the serial output:
Genode 14.08 int main(): --- create local services --- int main(): --- start init --- int main(): transferred 165 MB to init int main(): --- init created, waiting for exit condition --- [init -> fb_drv] --- fb_drv started --- [init -> platform_drv] --- Raspberry Pi platform driver --- [init -> usb_drv] Services::Services(): No <storage> config node found - not starting the USB Storage (Block) service [init -> usb_drv] Enabled UHCI (USB 1.0/1.1) support [init -> usb_drv] Enabled EHCI (USB 2.0) support [init -> usb_drv] Using configured mac: 2e:60:90:0c:4e:01 [init -> usb_drv] dev_info: DWC OTG Controller [init -> usb_drv] dev_info: new USB bus registered, assigned bus number 1 [init -> usb_drv] dev_info: irq 17, io mem 0x00000000 [init -> usb_drv] dev_info: USB hub found [init -> usb_drv] dev_info: 1 port detected [init -> nitpicker] create session with args: label="wm", ram_quota=28672 [init -> nitpicker] create session with args: label="pointer", ram_quota=28672 [init -> nitpicker] create session with args: label="wm -> decorator", ram_quota=28672 [init -> arora] tar archive 'qt5_fs_arora.tar' local at 230000, size is 503808 [init -> arora] void init_libc_lock_pipe(): init_libc_lock_pipe() [init -> arora] using the pipe libc plugin [init -> arora] void init_nic_dhcp(): init_nic_dhcp() [init -> arora] Using DHCP for interface configuration. [init -> arora] {anonymous}::Plugin::Plugin(): using the lwIP libc plugin
I think that "No <storage> config node found ..." should not be causing the problem running the Arora browser.
You are right. The problem must be somewhere else. I have two ideas:
First, the USB driver may got stuck because it missed one of the high-frequent SOF interrupts. Not only do those interrupts occur at a very high rate but they must be serviced in a timely manner too. Otherwise the USB host controller or hub gets stuck. The LOG output shows that the USB hub is found (so the communication of the driver with to the host controller is working) but there is HID device popping up (you may compare the above output of the USB driver with the output produced by the demo.run script to see the difference). When running a complex scenario including Qt5 programs, a CPU-intensive process (i.e., Arora) may defer the operation of the USB driver. So the USB driver will service the interrupt too late. I observed a similar problem with the gems/run/wm.run script on the Rpi:
https://github.com/genodelabs/genode/blob/master/repos/gems/run/wm.run
To remedy this effect, the static priorities of the base-hw kernel come to the rescue. For the wm.run script, I downgraded the priorities of the heavy-weight processes. Look out for the "prio_levels" and "priority" attributes in the run script. You can find the corresponding documentation here:
http://genode.org/documentation/developer-resources/init#Priority_support
The second possible issue might be related to the networking driver, which is provided by the USB driver, too. The Rpi relies on networking-over-USB. Personally, I have not used networking on the Rpi, yet. So you are conquering uncharted land here.
Have you successfully tried to run a simpler Qt5 application on the Rpi. I would recommend to test the qt5.run script first. This one does not rely on a working networking driver. Once you got the qt5.run script working, have a look at the networking as a separate step by testing (and adapting) the libports/lwip.run script on the Rpi. I would not try to get the arora.run script working unless both run scripts qt5.run and lwip.run work fine.
Good luck!
Norman