Linux2.6.25カーネルにシステムコールの追加をするのでメモメモ.
ちなみにその時にx86? bit数?とかかなり初歩的なことが分かっていないことが発覚したので,それについても近いうちにまとめます.
●システムコールの追加のためにすること
1)システムコール番号の登録
2)システムコールテーブルに登録
3)追加するシステムコールのオブジェクトファイル名をMakefileに追記
4)ヘッダファイルの作成
5)システムコール本体の作成
6)カーネルの再構築
以下,詳しくやることを書いていきます.
1)システムコール番号の登録
include/asm/unistd_32.h に
#define __NR_システムコール名 システムコール番号
を追加.
/usr/include/asm/unistd_32.hにも同様に追記する
/*62bitb版OSの場合は,unistd_64.hに追記する*/
/*OSのbit数は$uname -iで調べました*/
2)システムコールテーブルに登録
arch/x86/kernel/syscall_table_32.S に
.long sys_システムコール名
を追加.
3)追加するシステムコールのオブジェクトファイル名をMakefileに追記
arch/x86/kernel/Makefile のobj-yの項目に
システムコール名.o
を追加.
4)ヘッダファイルの作成
4-1)カーネル空間用
include/linux/システムコール名.h を作成
#ifndef NR_システムコール名_H
#define NR_システムコール名_H
#include <linux/unistd.h>
#include <linux/linkage.h>
#define システムコール名(arg1) syscall(__NR_システムコール名, arg1)
#endif
4-2)ユーザ空間用
/usr/include/linux/システムコール名.h を作成
4-1で作成したヘッダファイルの#include <linux/linkage.h>を#include <linux/syscall.h>に変更したものを作成する
5)システムコール本体の作成
システムコール名.cというファイルを以下のように作成し,arch/x86/kernel/以下に保存する.
#include <linux/システムコール名.h>
asmlinkage 関数型 sys_システムコール名 (引数){
/* システムコールの内容を記述 */
}
6)カーネルの再構築
make bzImage && make install をした後に再起動!
システムコールをユーザモードプロセスから利用する場合は,ファイル内に#include <linux/システムコール名.h>を記述して利用する
これでいけるハズ
0 件のコメント:
コメントを投稿