Op ma 19 nov. 2018 om 17:53 schreef Nobody III <hungryninja...@gmail.com>:
>
> You're welcome. Glad I could help.
>
> From the list, most of those functions are implemented in libc, but 
> overridden in Noux. Please note that Noux provides a system call interface, 
> while libc doesn't normally use or require that, but instead uses Genode's 
> library function calls more directly. The execve function isn't implemented 
> except in Noux AFAIK, but could possibly be implemented without a special 
> environment.

Then what is the difference between the libc-implementations and the
overridden implementations in Noux? I understand that the
execute/fork-type calls could only be implemented in Noux, but what
about the other functions? Or are they mainly 'stubbed' in libc so
that the programs at least compile and partially run? For example,
when I call getuid() in my application it logs "Warning: getuid:
getuid not implemented" and the function returns 0. Likewise, if I try
to create a file /tmp/hello.txt, the application logs "Error:
plugin()->open("/tmp/hello.txt") failed" and open() fails with erro
"invalid argument". However, reading an existing file (created in the
init script) works fine with libc.

I wonder why creating/writing files fails. It could have something to
do with write permissions (I found several ways to create a Virtual
File System, but all resulted in different errors so far). Or is this
where Noux starts to play a role? What is necessary for an application
to be able to create and write to files?

>
> First, if you haven't already, you should follow the instructions for 
> creating a build directory, then build and run one of the many scenarios, 
> e.g. run/demo.
>
> For compiling a simple C application, you first need to have/pick a repos 
> subdirectory. To start out, you could use one of the ones provided, e.g. 
> repos/gems. You then need to create a subdirectory for your application 
> somewhere inside repos/[your repo]/src, e.g. repos/gems/app/simple_c_app. 
> After that, you need to write your C code and place it in a file in that 
> directory. Then write a makefile named target.mk in the same directory with 
> the C code. The makefile should look something like the following:
>
> TARGET = simple_c_app
> SRC_C = main.c
> LIBS   = base libc posix
>
> When you have your source file(s) and makefile written, and your repo 
> directory added to etc/build.conf in your build directory, you should be able 
> to compile it using "make app/simple_c_app".
>
> If you want to run your app, you need to write a run script. Creating a good 
> run script for testing your app might be difficult, but you can start with 
> something simple. You can start by copying repos/gems/run/pipe.run and 
> modifying that.
>
> For most of this, I'd recommend looking at the pipe example by Emery 
> Hemingway, as found in repos/gems/src/app/pipe, and the aforementioned run 
> script. Please note that the pipe example uses C-style C++. If you want to 
> use pure C, be sure to use the variable SRC_C in the makefile rather than 
> SRC_CC.
>
> I hope this helps.

Thanks again for your time to write this steps down. The basic steps
are clear to me (I did create build directories, execute a number of
scenarios, write simple test applications and build and run them on
Genode). However, I did consider the learning curve quite steep and
still don't quite understand all internals and available options. So
when trying slightly more advanced examples, I quickly get lost... I'm
now in the process of porting the Mosquitto server to Genode and will
probably get back to the list with some questions about that ;-)

Kind regards,
Wouter

_______________________________________________
Genode users mailing list
users@lists.genode.org
https://lists.genode.org/listinfo/users

Reply via email to