Dear Genode Community, This is my first message, and actually first contact with microkernel world. I beg your patience in this first time. I am on the application development & integration deployment side. I have been thinking long ago about the possibility of tailoring a software environment with the very basic stuff (code) demanded by specific application domain. I work with mission safe-critical automation domain, and the applications are basically regarded algorithms / computation / networking. GUI can be splitted ou very basic. Using Linux as base OS provide what is needed, but together with a bunch of unecessary code / packages that increase the unrealiability of the overall final system. Now, having learn the important concept of isolating security-critical functions, in order to avoid security breach from the very ground,I got excited about the idea to bring the applications I work with in such scenario. And particularly to explore virtualization with the least possible software overhead. I did a survey on microkernel, microhypervisor. Found L4-based Fiasco-OC and then NOVA. I was still a little skeptical because of the low level knowledge required. Genode gave me the light I was looking for. Specially when I saw the porting of Qt5, which actually I use long time. With Qt5 integration I am very close to my objective. However, I still demand to integrate a 3-rd party software, namely, to port OpenDDS to Genode. I dig into the manual:http://genode.org/files/53bcb8e33fe6602fed25edc3c7b922c5/manual-2015-04-27.p... and genode site. I did the manual hello world example, built some environments (NOVA, Fiasco.OC), run the demo. Everything worked fine with QEMU. With Qt5 examples I was not successful yet, though. But before I can move on, I need to integrate an external library. My question / doubt is regarding porting an external Library:http://genode.org/documentation/developer-resources/porting_applications
Specifically, OpenDDS3.6 which relies on ACE-TAO2.2a:http://download.ociweb.com/TAO-2.2a/ACE+TAO-2.2a_with_latest_patches_NO_make... I create a specific repo inside repos, and did the port files. The make prepare worked with no problems. But then come the challenging part: 1) Adapting Makefiles /Config files to Genode specific platform. ACE-TAO need a specific config and platform files. There are examples for linux, free and openbsd, vxworks, qnx, vxworks, lynxos. From which should I start from? 2) Creation of the patches. How to create the patches? Just with diff -crNb? 3) Building specific tools. ACE-TAO and OpenDDS rely on specific tools for IDL files. I saw the Qt example with the host_tools.mk approach, but not tested yet. 4) Creation of the run file. What should be a first trial? Where can I can get better insight of how to do that? I have digged through the Genode code, particularly the Qt5 porting, but it is quite hard. Is there any specific guide, or there is no easy way. Is a try and test process? Thanks for your attention. Best regards and congratulations for the Genode project, Roger
Hello Roger,
This is my first message, and actually first contact with microkernel world.
welcome to the mailing list and thank you for the encouraging words! :-)
Specifically, OpenDDS3.6 which relies on ACE-TAO2.2a: http://download.ociweb.com/TAO-2.2a/ACE+TAO-2.2a_with_latest_patches_NO_make... http://download.ociweb.com/OpenDDS/OpenDDS- http://download.ociweb.com/OpenDDS/3.6.tar.gz
I create a specific repo inside repos, and did the port files.
The make prepare worked with no problems.
But then come the challenging part:
Adapting Makefiles /Config files to Genode specific platform. ACE-TAO need a specific config and platform files.
There are examples for linux, free and openbsd, vxworks, qnx,
vxworks, lynxos.
From which should I start from?
without having any knowledge about OpenDDS, I would always start with building and running the software-to-port on a Linux host system. When building, enable the verbose build output so that you can see all arguments passed to the compiler, linker, and the additional tools. It is useful to redirect the build output to a file, which can then be analyzed. I usually do not bother too much with inspecting the Makefiles but just look at the trace of the build output. With this information, it is often fairly easy to write library-description files for the Genode build system. You can find plenty of examples in _libports/lib/mk_.
- Creation of the patches. How to create the patches? Just with diff -crNb?
Yes. I tend to specify -u.
Building specific tools. ACE-TAO and OpenDDS rely on specific tools for IDL files.
I saw the Qt example with the host_tools.mk approach, but not
tested yet.
As you noticed, the Qt5 port is quite complex. Maybe it is easier to wrap your head around the port of mupdf, which also uses this mechanism? You can find it at repos/libports/lib/mk/mupdf.mk
If you'd like us to assist you with the port, it might be worthwhile to consider sharing your working branch on GitHub. This would enable others to easily reproduce the problem.
- Creation of the run file. What should be a first trial?
Depending on the scenario want to realize, it might be a good idea to take an existing run script as starting point. For example, for building a Qt5-based scenario, I recommend you to first try out, understand, and modify the libports/run/qt5.run script. Once you feel contend with it, it will become easy to transfer the knowledge to other scenarios. Please do not hesitate to ask any questions about the functioning of any specific run script.
Is there any specific guide, or there is no easy way. Is a try and test process?
The best way would be to make yourself acquainted with the run scripts that are available in the run/ subdirectories of the various repositories. To get a list, issue 'find -mindepth 4 -name "*.run"' from the root of the Genode source tree.
Have fun with exploring Genode!
Norman
Hi Norman,
I really appreciate your time and fast response.
I will follow the guidelines given. Thanks.
Regarding the possibility of a working branch on Git that would be interesting, sharing with others that might be willing to use and test OpenDDS as well or other similar OMG DDS implementation such as OpenSlice.
OpenDDS is being my first choice at the moment, since I already tested it on Ubuntu 12.04LS.
I will rebuild it to get the output as you recommended.
But before going into Git, at which point would you recommend me to advance the porting?
Namely, just having the very basic repos with porting (.port & .hash) is enough to start, or should I step on to get a better working mk files?
I did some improvements during the weekend, creating some mk files and a test example in order to force the ACE+TAO library building. OpenDDS not yet.
But I am still on the many erros phase.
I realized that the ace_gperf and tao_idl tools demanded by ACE+TAO relies on libACE that has to be built from the ACE+TAO package, which means that I have to compile / link the whole package using Genode Tool Chain to create the Genode version of ACE libs, and then build the tools.
Only after that I can create the OpenDDS library.
I have not tried yet but I understand that I have to do this.
I am still lost in the out of the tree building concept, not sure what exactly to place in the repos, like include files, to become available in the Genode environment.
I have not much time to dedicate to this, so it can take longer than expected. Beyond the lack of deeper knowledge so far.
I will try to do my best.
As a result, there will be certainly a lot of changes until I hope to succeed.
If you still believe that we could start a branch, please give me the instructions to do so.
Best regards,
Roger
Date: Mon, 18 May 2015 12:13:46 +0200 From: norman.feske@...1... To: genode-main@lists.sourceforge.net Subject: Re: Port OpenDDS to Genode
Hello Roger,
This is my first message, and actually first contact with microkernel world.
welcome to the mailing list and thank you for the encouraging words! :-)
Specifically, OpenDDS3.6 which relies on ACE-TAO2.2a: http://download.ociweb.com/TAO-2.2a/ACE+TAO-2.2a_with_latest_patches_NO_make... http://download.ociweb.com/OpenDDS/OpenDDS- http://download.ociweb.com/OpenDDS/3.6.tar.gz
I create a specific repo inside repos, and did the port files.
The make prepare worked with no problems.
But then come the challenging part:
Adapting Makefiles /Config files to Genode specific platform. ACE-TAO need a specific config and platform files.
There are examples for linux, free and openbsd, vxworks, qnx,
vxworks, lynxos.
From which should I start from?
without having any knowledge about OpenDDS, I would always start with building and running the software-to-port on a Linux host system. When building, enable the verbose build output so that you can see all arguments passed to the compiler, linker, and the additional tools. It is useful to redirect the build output to a file, which can then be analyzed. I usually do not bother too much with inspecting the Makefiles but just look at the trace of the build output. With this information, it is often fairly easy to write library-description files for the Genode build system. You can find plenty of examples in _libports/lib/mk_.
- Creation of the patches. How to create the patches? Just with diff -crNb?
Yes. I tend to specify -u.
Building specific tools. ACE-TAO and OpenDDS rely on specific tools for IDL files.
I saw the Qt example with the host_tools.mk approach, but not
tested yet.
As you noticed, the Qt5 port is quite complex. Maybe it is easier to wrap your head around the port of mupdf, which also uses this mechanism? You can find it at repos/libports/lib/mk/mupdf.mk
If you'd like us to assist you with the port, it might be worthwhile to consider sharing your working branch on GitHub. This would enable others to easily reproduce the problem.
- Creation of the run file. What should be a first trial?
Depending on the scenario want to realize, it might be a good idea to take an existing run script as starting point. For example, for building a Qt5-based scenario, I recommend you to first try out, understand, and modify the libports/run/qt5.run script. Once you feel contend with it, it will become easy to transfer the knowledge to other scenarios. Please do not hesitate to ask any questions about the functioning of any specific run script.
Is there any specific guide, or there is no easy way. Is a try and test process?
The best way would be to make yourself acquainted with the run scripts that are available in the run/ subdirectories of the various repositories. To get a list, issue 'find -mindepth 4 -name "*.run"' from the root of the Genode source tree.
Have fun with exploring Genode!
Norman
-- Dr.-Ing. Norman Feske Genode Labs
http://www.genode-labs.com · http://genode.org
Genode Labs GmbH · Amtsgericht Dresden · HRB 28424 · Sitz Dresden Geschäftsführer: Dr.-Ing. Norman Feske, Christian Helmuth
One dashboard for servers and applications across Physical-Virtual-Cloud Widest out-of-the-box monitoring support with 50+ applications Performance metrics, stats and reports that give you Actionable Insights Deep dive visibility with transaction tracing using APM Insight. http://ad.doubleclick.net/ddm/clk/290420510;117567292;y _______________________________________________ genode-main mailing list genode-main@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/genode-main
Hi Roger,
Regarding the possibility of a working branch on Git that would be interesting, sharing with others that might be willing to use and test OpenDDS as well or other similar OMG DDS implementation such as OpenSlice.
OpenDDS is being my first choice at the moment, since I already tested it on Ubuntu 12.04LS.
I will rebuild it to get the output as you recommended.
But before going into Git, at which point would you recommend me to advance the porting?
Namely, just having the very basic repos with porting (.port & .hash) is enough to start, or should I step on to get a better working mk files?
I gather from your email that you still have several ideas how to proceed. So I recommend you to follow your ideas first. If you like, you may conduct your work on a publicly visible topic branch at GitHub and announce your branch here. So other people could take a look (at their discretion) and may give advice. GitHub is just great for that.
Once you arrive at a point where you get stuck and seek practical assistance, sharing your branch would be most effective way to allow us reproducing your problem.
But most importantly: Don't feel pressured by me. :-)
I am still lost in the out of the tree building concept, not sure what exactly to place in the repos, like include files, to become available in the Genode environment.
Is the Section 5.3 "Build system" of the forthcoming documentation [1] able to clear things up? If not, I am keen to know what information you find missing.
I have not much time to dedicate to this, so it can take longer than expected. Beyond the lack of deeper knowledge so far.
I will try to do my best.
As a result, there will be certainly a lot of changes until I hope to succeed.
If you still believe that we could start a branch, please give me the instructions to do so.
Please refer to Section 5.5.2. "Development practice" of the soon-to-be-published documentation [1].
[1] http://genode.org/files/53bcb8e33fe6602fed25edc3c7b922c5/manual-2015-04-27.p...
Best regards Norman
Ok, I will see how far I can go and then I share on GitHub.
Once you arrive at a point where you get stuck and seek practical assistance, sharing your branch would be most effective way to allow us reproducing your problem.
Ok, If I find something relevant that I needed to do that is not covered or clear enough here I will let you know.
Is the Section 5.3 "Build system" of the forthcoming documentation [1] able to clear things up? If not, I am keen to know what information you find missing.
Please refer to Section 5.5.2. "Development practice" of the soon-to-be-published documentation [1].
[1] http://genode.org/files/53bcb8e33fe6602fed25edc3c7b922c5/manual-2015-04-27.p...
Hi Norman, After I lot of man hour work, I had some success to build first part. However, I had to get rid of some functionalities cause I was not able to link to a Genode library. Things like:- ./build/foc_x86_64/l4/include/uclibc/sys/shm.h- ./build/foc_x86_64/var/libcache/lxip/include/include/include/linux/aio.h
From the standard Genode build system, such includes cannot be found.
If I try to include (INC_DIR +=) a lot of side effects appear. For that reason, I had to disable (through standard ACE defines like ACE_LACKS_SYS_SHM_H) such expected features. After I finally succeded to build the ACE lib, I got link errors trying to build an app / tool. For example: pthread. Even though I enabled it in LIBS, in the linking phase a I get errors like:undefined reference to `pthread_rwlockattr_destroy' I saw it is defined in:build/foc_x86_64/l4/include/uclibc/pthread.h: The problem is that this I am getting many others similar problems like:undefined reference to `obj_config_dde' How do I treat such sort of problem? Hope it is not yet necessary to have the files / environment. If it is, I believe I have a working repos to start sharing. Regards, Roger