How to run two_linux_panda
Stefan Kalkowski
stefan.kalkowski at ...1...
Wed Feb 11 11:28:25 CET 2015
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 at ...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 at ...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 at ...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?
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_systems
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
> 2. 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.pdf
> 3. 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 at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/genode-main
>
--
Stefan Kalkowski
Genode Labs
http://www.genode-labs.com/ ยท http://genode.org/
More information about the users
mailing list