Subject: Re: How do I create a include-file to match my new syscall?
To: Espen Jorde; IFI; H97 <espenjo@unik.no>
From: Guenther Grau <Guenther.Grau@marconicomms.com>
List: tech-kern
Date: 03/07/2000 15:54:05
Hi Espen,
"Espen Jorde; IFI; H97" wrote:
> Part of the work for my master thesis involves adding some system
> calls to the kernel.
>
> After some time I have figured out how to add my own system call. I
> have done this successfully with a 1.4.1 kernel.
>
> Now my problem is how to access syscalls from user-space. I can call
> them by using "syscall(<syscallnumber>, arguments)". But i would love
> to be able to do something like this:
>
> #include <foo.h>
>
> foo(i, j, k);
>
> Can anybody give me a hint on where I should look? Which directory
> should I put my .h file for it to compile correctly and end up in
> /usr/include. How should my .h file look. Any good examples?
>
> Any help is appreciated!
Well, you wrote _Any_ help, so here you go :-)
Not that I've done this myself, but I'd suggest looking
at some of the NetBSD libraries, which do make systemcalls.
I guess libc might be a good candidate, but probalby a lot
of the libraries do actual systemcalls.
My naive way to address this problem would be:
Implement function foo(int, int, int) in foo.c
which (probably) checks the parameters and then
does the actual syscall and returns the result
of the syscall.
Create a new library libbar.a or libbar.so and
put the compiled foo.o into this library. Then
create <bar.h> file which contains the prototype
for foo(int, int, int).
Then change above program baz.c to
#include <bar.h>
foo(i, j, k);
main() {
foo(1,2,42);
}
cc -obaz baz.c -lfoo
./baz
This might be totally wrong, but that's how I thought it
might/could/would work. Anybody else, please feel free
to correct me.
Guenther
P.S.: I changed the name of the lib/inlcude file to
bar, because libs usually contain more than just one
function.