カーネルにはシステム コール テーブルがあり、すべてのシステム コールとその実装関数がリストされています。ユーザランドはシステムコールのインデックス番号を指定してシステムコールを要求します。したがって、このインデックス番号は、カーネル コンパイルとユーザーランド コード コンパイルの間で一致する必要があります。このリストはエラーが発生しやすいため、見つけたシステム コール テーブルが導入され、そこからコードが自動的に生成されます。そのテーブルは、システム コールを相互に関連付けます。それらのインデックス番号、ユーザー ランドで使用される名前、およびシステム コールを実装するカーネル関数名です。は、このテーブルからMakefile
ヘッダー ファイルを生成します。
ヘッダー ファイルがありsyscalls_xx.h
、カーネル内のテーブルを定義します (syscall を実装するすべてのカーネル関数をインデックスでリストします)。
別のヘッダー ファイルがあり、ユーザーランドに をunistd_xx.h
提供し、syscall インデックス番号を名前別にリストします。あなたが求めている名前#define
フィールドはこのリストに入り、それによってユーザーランドはこのシステムコールを参照できます: . このヘッダー ファイルは、syscall インデックス番号を名前で参照できるように、ユーザー空間コードでコピーされて使用されます (これらの使用方法については、glibc のソースを参照してください)。__NR_<xxx>
syscall_32.tbl:
350 i386 finit_module sys_finit_module
unistd_32.h:
#define __NR_finit_module 350
syscalls_32.h:
__SYSCALL_I386(350, sys_finit_module, sys_finit_module)