Hi all, I am interested in the work of Genode about muti_linux on pandaboard[1]. So, I downloaded the image from that page, and run it correctly. I try to build it by myself but get some troubles.
Firstly, there is no two_linux_panda.run script in the latest release of Genode, so I got one form genode 12.08. In order to build it , I changed 'omap4_fb' to 'fb_drv', and delete 'lib_log.lib.so'(The building log says can't find it). After that, I got an image.elf and run it on pandaboard, but it can't not work well.
This is the log of UART output: ... Genode 14.11 int main(): --- create local services --- int main(): --- start init --- int main(): transferred 989 MB to init int main(): --- init created, waiting for exit condition --- Quota exceeded! amount=28672, size=4096, consumed=28672 [init] upgrading quota donation for Env::CPU (8192 bytes) Quota exceeded! amount=36864, size=4096, consumed=36864 [init] upgrading quota donation for Env::CPU (8192 bytes) Quota exceeded! amount=45056, size=4096, consumed=45056 [init] upgrading quota donation for Env::CPU (8192 bytes) [init -> sd_card_drv] --- OMAP4 SD card driver --- [init -> nic_bridge] Could not open file "config" [init -> nic_bridge] Could not obtain config file [init -> blocktest_term] int main(int, char**): --- terminal service started --- Insufficient quota for transfer: init -> nic_bridge have 1564672, need 3301376 [init] not enough quota for a donation of 3301376 bytes [init -> nic_bridge] resource_request: ram_quota=3301376 [init -> nic_bridge] virtual void Genode::Platform_env::release(): used before 8 [init -> nic_bridge] virtual void Genode::Platform_env::release(): used after f2 [init] child "nic_bridge" requests resources: ram_quota=3301376 [init -> fb_drv] Could not open file "config" [init -> fb_drv] Could not obtain config file [init -> http_term] int main(int, char**): --- terminal service started --- Insufficient quota for transfer: init -> part_blk have 1564672, need 4206592 [init] not enough quota for a donation of 4206592 bytes [init -> part_blk] resource_request: ram_quota=4206592 [init -> part_blk] virtual void Genode::Platform_env::release(): used before fr6 [init -> fb_drv] int main(int, char**): using default configuration: HDMI@...305... [init -> part_blk] virtual void Genode::Platform_env::release(): used after fre0 [init] child "part_blk" requests resources: ram_quota=4206592 [init -> vmlinux.1] Booting L4Linux ... [init -> vmlinux.1] ======> L4Linux starting... <======== [init -> vmlinux.1] Linux version 3.9.0-l4-gf2eebae (czzcz@...306...) (gcc5 [init -> vmlinux.1] Binary name: vmlinux [init -> vmlinux.1] This is an AEABI build. [init -> vmlinux.1] Linux kernel command line (2 args): mem=54M l4x_rd=initrd.gz [init -> vmlinux.1] CPU mapping (l:p)[0]: Image: 02000000 - 02500000 [5120 KiB]. [init -> vmlinux.1] Areas: Text: 02000000 - 023dc000 [3952kB] (a bit longer) [init -> vmlinux.1] Data: 023dc000 - 024091b8 [180kB] [init -> vmlinux.1] Initdata: 023b4000 - 023da9c0 [154kB] [init -> vmlinux.1] BSS: 0240a000 - 02446de8 [243kB] [init -> vmlinux.2] Booting L4Linux ... [init -> usb_drv] Services::Services(): Could not read screen resolution in cone [init -> usb_drv] Services::Services(): No <storage> config node found - not ste [init -> usb_drv] Services::Services(): No <raw> config node found - not startie [init -> usb_drv] Warning: No USB controllers enabled. [init -> usb_drv] Use <config (u/e/x)hci="yes"> in your 'usb_drv' configuration [init -> sd_card_drv] CID: 0x97009861 0x38caa862 0x44303847 0x02544d53 [init -> sd_card_drv] RCA: 0x895a [init -> vmlinux.2] ======> L4Linux starting... <======== [init -> vmlinux.2] Linux version 3.9.0-l4-gf2eebae (czzcz@...306...) (gcc5 [init -> vmlinux.2] Binary name: vmlinux [init -> vmlinux.2] This is an AEABI build. [init -> vmlinux.2] Linux kernel command line (2 args): mem=54M l4x_rd=initrd.gz [init -> sd_card_drv] SD card detected [init -> sd_card_drv] capacity: 7600 MiB [init -> vmlinux.2] CPU mapping (l:p)[0]: Image: 02000000 - 02500000 [5120 KiB]. [init -> vmlinux.2] Areas: Text: 02000000 - 023dc000 [3952kB] (a bit longer) [init -> vmlinux.2] Data: 023dc000 - 024091b8 [180kB] [init -> vmlinux.2] Initdata: 023b4000 - 023da9c0 [154kB] [init -> vmlinux.2] BSS: 0240a000 - 02446de8 [243kB] [init -> part_blk] Partition 1: LBA 62 (78058 blocks) type: c [init -> part_blk] Partition 2: LBA 78120 (46872 blocks) type: c [init -> part_blk] Partition 3: LBA 124992 (46872 blocks) type: c [init -> nitpicker] Could not open file "config" [init -> nitpicker] Could not obtain config file [init -> nitpicker] create session with args: label="linux.1", ram_quota=28672 [init -> nitpicker] create session with args: label="linux.2", ram_quota=28672 [init -> nitpicker] create session with args: label="http_fb", ram_quota=28672 [init -> nitpicker] create session with args: label="blocktest_fb", ram_quota=22 [init -> linux.1] using xywh=(1,1,510,382) [init -> linux.2] using xywh=(513,513,510,382) [init -> http_fb] using xywh=(1,1,510,376) [init -> blocktest_fb] using xywh=(513,513,510,376) [init -> http_term] Could not open file "config" [init -> http_term] Could not obtain config file [init -> blocktest_term] Could not open file "config" [init -> blocktest_term] Could not obtain config file [init -> http_term] cell size is 8x16 [init -> blocktest_term] cell size is 8x16 [init -> http_term] create terminal session [init -> blocktest_term] create terminal session [init -> http_term] new terminal session: [init -> http_term] framebuffer has 510x376 pixels [init -> http_term] character size is 8x16 pixels [init -> http_term] terminal size is 63x23 characters [init -> blocktest_term] new terminal session: [init -> blocktest_term] framebuffer has 510x376 pixels [init -> blocktest_term] character size is 8x16 pixels [init -> blocktest_term] terminal size is 63x23 characters [init -> nic_bridge] Invalid session request, no matching policy [init -> vmlinux.1] l4io_get_root_device: Not implemented yet! [init -> vmlinux.1] Device scan: [init -> vmlinux.1] l4io_iterate_devices: Not implemented yet! [init -> vmlinux.1] Device scan done. [init -> vmlinux.2] l4io_get_root_device: Not implemented yet! [init -> vmlinux.2] Device scan: [init -> vmlinux.2] l4io_iterate_devices: Not implemented yet! [init -> vmlinux.2] Device scan done. [init] vmlinux.1: no route to service "Timer" [init -> vmlinux.1] C++ runtime: Genode::Parent::Service_denied [init] vmlinux.2: no route to service "Timer" [init -> vmlinux.1] void* abort(): abort called [init -> vmlinux.2] C++ runtime: Genode::Parent::Service_denied [init -> vmlinux.2] void* abort(): abort called [init] virtual void Genode::Child_policy::exit(int): child "test-libc_ffat" exi1 [init] virtual void Genode::Child_policy::exit(int): child "test-lwip_httpsrv" 1
-------------------------------------------------------------- Only test-lwip_httpssrv shows on the The HDMI moniter, and it says : [test-lwip_httpssrv] Could not open file "config" [test-lwip_httpssrv] Could not obtain config file [test-lwip_httpssrv] no VFS configured [test-lwip_httpssrv] DHCP timed out [test-lwip_httpssrv] We got no IP address!
I want to ask: 1. What is 'lib_log.lib.so'? Can I delete it? 2. Is there a document about configuration of run script? 3. How to run the two_linux_panda correctly?
Best, Zachary
Hi Zachary,
On 02/10/2015 03:34 AM, Zachary wrote:
Hi all, I am interested in the work of Genode about muti_linux on pandaboard[1]. So, I downloaded the image from that page, and run it correctly. I try to build it by myself but get some troubles.
Firstly, there is no two_linux_panda.run script in the latest release of Genode, so I got one form genode 12.08. In order to build it , I changed 'omap4_fb' to 'fb_drv', and delete 'lib_log.lib.so'(The building log says can't find it). After that, I got an image.elf and run it on pandaboard, but it can't not work well.
This is the log of UART output: ... Genode 14.11 int main(): --- create local services --- int main(): --- start init --- int main(): transferred 989 MB to init int main(): --- init created, waiting for exit condition --- Quota exceeded! amount=28672, size=4096, consumed=28672 [init] upgrading quota donation for Env::CPU (8192 bytes) Quota exceeded! amount=36864, size=4096, consumed=36864 [init] upgrading quota donation for Env::CPU (8192 bytes) Quota exceeded! amount=45056, size=4096, consumed=45056 [init] upgrading quota donation for Env::CPU (8192 bytes) [init -> sd_card_drv] --- OMAP4 SD card driver --- [init -> nic_bridge] Could not open file "config" [init -> nic_bridge] Could not obtain config file [init -> blocktest_term] int main(int, char**): --- terminal service started --- Insufficient quota for transfer: init -> nic_bridge have 1564672, need 3301376 [init] not enough quota for a donation of 3301376 bytes [init -> nic_bridge] resource_request: ram_quota=3301376 [init -> nic_bridge] virtual void Genode::Platform_env::release(): used before 8 [init -> nic_bridge] virtual void Genode::Platform_env::release(): used after f2 [init] child "nic_bridge" requests resources: ram_quota=3301376 [init -> fb_drv] Could not open file "config" [init -> fb_drv] Could not obtain config file [init -> http_term] int main(int, char**): --- terminal service started --- Insufficient quota for transfer: init -> part_blk have 1564672, need 4206592 [init] not enough quota for a donation of 4206592 bytes [init -> part_blk] resource_request: ram_quota=4206592 [init -> part_blk] virtual void Genode::Platform_env::release(): used before fr6 [init -> fb_drv] int main(int, char**): using default configuration: HDMI@...305... [init -> part_blk] virtual void Genode::Platform_env::release(): used after fre0 [init] child "part_blk" requests resources: ram_quota=4206592 [init -> vmlinux.1] Booting L4Linux ... [init -> vmlinux.1] ======> L4Linux starting... <======== [init -> vmlinux.1] Linux version 3.9.0-l4-gf2eebae (czzcz@...306...) (gcc5 [init -> vmlinux.1] Binary name: vmlinux [init -> vmlinux.1] This is an AEABI build. [init -> vmlinux.1] Linux kernel command line (2 args): mem=54M l4x_rd=initrd.gz [init -> vmlinux.1] CPU mapping (l:p)[0]: Image: 02000000 - 02500000 [5120 KiB]. [init -> vmlinux.1] Areas: Text: 02000000 - 023dc000 [3952kB] (a bit longer) [init -> vmlinux.1] Data: 023dc000 - 024091b8 [180kB] [init -> vmlinux.1] Initdata: 023b4000 - 023da9c0 [154kB] [init -> vmlinux.1] BSS: 0240a000 - 02446de8 [243kB] [init -> vmlinux.2] Booting L4Linux ... [init -> usb_drv] Services::Services(): Could not read screen resolution in cone [init -> usb_drv] Services::Services(): No <storage> config node found - not ste [init -> usb_drv] Services::Services(): No <raw> config node found - not startie [init -> usb_drv] Warning: No USB controllers enabled. [init -> usb_drv] Use <config (u/e/x)hci="yes"> in your 'usb_drv' configuration [init -> sd_card_drv] CID: 0x97009861 0x38caa862 0x44303847 0x02544d53 [init -> sd_card_drv] RCA: 0x895a [init -> vmlinux.2] ======> L4Linux starting... <======== [init -> vmlinux.2] Linux version 3.9.0-l4-gf2eebae (czzcz@...306...) (gcc5 [init -> vmlinux.2] Binary name: vmlinux [init -> vmlinux.2] This is an AEABI build. [init -> vmlinux.2] Linux kernel command line (2 args): mem=54M l4x_rd=initrd.gz [init -> sd_card_drv] SD card detected [init -> sd_card_drv] capacity: 7600 MiB [init -> vmlinux.2] CPU mapping (l:p)[0]: Image: 02000000 - 02500000 [5120 KiB]. [init -> vmlinux.2] Areas: Text: 02000000 - 023dc000 [3952kB] (a bit longer) [init -> vmlinux.2] Data: 023dc000 - 024091b8 [180kB] [init -> vmlinux.2] Initdata: 023b4000 - 023da9c0 [154kB] [init -> vmlinux.2] BSS: 0240a000 - 02446de8 [243kB] [init -> part_blk] Partition 1: LBA 62 (78058 blocks) type: c [init -> part_blk] Partition 2: LBA 78120 (46872 blocks) type: c [init -> part_blk] Partition 3: LBA 124992 (46872 blocks) type: c [init -> nitpicker] Could not open file "config" [init -> nitpicker] Could not obtain config file [init -> nitpicker] create session with args: label="linux.1", ram_quota=28672 [init -> nitpicker] create session with args: label="linux.2", ram_quota=28672 [init -> nitpicker] create session with args: label="http_fb", ram_quota=28672 [init -> nitpicker] create session with args: label="blocktest_fb", ram_quota=22 [init -> linux.1] using xywh=(1,1,510,382) [init -> linux.2] using xywh=(513,513,510,382) [init -> http_fb] using xywh=(1,1,510,376) [init -> blocktest_fb] using xywh=(513,513,510,376) [init -> http_term] Could not open file "config" [init -> http_term] Could not obtain config file [init -> blocktest_term] Could not open file "config" [init -> blocktest_term] Could not obtain config file [init -> http_term] cell size is 8x16 [init -> blocktest_term] cell size is 8x16 [init -> http_term] create terminal session [init -> blocktest_term] create terminal session [init -> http_term] new terminal session: [init -> http_term] framebuffer has 510x376 pixels [init -> http_term] character size is 8x16 pixels [init -> http_term] terminal size is 63x23 characters [init -> blocktest_term] new terminal session: [init -> blocktest_term] framebuffer has 510x376 pixels [init -> blocktest_term] character size is 8x16 pixels [init -> blocktest_term] terminal size is 63x23 characters [init -> nic_bridge] Invalid session request, no matching policy [init -> vmlinux.1] l4io_get_root_device: Not implemented yet! [init -> vmlinux.1] Device scan: [init -> vmlinux.1] l4io_iterate_devices: Not implemented yet! [init -> vmlinux.1] Device scan done. [init -> vmlinux.2] l4io_get_root_device: Not implemented yet! [init -> vmlinux.2] Device scan: [init -> vmlinux.2] l4io_iterate_devices: Not implemented yet! [init -> vmlinux.2] Device scan done. [init] vmlinux.1: no route to service "Timer" [init -> vmlinux.1] C++ runtime: Genode::Parent::Service_denied [init] vmlinux.2: no route to service "Timer" [init -> vmlinux.1] void* abort(): abort called [init -> vmlinux.2] C++ runtime: Genode::Parent::Service_denied [init -> vmlinux.2] void* abort(): abort called [init] virtual void Genode::Child_policy::exit(int): child "test-libc_ffat" exi1 [init] virtual void Genode::Child_policy::exit(int): child "test-lwip_httpsrv" 1
Only test-lwip_httpssrv shows on the The HDMI moniter, and it says : [test-lwip_httpssrv] Could not open file "config" [test-lwip_httpssrv] Could not obtain config file [test-lwip_httpssrv] no VFS configured [test-lwip_httpssrv] DHCP timed out [test-lwip_httpssrv] We got no IP address!
I want to ask:
- What is 'lib_log.lib.so'? Can I delete it?
The libc_log.lib.so was a library used to map data send to stdout or stderr to Genode's LOG service. This kind of libc backend libraries was replaced by a set of more flexible VFS-plugins. For more information about the usage and integration of these plugins, please have a look into the corresponding section of the Genode 14.05 release notes:
http://genode.org/documentation/release-notes/14.05#Per-process_virtual_file...
To sum it up, you don't need the libc_log.lib.so anymore, but any libc program needs to be configure properly so that its printings are connected to the right backend - in this case the LOG service. A config snippet for this purpose looks like the following:
<config> ... <libc stdin="/dev/null" stdout="/dev/log" stderr="/dev/log"> <vfs> <dir name="dev"> <log/> <null/> </dir> </vfs> </libc> </config
- Is there a document about configuration of run script?
The run-script structure and the configuration language are two distinct topics. A run-script comprises everything that is needed to do (build, configuration, assembly, testing) to have a ready-to-use or ready-to-test setup. Therefore it is closely coupled with Genode's build system. The XML-style configuration you can find in a run-script is actually the aggregation of all component's configuration. It is used by the system's init process to spawn the components, route communication channels between them, express access permissions, and deliver component-specific configurations to them.
To better understand the interplay of run-script and build system a good starting point can be found here:
http://genode.org/documentation/developer-resources/build_system
To better understand the init process configuration have a look at here:
http://genode.org/documentation/developer-resources/init
Although both documents provide a good introduction to the field, they are a bit outdated. Currently, Norman works on a "Genode manual", which includes both topics and represents the "state of the art". A preliminary version can be found here:
http://genode.org/files/e01096b9ffe3f416157f6ec46c467725/manual-2015-01-23.p...
- How to run the two_linux_panda correctly?
According to the output you posted, the biggest problem is a missing route to the "Timer" service needed by both Linux instances. That's why they don't come up. Probably, it is enough to add something like:
<service name="Timer"> <child name="timer"/> </service>
to the route declaration of both linux instances. Alternatively you might change their default routes.
Moreover, I can see that there are some test-programs started "test-libc_ffat" and "test-lwip_httpsrv" that you probably don't need. I would exclude them ("blocktest_term" too) so you get rid of complexity you don't want to have in your script.
Best Regards Stefan
Best, Zachary
[1] http://genode.org/documentation/articles/pandaboard
Dive into the World of Parallel Programming. The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net/ _______________________________________________ genode-main mailing list genode-main@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/genode-main
Hi Stefan, Thanks for your help. I write my own two_linux_panda run script, but still have some problem when run the image created by this script: there is only one grey enmpty window on top-left of the screen.
This is my run script:
assert_spec foc assert_spec platform_panda
# # Build # build { core init drivers/timer drivers/framebuffer drivers/sd_card drivers/usb drivers/gpio server/nic_bridge server/part_blk server/nitpicker server/nit_fb l4linux }
create_boot_directory
# # Config # set config { <config prio_levels="2"> <parent-provides> <service name="ROM"/> <service name="RAM"/> <service name="IRQ"/> <service name="IO_MEM"/> <service name="IO_PORT"/> <service name="CAP"/> <service name="PD"/> <service name="RM"/> <service name="CPU"/> <service name="LOG"/> <service name="SIGNAL"/> </parent-provides> <default-route> <any-service> <parent/> <any-child/> </any-service> </default-route> <start name="timer" priority="0"> <resource name="RAM" quantum="1M"/> <provides><service name="Timer"/></provides> </start> <start name="fb_drv" priority="-1"> <resource name="RAM" quantum="4M"/> <provides><service name="Framebuffer"/></provides> </start> <start name="sd_card_drv" priority="0"> <resource name="RAM" quantum="4M"/> <provides><service name="Block"/></provides> </start> <start name="gpio_drv"> <resource name="RAM" quantum="4M"/> <provides><service name="Gpio"/></provides> <config/> </start> <start name="usb_drv" priority="-1"> <resource name="RAM" quantum="12M"/> <provides> <service name="Input"/> <service name="Nic"/> </provides> <config ehci="yes"> <hid/> <nic mac="02:00:00:00:01:01" /> </config> </start> <!--<start name="part_blk"> <resource name="RAM" quantum="2M"/> <provides><service name="Block"/></provides> <config> <policy label="vmlinux.1 -> sda" partition="1" /> <policy label="vmlinux.2 -> sda" partition="2" /> <policy label="test-libc_ffat" partition="3" /> </config> <route> <service name="Block"> <child name="sd_card_drv"/> </service> <any-service> <parent/> <any-child/> </any-service> </route> </start>--> <!--<start name="nic_bridge" priority="-1"> <resource name="RAM" quantum="2M"/> <provides><service name="Nic"/></provides> <route> <service name="Nic"> <child name="usb_drv"/> </service> <any-service> <parent/> <any-child/> </any-service> </route> </start>--> <start name="nitpicker"> <resource name="RAM" quantum="2M"/> <provides><service name="Nitpicker"/></provides> <route> <service name="Input"> <child name="usb_drv"/> </service> <service name="Framebuffer"> <child name="fb_drv"/> </service> <any-service> <parent/> <any-child/> </any-service> </route> </start> <start name="linux.1"> <binary name="nit_fb"/> <resource name="RAM" quantum="4M"/> <provides> <service name="Framebuffer"/> <service name="Input"/> </provides> <config xpos="1" ypos="0" width="510" height="382"/> </start> <start name="linux.2"> <binary name="nit_fb"/> <resource name="RAM" quantum="4M"/> <provides> <service name="Framebuffer"/> <service name="Input"/> </provides> <config xpos="513" ypos="0" width="510" height="382"/> </start>
<start name="vmlinux.1" priority="-1"> <binary name="l4linux"/> <resource name="RAM" quantum="296M"/> <config args="mem=254M l4x_rd=initrd.gz"> <block label="sda" /> </config> <route> <service name="Block"> <child name="sd_card_drv"/> </service> <service name="Input"> <child name="linux.1"/> </service> <service name="Framebuffer"> <child name="linux.1"/> </service> <!--<service name="Nic"> <child name="nic_bridge"/> </service>--> <any-service> <any-child/> <parent/> </any-service> </route> </start> <start name="vmlinux.2" priority="-1"> <binary name="l4linux"/> <resource name="RAM" quantum="296M"/> <config args="mem=254M l4x_rd=initrd.gz"> <block label="sda" /> </config> <route> <service name="Block"> <child name="sd_card_drv"/> </service> <service name="Input"> <child name="linux.2"/> </service> <service name="Framebuffer"> <child name="linux.2"/> </service> <!--<service name="Nic"> <child name="nic_bridge"/> </service>--> <any-service> <any-child/> <parent/> </any-service> </route> </start> </config>}
install_config $config
# # Boot modules # set boot_modules { core init timer nic_bridge nitpicker nit_fb part_blk l4linux initrd.gz fb_drv sd_card_drv gpio_drv usb_drv }
set uri "http://genode.org/files/l4linux/busybox-initrd-arm-20120710.gz" if {![file exists bin/initrd.gz]} { puts "Download initramfs ..." exec >& /dev/null wget -c -O bin/initrd.gz $uri } exec >& /dev/null wget -O bin/initrd.gz.md5 $uri.md5 cd bin exec md5sum -c initrd.gz.md5 cd ..
build_boot_image [join $boot_modules " "]
-------------------------------------------------------------------- This is the log:
... Genode 14.11 int main(): --- create local services --- int main(): --- start init --- int main(): transferred 992 MB to init int main(): --- init created, waiting for exit condition --- [init] Could not open file "ld.lib.so" Quota exceeded! amount=28672, size=4096, consumed=28672 [init] upgrading quota donation for Env::CPU (8192 bytes) [init -> gpio_drv] --- omap4 gpio driver --- [init -> sd_card_drv] --- OMAP4 SD card driver --- [init -> gpio_drv] No GPIO config [init -> fb_drv] Could not open file "config" [init -> fb_drv] Could not obtain config file [init -> fb_drv] int main(int, char**): using default configuration: HDMI@...305... [init -> vmlinux.2] Booting L4Linux ... [init -> vmlinux.1] Booting L4Linux ... [init -> usb_drv] Services::Services(): Could not read screen resolution in cone [init -> usb_drv] Services::Services(): No <storage> config node found - not ste [init -> usb_drv] Services::Services(): No <raw> config node found - not startie [init -> usb_drv] Enabled EHCI (USB 2.0) support [init -> vmlinux.1] ======> L4Linux starting... <======== [init -> vmlinux.2] ======> L4Linux starting... <======== [init -> vmlinux.1] Linux version 3.9.0-l4-gf2eebae (czzcz@...306...) (gcc5 [init -> vmlinux.2] Linux version 3.9.0-l4-gf2eebae (czzcz@...306...) (gcc5 [init -> vmlinux.1] Binary name: vmlinux [init -> vmlinux.1] This is an AEABI build. [init -> vmlinux.2] Binary name: vmlinux [init -> vmlinux.2] This is an AEABI build. [init -> vmlinux.1] Linux kernel command line (2 args): mem=254M l4x_rd=initrd.z [init -> vmlinux.2] Linux kernel command line (2 args): mem=254M l4x_rd=initrd.z [init -> vmlinux.1] CPU mapping (l:p)[0]: Image: 02000000 - 02500000 [5120 KiB]. [init -> vmlinux.1] Areas: Text: 02000000 - 023dc000 [3952kB] (a bit longer) [init -> vmlinux.1] Data: 023dc000 - 024091b8 [180kB] [init -> vmlinux.1] Initdata: 023b4000 - 023da9c0 [154kB] [init -> vmlinux.1] BSS: 0240a000 - 02446de8 [243kB] [init -> vmlinux.2] CPU mapping (l:p)[0]: Image: 02000000 - 02500000 [5120 KiB]. [init -> vmlinux.2] Areas: Text: 02000000 - 023dc000 [3952kB] (a bit longer) [init -> vmlinux.2] Data: 023dc000 - 024091b8 [180kB] [init -> vmlinux.2] Initdata: 023b4000 - 023da9c0 [154kB] [init -> vmlinux.2] BSS: 0240a000 - 02446de8 [243kB] [init -> usb_drv] Using configured mac: 02:00:00:00:01:01 [init -> usb_drv] void platform_hcd_init(Services*): register platform device [init -> usb_drv] dev_info: EHCI Host Controller [init -> usb_drv] dev_info: new USB bus registered, assigned bus number 1 [init -> usb_drv] dev_info: irq 109, io mem 0x4a064c00 [init -> usb_drv] dev_info: USB 2.0 started, EHCI 1.00 [init -> usb_drv] dev_info: USB hub found [init -> usb_drv] dev_info: 3 ports detected [init -> nitpicker] Could not open file "config" [init -> nitpicker] Could not obtain config file [init -> nitpicker] create session with args: label="linux.1", ram_quota=28672 [init -> nitpicker] create session with args: label="linux.2", ram_quota=28672 [init -> vmlinux.1] l4io_get_root_device: Not implemented yet! [init -> vmlinux.1] Device scan: [init -> vmlinux.1] l4io_iterate_devices: Not implemented yet! [init -> vmlinux.1] Device scan done. [init -> vmlinux.2] l4io_get_root_device: Not implemented yet! [init -> vmlinux.2] Device scan: [init -> vmlinux.2] l4io_iterate_devices: Not implemented yet! [init -> vmlinux.2] Device scan done. [init -> usb_drv] dev_info: new high-speed USB device number 2 using ehci-omap [init -> linux.1] using xywh=(1,1,510,382) [init -> linux.2] using xywh=(513,513,510,382) [init -> vmlinux.1] main thread will be c [init -> vmlinux.1] l4x_register_pointer_section: addr = 02000000 size = 5242880 [init -> vmlinux.1] section-with-init: virt: 2000000 to 24fffff [5120 KiB] [init -> vmlinux.1] Cannot determine physical address for dataspace Binary! [init -> vmlinux.1] error: failed to get physical address for 2000000. [init -> vmlinux.1] thread=c000 cpu=0 [init -> vmlinux.1] L4x: Setting superpages for main memory [init -> vmlinux.1] Main memory size: 254MB [init -> vmlinux.1] Adjusted memory start: 02000000 [init -> vmlinux.1] Main thread running, waiting... [init -> vmlinux.2] main thread will be c [init -> vmlinux.2] l4x_register_pointer_section: addr = 02000000 size = 5242880 [init -> vmlinux.2] section-with-init: virt: 2000000 to 24fffff [5120 KiB] [init -> vmlinux.2] Cannot determine physical address for dataspace Binary! [init -> vmlinux.2] error: failed to get physical address for 2000000. [init -> vmlinux.2] thread=c000 cpu=0 [init -> vmlinux.2] L4x: Setting superpages for main memory [init -> vmlinux.2] Main memory size: 254MB [init -> vmlinux.2] Adjusted memory start: 02000000 [init -> vmlinux.2] Main thread running, waiting... [init -> usb_drv] dev_info: USB hub found unmapping of managed dataspaces not yet supported [init -> vmlinux.1] Main memory: virt: 3600000 to 133fffff [260096 KiB] [init -> usb_drv] dev_info: 5 ports detected unmapping of managed dataspaces not yet supported [init -> vmlinux.2] Main memory: virt: 3600000 to 133fffff [260096 KiB] [init -> vmlinux.2] Main memory: Phys: 0x00000000 to 0x0fe00000, Size: 266338304 [init -> vmlinux.1] Main memory: Phys: 0x00000000 to 0x0fe00000, Size: 266338304 [init -> vmlinux.1] l4x: vmalloc area: 13800000 - 1b800000 [init -> vmlinux.1] l4x_register_pointer_section: addr = 02000000 size = 5242880 [init -> vmlinux.1] text: virt: 2000000 to 24fffff [5120 KiB] [init -> vmlinux.1] Cannot determine physical address for dataspace Binary! [init -> vmlinux.1] error: failed to get physical address for 2000000. [init -> vmlinux.2] l4x: vmalloc area: 13800000 - 1b800000 [init -> vmlinux.2] l4x_register_pointer_section: addr = 02000000 size = 5242880 [init -> vmlinux.2] text: virt: 2000000 to 24fffff [5120 KiB] [init -> vmlinux.2] Cannot determine physical address for dataspace Binary! [init -> vmlinux.2] error: failed to get physical address for 2000000. [init -> vmlinux.1] l4x_virt_to_phys: Could not translate virt. address 2000000 [init -> vmlinux.1] l4x_virt_to_phys: Could not translate virt. address 23b305f [init -> vmlinux.1] l4x_virt_to_phys: Could not translate virt. address 23dc000 [init -> vmlinux.1] l4x_virt_to_phys: Could not translate virt. address 2446de7 [init -> vmlinux.1] l4x_virt_to_phys: Could not translate virt. address 2000000 [init -> vmlinux.1] l4x_virt_to_phys: Could not translate virt. address 24fffff [init -> vmlinux.1] l4x_rd_path: initrd.gz [init -> vmlinux.1] Loading: initrd.gz [init -> vmlinux.2] l4x_virt_to_phys: Could not translate virt. address 2000000 [init -> vmlinux.2] l4x_virt_to_phys: Could not translate virt. address 23b305f [init -> vmlinux.2] l4x_virt_to_phys: Could not translate virt. address 23dc000 [init -> vmlinux.2] l4x_virt_to_phys: Could not translate virt. address 2446de7 [init -> vmlinux.2] l4x_virt_to_phys: Could not translate virt. address 2000000 [init -> vmlinux.2] l4x_virt_to_phys: Could not translate virt. address 24fffff [init -> vmlinux.2] l4x_rd_path: initrd.gz [init -> vmlinux.2] Loading: initrd.gz [init -> vmlinux.1] INITRD: Size of RAMdisk is 6412KiB [init -> vmlinux.1] RAMdisk from 00005000 to 00648000 [6412KiB] [init -> vmlinux.2] INITRD: Size of RAMdisk is 6412KiB [init -> vmlinux.2] RAMdisk from 00005000 to 00648000 [6412KiB] [init -> usb_drv] dev_info: new high-speed USB device number 3 using ehci-omap [init -> vmlinux.1] l4timer: Using IRQ210 [init] vmlinux.1: no route to service "Terminal" [init -> vmlinux.2] l4timer: Using IRQ210 [init] vmlinux.2: no route to service "Terminal" [init -> vmlinux.1] l4x_virt_to_phys: Could not translate virt. address 229c5b8 [init -> vmlinux.1] l4x_virt_to_phys: Could not translate virt. address 229c5b8 [init -> vmlinux.2] l4x_virt_to_phys: Could not translate virt. address 229c5b8 [init -> vmlinux.2] l4x_virt_to_phys: Could not translate virt. address 229c5b8 [init -> vmlinux.1] l4io_get_root_device: Not implemented yet! [init -> vmlinux.1] l4io_iterate_devices: Not implemented yet! [init -> vmlinux.2] l4io_get_root_device: Not implemented yet! [init -> vmlinux.2] l4io_iterate_devices: Not implemented yet! [init -> usb_drv] Using configured mac: 02:00:00:00:01:01 no RM attachment (READ pf_addr=40000 pf_ip=22ac510 from 3e2000) virtual void Genode::Signal_session_component::submit(Genode::Signal_context_cay virtual void Genode::Pager_activation_base::entry(): Could not resolve pf=400000 no RM attachment (READ pf_addr=40000 pf_ip=22ac510 from 3bc000) virtual void Genode::Signal_session_component::submit(Genode::Signal_context_cay virtual void Genode::Pager_activation_base::entry(): Could not resolve pf=400000 [init -> usb_drv] netif_info: open: enable queueing (rx 4, tx 60) mtu 1500 simpg [init -> usb_drv] nedev_info: hardware isn't capable of remote wakeup [init -> usb_drv] netif_info: register 'smsc95xx' at usb-ehci-omap-1.1, smsc95xM
So What's wrong with my script?
Best, Zachary
Hello,
On 02/28/2015 07:44 AM, Zachary wrote:
Hi Stefan, Thanks for your help. I write my own two_linux_panda run script, but still have some problem when run the image created by this script: there is only one grey enmpty window on top-left of the screen.
This is my run script:
assert_spec foc assert_spec platform_panda
# # Build # build { core init drivers/timer drivers/framebuffer drivers/sd_card drivers/usb drivers/gpio server/nic_bridge server/part_blk server/nitpicker server/nit_fb l4linux }
create_boot_directory
# # Config # set config {
<config prio_levels="2"> <parent-provides> <service name="ROM"/> <service name="RAM"/> <service name="IRQ"/> <service name="IO_MEM"/> <service name="IO_PORT"/> <service name="CAP"/> <service name="PD"/> <service name="RM"/> <service name="CPU"/> <service name="LOG"/> <service name="SIGNAL"/> </parent-provides> <default-route> <any-service> <parent/> <any-child/> </any-service> </default-route> <start name="timer" priority="0"> <resource name="RAM" quantum="1M"/> <provides><service name="Timer"/></provides> </start> <start name="fb_drv" priority="-1"> <resource name="RAM" quantum="4M"/> <provides><service name="Framebuffer"/></provides> </start> <start name="sd_card_drv" priority="0"> <resource name="RAM" quantum="4M"/> <provides><service name="Block"/></provides> </start> <start name="gpio_drv"> <resource name="RAM" quantum="4M"/> <provides><service name="Gpio"/></provides> <config/> </start> <start name="usb_drv" priority="-1"> <resource name="RAM" quantum="12M"/> <provides> <service name="Input"/> <service name="Nic"/> </provides> <config ehci="yes"> <hid/> <nic mac="02:00:00:00:01:01" /> </config> </start> <!--<start name="part_blk"> <resource name="RAM" quantum="2M"/> <provides><service name="Block"/></provides> <config> <policy label="vmlinux.1 -> sda" partition="1" /> <policy label="vmlinux.2 -> sda" partition="2" /> <policy label="test-libc_ffat" partition="3" /> </config> <route> <service name="Block"> <child name="sd_card_drv"/> </service> <any-service> <parent/> <any-child/> </any-service> </route> </start>--> <!--<start name="nic_bridge" priority="-1"> <resource name="RAM" quantum="2M"/> <provides><service name="Nic"/></provides> <route> <service name="Nic"> <child name="usb_drv"/> </service> <any-service> <parent/> <any-child/> </any-service> </route> </start>-->
<start name="nitpicker"> <resource name="RAM" quantum="2M"/> <provides><service name="Nitpicker"/></provides> <route> <service name="Input"> <child name="usb_drv"/> </service> <service name="Framebuffer"> <child name="fb_drv"/> </service> <any-service> <parent/> <any-child/> </any-service> </route> </start>
<start name="linux.1"> <binary name="nit_fb"/> <resource name="RAM" quantum="4M"/> <provides> <service name="Framebuffer"/> <service name="Input"/> </provides> <config xpos="1" ypos="0" width="510" height="382"/> </start> <start name="linux.2"> <binary name="nit_fb"/> <resource name="RAM" quantum="4M"/> <provides> <service name="Framebuffer"/> <service name="Input"/> </provides> <config xpos="513" ypos="0" width="510" height="382"/> </start>
<start name="vmlinux.1" priority="-1"> <binary name="l4linux"/> <resource name="RAM" quantum="296M"/> <config args="mem=254M l4x_rd=initrd.gz"> <block label="sda" /> </config> <route> <service name="Block"> <child name="sd_card_drv"/> </service> <service name="Input"> <child name="linux.1"/> </service> <service name="Framebuffer"> <child name="linux.1"/> </service> <!--<service name="Nic"> <child name="nic_bridge"/> </service>--> <any-service> <any-child/> <parent/> </any-service> </route> </start> <start name="vmlinux.2" priority="-1"> <binary name="l4linux"/> <resource name="RAM" quantum="296M"/> <config args="mem=254M l4x_rd=initrd.gz"> <block label="sda" /> </config> <route> <service name="Block"> <child name="sd_card_drv"/> </service> <service name="Input"> <child name="linux.2"/> </service> <service name="Framebuffer"> <child name="linux.2"/> </service> <!--<service name="Nic"> <child name="nic_bridge"/> </service>--> <any-service> <any-child/> <parent/> </any-service> </route> </start> </config>}
install_config $config
# # Boot modules # set boot_modules { core init timer nic_bridge nitpicker nit_fb part_blk l4linux initrd.gz fb_drv sd_card_drv gpio_drv usb_drv }
set uri "http://genode.org/files/l4linux/busybox-initrd-arm-20120710.gz" if {![file exists bin/initrd.gz]} { puts "Download initramfs ..." exec >& /dev/null wget -c -O bin/initrd.gz $uri } exec >& /dev/null wget -O bin/initrd.gz.md5 $uri.md5 cd bin exec md5sum -c initrd.gz.md5 cd ..
build_boot_image [join $boot_modules " "]
There is one obvious problem in your current configuration: that you use one SD-card driver for both Linux instances. That will not work, as one block driver can serve exactly one client. Either re-enable the part_blk multiplexer again, or leave out block drivers in general. Linux can also boot just into an initramfs without any block device. The same applies for network. A NIC driver, in this case the usb_drv cannot serve more than one client. If you want to share one network device, you have to use the nic_bridge here.
Nevertheless, both configuration issues are not the main issue that prevent both linux instances from booting. For the main issue, please see below.
This is the log:
... Genode 14.11 int main(): --- create local services --- int main(): --- start init --- int main(): transferred 992 MB to init int main(): --- init created, waiting for exit condition --- [init] Could not open file "ld.lib.so" Quota exceeded! amount=28672, size=4096, consumed=28672 [init] upgrading quota donation for Env::CPU (8192 bytes) [init -> gpio_drv] --- omap4 gpio driver --- [init -> sd_card_drv] --- OMAP4 SD card driver --- [init -> gpio_drv] No GPIO config [init -> fb_drv] Could not open file "config" [init -> fb_drv] Could not obtain config file [init -> fb_drv] int main(int, char**): using default configuration: HDMI@...305... [init -> vmlinux.2] Booting L4Linux ... [init -> vmlinux.1] Booting L4Linux ... [init -> usb_drv] Services::Services(): Could not read screen resolution in cone [init -> usb_drv] Services::Services(): No <storage> config node found - not ste [init -> usb_drv] Services::Services(): No <raw> config node found - not startie [init -> usb_drv] Enabled EHCI (USB 2.0) support [init -> vmlinux.1] ======> L4Linux starting... <======== [init -> vmlinux.2] ======> L4Linux starting... <======== [init -> vmlinux.1] Linux version 3.9.0-l4-gf2eebae (czzcz@...306...) (gcc5 [init -> vmlinux.2] Linux version 3.9.0-l4-gf2eebae (czzcz@...306...) (gcc5 [init -> vmlinux.1] Binary name: vmlinux [init -> vmlinux.1] This is an AEABI build. [init -> vmlinux.2] Binary name: vmlinux [init -> vmlinux.2] This is an AEABI build. [init -> vmlinux.1] Linux kernel command line (2 args): mem=254M l4x_rd=initrd.z [init -> vmlinux.2] Linux kernel command line (2 args): mem=254M l4x_rd=initrd.z [init -> vmlinux.1] CPU mapping (l:p)[0]: Image: 02000000 - 02500000 [5120 KiB]. [init -> vmlinux.1] Areas: Text: 02000000 - 023dc000 [3952kB] (a bit longer) [init -> vmlinux.1] Data: 023dc000 - 024091b8 [180kB] [init -> vmlinux.1] Initdata: 023b4000 - 023da9c0 [154kB] [init -> vmlinux.1] BSS: 0240a000 - 02446de8 [243kB] [init -> vmlinux.2] CPU mapping (l:p)[0]: Image: 02000000 - 02500000 [5120 KiB]. [init -> vmlinux.2] Areas: Text: 02000000 - 023dc000 [3952kB] (a bit longer) [init -> vmlinux.2] Data: 023dc000 - 024091b8 [180kB] [init -> vmlinux.2] Initdata: 023b4000 - 023da9c0 [154kB] [init -> vmlinux.2] BSS: 0240a000 - 02446de8 [243kB] [init -> usb_drv] Using configured mac: 02:00:00:00:01:01 [init -> usb_drv] void platform_hcd_init(Services*): register platform device [init -> usb_drv] dev_info: EHCI Host Controller [init -> usb_drv] dev_info: new USB bus registered, assigned bus number 1 [init -> usb_drv] dev_info: irq 109, io mem 0x4a064c00 [init -> usb_drv] dev_info: USB 2.0 started, EHCI 1.00 [init -> usb_drv] dev_info: USB hub found [init -> usb_drv] dev_info: 3 ports detected [init -> nitpicker] Could not open file "config" [init -> nitpicker] Could not obtain config file [init -> nitpicker] create session with args: label="linux.1", ram_quota=28672 [init -> nitpicker] create session with args: label="linux.2", ram_quota=28672 [init -> vmlinux.1] l4io_get_root_device: Not implemented yet! [init -> vmlinux.1] Device scan: [init -> vmlinux.1] l4io_iterate_devices: Not implemented yet! [init -> vmlinux.1] Device scan done. [init -> vmlinux.2] l4io_get_root_device: Not implemented yet! [init -> vmlinux.2] Device scan: [init -> vmlinux.2] l4io_iterate_devices: Not implemented yet! [init -> vmlinux.2] Device scan done. [init -> usb_drv] dev_info: new high-speed USB device number 2 using ehci-omap [init -> linux.1] using xywh=(1,1,510,382) [init -> linux.2] using xywh=(513,513,510,382) [init -> vmlinux.1] main thread will be c [init -> vmlinux.1] l4x_register_pointer_section: addr = 02000000 size = 5242880 [init -> vmlinux.1] section-with-init: virt: 2000000 to 24fffff [5120 KiB] [init -> vmlinux.1] Cannot determine physical address for dataspace Binary! [init -> vmlinux.1] error: failed to get physical address for 2000000. [init -> vmlinux.1] thread=c000 cpu=0 [init -> vmlinux.1] L4x: Setting superpages for main memory [init -> vmlinux.1] Main memory size: 254MB [init -> vmlinux.1] Adjusted memory start: 02000000 [init -> vmlinux.1] Main thread running, waiting... [init -> vmlinux.2] main thread will be c [init -> vmlinux.2] l4x_register_pointer_section: addr = 02000000 size = 5242880 [init -> vmlinux.2] section-with-init: virt: 2000000 to 24fffff [5120 KiB] [init -> vmlinux.2] Cannot determine physical address for dataspace Binary! [init -> vmlinux.2] error: failed to get physical address for 2000000. [init -> vmlinux.2] thread=c000 cpu=0 [init -> vmlinux.2] L4x: Setting superpages for main memory [init -> vmlinux.2] Main memory size: 254MB [init -> vmlinux.2] Adjusted memory start: 02000000 [init -> vmlinux.2] Main thread running, waiting... [init -> usb_drv] dev_info: USB hub found unmapping of managed dataspaces not yet supported [init -> vmlinux.1] Main memory: virt: 3600000 to 133fffff [260096 KiB] [init -> usb_drv] dev_info: 5 ports detected unmapping of managed dataspaces not yet supported [init -> vmlinux.2] Main memory: virt: 3600000 to 133fffff [260096 KiB] [init -> vmlinux.2] Main memory: Phys: 0x00000000 to 0x0fe00000, Size: 266338304 [init -> vmlinux.1] Main memory: Phys: 0x00000000 to 0x0fe00000, Size: 266338304 [init -> vmlinux.1] l4x: vmalloc area: 13800000 - 1b800000 [init -> vmlinux.1] l4x_register_pointer_section: addr = 02000000 size = 5242880 [init -> vmlinux.1] text: virt: 2000000 to 24fffff [5120 KiB] [init -> vmlinux.1] Cannot determine physical address for dataspace Binary! [init -> vmlinux.1] error: failed to get physical address for 2000000. [init -> vmlinux.2] l4x: vmalloc area: 13800000 - 1b800000 [init -> vmlinux.2] l4x_register_pointer_section: addr = 02000000 size = 5242880 [init -> vmlinux.2] text: virt: 2000000 to 24fffff [5120 KiB] [init -> vmlinux.2] Cannot determine physical address for dataspace Binary! [init -> vmlinux.2] error: failed to get physical address for 2000000. [init -> vmlinux.1] l4x_virt_to_phys: Could not translate virt. address 2000000 [init -> vmlinux.1] l4x_virt_to_phys: Could not translate virt. address 23b305f [init -> vmlinux.1] l4x_virt_to_phys: Could not translate virt. address 23dc000 [init -> vmlinux.1] l4x_virt_to_phys: Could not translate virt. address 2446de7 [init -> vmlinux.1] l4x_virt_to_phys: Could not translate virt. address 2000000 [init -> vmlinux.1] l4x_virt_to_phys: Could not translate virt. address 24fffff [init -> vmlinux.1] l4x_rd_path: initrd.gz [init -> vmlinux.1] Loading: initrd.gz [init -> vmlinux.2] l4x_virt_to_phys: Could not translate virt. address 2000000 [init -> vmlinux.2] l4x_virt_to_phys: Could not translate virt. address 23b305f [init -> vmlinux.2] l4x_virt_to_phys: Could not translate virt. address 23dc000 [init -> vmlinux.2] l4x_virt_to_phys: Could not translate virt. address 2446de7 [init -> vmlinux.2] l4x_virt_to_phys: Could not translate virt. address 2000000 [init -> vmlinux.2] l4x_virt_to_phys: Could not translate virt. address 24fffff [init -> vmlinux.2] l4x_rd_path: initrd.gz [init -> vmlinux.2] Loading: initrd.gz [init -> vmlinux.1] INITRD: Size of RAMdisk is 6412KiB [init -> vmlinux.1] RAMdisk from 00005000 to 00648000 [6412KiB] [init -> vmlinux.2] INITRD: Size of RAMdisk is 6412KiB [init -> vmlinux.2] RAMdisk from 00005000 to 00648000 [6412KiB] [init -> usb_drv] dev_info: new high-speed USB device number 3 using ehci-omap [init -> vmlinux.1] l4timer: Using IRQ210 [init] vmlinux.1: no route to service "Terminal" [init -> vmlinux.2] l4timer: Using IRQ210 [init] vmlinux.2: no route to service "Terminal" [init -> vmlinux.1] l4x_virt_to_phys: Could not translate virt. address 229c5b8 [init -> vmlinux.1] l4x_virt_to_phys: Could not translate virt. address 229c5b8 [init -> vmlinux.2] l4x_virt_to_phys: Could not translate virt. address 229c5b8 [init -> vmlinux.2] l4x_virt_to_phys: Could not translate virt. address 229c5b8 [init -> vmlinux.1] l4io_get_root_device: Not implemented yet! [init -> vmlinux.1] l4io_iterate_devices: Not implemented yet! [init -> vmlinux.2] l4io_get_root_device: Not implemented yet! [init -> vmlinux.2] l4io_iterate_devices: Not implemented yet! [init -> usb_drv] Using configured mac: 02:00:00:00:01:01 no RM attachment (READ pf_addr=40000 pf_ip=22ac510 from 3e2000) virtual void Genode::Signal_session_component::submit(Genode::Signal_context_cay virtual void Genode::Pager_activation_base::entry(): Could not resolve pf=400000 no RM attachment (READ pf_addr=40000 pf_ip=22ac510 from 3bc000) virtual void Genode::Signal_session_component::submit(Genode::Signal_context_cay virtual void Genode::Pager_activation_base::entry(): Could not resolve pf=400000
Here, we can see the main problem. Both L4Linux instances are causing a pagefault at instruction address 0x22ac510. The pagefault address is 0x40000. When looking at the disassembled code, it turns out the pagefault happens when touching the framebuffer given to L4Linux. L4Linux access to a native framebuffer driver in general is working, but not using more recent GUI servers like 'nit_fb'. This was not tested in more recent time. I have opened a related issue:
https://github.com/genodelabs/genode/issues/1427
Please, try out the attached patch, by applying it via:
patch -p1 < framebuffer.patch
within your Genode repository.
Regards Stefan
[init -> usb_drv] netif_info: open: enable queueing (rx 4, tx 60) mtu 1500 simpg [init -> usb_drv] nedev_info: hardware isn't capable of remote wakeup [init -> usb_drv] netif_info: register 'smsc95xx' at usb-ehci-omap-1.1, smsc95xM
So What's wrong with my script?
Best, Zachary
Dive into the World of Parallel Programming The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net/ _______________________________________________ genode-main mailing list genode-main@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/genode-main
Hello,
Thanks again for your work.
I have applied your patch, and the instances run correctly.
However, there is only one linux widow showing on top-left of the screen. This is my config of nit_fb: ... <start name="linux.1"> <binary name="nit_fb"/> <resource name="RAM" quantum="4M"/> <provides> <service name="Framebuffer"/> <service name="Input"/> </provides> <config xpos="1" ypos="0" width="510" height="382"/> </start> <start name="linux.2"> <binary name="nit_fb"/> <resource name="RAM" quantum="4M"/> <provides> <service name="Framebuffer"/> <service name="Input"/> </provides> <config xpos="513" ypos="0" width="510" height="382"/> </start> ...
It is very strange that the output of the log is different from my config: ... [init -> linux.2] using xywh=(513,513,510,382) [init -> linux.1] using xywh=(1,1,510,382) ...
That is the whole run script:
assert_spec foc assert_spec platform_panda
# # Build # build { core init drivers/timer drivers/framebuffer drivers/sd_card drivers/usb drivers/gpio server/nic_bridge server/part_blk server/nitpicker server/nit_fb l4linux }
create_boot_directory
# # Config # set config { <config prio_levels="2"> <parent-provides> <service name="ROM"/> <service name="RAM"/> <service name="IRQ"/> <service name="IO_MEM"/> <service name="IO_PORT"/> <service name="CAP"/> <service name="PD"/> <service name="RM"/> <service name="CPU"/> <service name="LOG"/> <service name="SIGNAL"/> </parent-provides> <default-route> <any-service> <parent/> <any-child/> </any-service> </default-route> <start name="timer" priority="0"> <resource name="RAM" quantum="1M"/> <provides><service name="Timer"/></provides> </start> <start name="fb_drv" priority="-1"> <resource name="RAM" quantum="4M"/> <provides><service name="Framebuffer"/></provides> </start> <start name="sd_card_drv" priority="0"> <resource name="RAM" quantum="4M"/> <provides><service name="Block"/></provides> </start> <start name="gpio_drv"> <resource name="RAM" quantum="4M"/> <provides><service name="Gpio"/></provides> <config/> </start> <start name="usb_drv" priority="-1"> <resource name="RAM" quantum="12M"/> <provides> <service name="Input"/> <service name="Nic"/> </provides> <config ehci="yes"> <hid/> <nic mac="02:00:00:00:01:01" /> </config> </start> <start name="part_blk"> <resource name="RAM" quantum="2M"/> <provides><service name="Block"/></provides> <config> <policy label="vmlinux.1 -> sda" partition="1" /> <policy label="vmlinux.2 -> sda" partition="2" /> </config> <route> <service name="Block"> <child name="sd_card_drv"/> </service> <any-service> <parent/> <any-child/> </any-service> </route> </start> <start name="nic_bridge" priority="-1"> <resource name="RAM" quantum="2M"/> <provides><service name="Nic"/></provides> <route> <service name="Nic"> <child name="usb_drv"/> </service> <any-service> <parent/> <any-child/> </any-service> </route> </start> <start name="nitpicker" priority="-1"> <resource name="RAM" quantum="2M"/> <provides><service name="Nitpicker"/></provides> <route> <service name="Input"> <child name="usb_drv"/> </service> <service name="Framebuffer"> <child name="fb_drv"/> </service> <any-service> <parent/> <any-child/> </any-service> </route> </start> <start name="linux.1" priority="-1"> <binary name="nit_fb"/> <resource name="RAM" quantum="4M"/> <provides> <service name="Framebuffer"/> <service name="Input"/> </provides> <config xpos="1" ypos="0" width="510" height="382"/> </start> <start name="linux.2" priority="-1"> <binary name="nit_fb"/> <resource name="RAM" quantum="4M"/> <provides> <service name="Framebuffer"/> <service name="Input"/> </provides> <config xpos="513" ypos="0" width="510" height="382"/> </start>
<start name="vmlinux.1" priority="-1"> <binary name="l4linux"/> <resource name="RAM" quantum="96M"/> <config args="mem=254M l4x_rd=initrd.gz"> <block label="sda" /> </config> <route> <service name="Block"> <child name="part_blk"/> </service> <service name="Input"> <child name="linux.1"/> </service> <service name="Framebuffer"> <child name="linux.1"/> </service> <service name="Nic"> <child name="nic_bridge"/> </service> <any-service> <any-child/> <parent/> </any-service> </route> </start> <start name="vmlinux.2" priority="-1"> <binary name="l4linux"/> <resource name="RAM" quantum="96M"/> <config args="mem=254M l4x_rd=initrd.gz"> <block label="sda" /> </config> <route> <service name="Block"> <child name="part_blk"/> </service> <service name="Input"> <child name="linux.2"/> </service> <service name="Framebuffer"> <child name="linux.2"/> </service> <service name="Nic"> <child name="nic_bridge"/> </service> <any-service> <any-child/> <parent/> </any-service> </route> </start> </config>}
install_config $config
# # Boot modules # set boot_modules { core init timer nic_bridge nitpicker nit_fb part_blk l4linux initrd.gz fb_drv sd_card_drv gpio_drv usb_drv }
set uri "http://genode.org/files/l4linux/busybox-initrd-arm-20120710.gz" if {![file exists bin/initrd.gz]} { puts "Download initramfs ..." exec >& /dev/null wget -c -O bin/initrd.gz $uri } exec >& /dev/null wget -O bin/initrd.gz.md5 $uri.md5 cd bin exec md5sum -c initrd.gz.md5 cd ..
build_boot_image [join $boot_modules " "] ------------------------------------------------------------------------------
Is there somethig wrong with it?
Best, Zachary
Hi Zachary,
On 03/04/2015 08:27 AM, Zachary wrote:
Hello,
Thanks again for your work.
I have applied your patch, and the instances run correctly.
However, there is only one linux widow showing on top-left of the screen. This is my config of nit_fb: ...
<start name="linux.1"> <binary name="nit_fb"/> <resource name="RAM" quantum="4M"/> <provides> <service name="Framebuffer"/> <service name="Input"/> </provides> <config xpos="1" ypos="0" width="510" height="382"/> </start> <start name="linux.2"> <binary name="nit_fb"/> <resource name="RAM" quantum="4M"/> <provides> <service name="Framebuffer"/> <service name="Input"/> </provides> <config xpos="513" ypos="0" width="510" height="382"/> </start> ...
It is very strange that the output of the log is different from my config: ... [init -> linux.2] using xywh=(513,513,510,382) [init -> linux.1] using xywh=(1,1,510,382) ...
Indeed this is strange. I have reproduced your issue. The problem is that since Genode 14.08 we have a completely new GUI architecture. Thereby, the framebuffer multiplexer "nitpicker" was minimized even more, excluding the mouse pointer and statusbar from it. Moreover, nitpicker now correlates its clients to configured domains.
In your example no domain is defined in nitpickers configuration at all. To me the observed outcome, which is both nit_fb frames are located at offset 0,0 of the screen, looks like unintended behavior. Either nitpicker should decline to visualize clients it cannot relate to a domain (and warn about it), or it should use a default domain even if this is not stated explicitly. Maybe Norman (author of the whole graphic stack) can add whether this is expected behavior?
Anyway, if you declare a default domain in nitpickers configuration, everything works fine. Just add the following snippet to the nitpicker start entry:
<config> <domain name="" layer="1"/> <policy label="" domain=""/> </config>
Nevertheless, even when adding above snippet to your configuration, you will miss a mouse-pointer and statusbar. If you want to have any of those, you might have a look at the "repos/os/run/demo.run" script, and copy out the configuration of "nitpicker", "report_rom", "status_bar", and "pointer" from there. This way you will gain a setup that is almost identically to the old nitpicker used within the ancient two_linux_panda.run script.
Regards Stefan
That is the whole run script:
assert_spec foc assert_spec platform_panda
# # Build # build { core init drivers/timer drivers/framebuffer drivers/sd_card drivers/usb drivers/gpio server/nic_bridge server/part_blk server/nitpicker server/nit_fb l4linux }
create_boot_directory
# # Config # set config {
<config prio_levels="2"> <parent-provides> <service name="ROM"/> <service name="RAM"/> <service name="IRQ"/> <service name="IO_MEM"/> <service name="IO_PORT"/> <service name="CAP"/> <service name="PD"/> <service name="RM"/> <service name="CPU"/> <service name="LOG"/> <service name="SIGNAL"/> </parent-provides> <default-route> <any-service> <parent/> <any-child/> </any-service> </default-route> <start name="timer" priority="0"> <resource name="RAM" quantum="1M"/> <provides><service name="Timer"/></provides> </start> <start name="fb_drv" priority="-1"> <resource name="RAM" quantum="4M"/> <provides><service name="Framebuffer"/></provides> </start> <start name="sd_card_drv" priority="0"> <resource name="RAM" quantum="4M"/> <provides><service name="Block"/></provides> </start> <start name="gpio_drv"> <resource name="RAM" quantum="4M"/> <provides><service name="Gpio"/></provides> <config/> </start> <start name="usb_drv" priority="-1"> <resource name="RAM" quantum="12M"/> <provides> <service name="Input"/> <service name="Nic"/> </provides> <config ehci="yes"> <hid/> <nic mac="02:00:00:00:01:01" /> </config> </start> <start name="part_blk"> <resource name="RAM" quantum="2M"/> <provides><service name="Block"/></provides> <config> <policy label="vmlinux.1 -> sda" partition="1" /> <policy label="vmlinux.2 -> sda" partition="2" /> </config> <route> <service name="Block"> <child name="sd_card_drv"/> </service> <any-service> <parent/> <any-child/> </any-service> </route> </start> <start name="nic_bridge" priority="-1"> <resource name="RAM" quantum="2M"/> <provides><service name="Nic"/></provides> <route> <service name="Nic"> <child name="usb_drv"/> </service> <any-service> <parent/> <any-child/> </any-service> </route> </start>
<start name="nitpicker" priority="-1"> <resource name="RAM" quantum="2M"/> <provides><service name="Nitpicker"/></provides> <route> <service name="Input"> <child name="usb_drv"/> </service> <service name="Framebuffer"> <child name="fb_drv"/> </service> <any-service> <parent/> <any-child/> </any-service> </route> </start>
<start name="linux.1" priority="-1"> <binary name="nit_fb"/> <resource name="RAM" quantum="4M"/> <provides> <service name="Framebuffer"/> <service name="Input"/> </provides> <config xpos="1" ypos="0" width="510" height="382"/> </start> <start name="linux.2" priority="-1"> <binary name="nit_fb"/> <resource name="RAM" quantum="4M"/> <provides> <service name="Framebuffer"/> <service name="Input"/> </provides> <config xpos="513" ypos="0" width="510" height="382"/> </start>
<start name="vmlinux.1" priority="-1"> <binary name="l4linux"/> <resource name="RAM" quantum="96M"/> <config args="mem=254M l4x_rd=initrd.gz"> <block label="sda" /> </config> <route> <service name="Block"> <child name="part_blk"/> </service> <service name="Input"> <child name="linux.1"/> </service> <service name="Framebuffer"> <child name="linux.1"/> </service> <service name="Nic"> <child name="nic_bridge"/> </service> <any-service> <any-child/> <parent/> </any-service> </route> </start> <start name="vmlinux.2" priority="-1"> <binary name="l4linux"/> <resource name="RAM" quantum="96M"/> <config args="mem=254M l4x_rd=initrd.gz"> <block label="sda" /> </config> <route> <service name="Block"> <child name="part_blk"/> </service> <service name="Input"> <child name="linux.2"/> </service> <service name="Framebuffer"> <child name="linux.2"/> </service> <service name="Nic"> <child name="nic_bridge"/> </service> <any-service> <any-child/> <parent/> </any-service> </route> </start> </config>}
install_config $config
# # Boot modules # set boot_modules { core init timer nic_bridge nitpicker nit_fb part_blk l4linux initrd.gz fb_drv sd_card_drv gpio_drv usb_drv }
set uri "http://genode.org/files/l4linux/busybox-initrd-arm-20120710.gz" if {![file exists bin/initrd.gz]} { puts "Download initramfs ..." exec >& /dev/null wget -c -O bin/initrd.gz $uri } exec >& /dev/null wget -O bin/initrd.gz.md5 $uri.md5 cd bin exec md5sum -c initrd.gz.md5 cd ..
build_boot_image [join $boot_modules " "]
Is there somethig wrong with it?
Best, Zachary
Dive into the World of Parallel Programming The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net/ _______________________________________________ genode-main mailing list genode-main@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/genode-main