***************** test.c ***************** #includeシステムコール番号の定義、エントリへの追加等をlevel4と同様に行う。#include int sys_test(char* comment) { int pid; pid = current->pid; if(comment) printk("syscall_test: %s pid = %d?n", comment, pid); return 0; }
************* test.h ************ #ifndef __TEST_H #define __TEST_H #include#include #include #ifndef __KERNEL__ _syscall1(int, test, char*, comment) #endif #endif
APへのインタフェースの記述を行う。
ここでは、APからsyscallを使ってシステムコールを行うのではなく,
''linux/unistd.h''で定義されているsyscallX()マクロを使う方法をとる。
(Xにはシステムコールの引数の数に応じて0〜5が入る)。
syscallX()の引数には「システムコールの戻り値の型、システムコール名、
第1引数の型、第1引数の名前、...」を入れる。
****************** test2.c ****************** #include#include int main(int argc, char** argv) { if(argc == 2) test(argv[1]); return 0; }
[root@pw039 j03012]% ./a.out foo [root@pw039 j03012]% tail -1 /var/log/messages Jan 12 20:09:09 pw039 kernel: syscall_test: foo pid = 1754これより、作成したシステムコールの動作を確認することができる。