2013-07-15 6 views
6

私はRobert LoveのLinuxカーネル開発を読んでいます。彼がやっている練習の1つは、システムコールを作成することです(106ページ)。問題は、x86_32アーキテクチャのv3.9でシステムコールテーブルファイルを見つけることができないことです。私は彼がバージョン2.6.xxを使っていることを知っていますが、バージョンがかなり古いので使用しているディストリビューションで動作するかどうか分からないので、v3.9を好むでしょう。 システムコールテーブルの最後にエントリを追加します。これは、システムコールをサポートするアーキテクチャごとに実行する必要があります(ほとんどの場合、システムコールをサポートします)。コールはすべてのアーキテクチャです)テーブル内のシステムコールの位置はゼロから始まり、システムコール番号です。たとえば、リストの10番目のエントリには、システムコール番号9が割り当てられます。 linuxカーネルのシステムコールテーブルはどこですか?

は、以下の手法を用いて解く: システムコールテーブルは、x86アーキテクチャのためのアーチ/ x86の/システムコール/ syscall_32.tblに位置しています。彼の助けを借りてSudip Mukherjeeに感謝します。あまりにも彼の助けのためのスリニバスGanjiに http://lists.kernelnewbies.org/pipermail/kernelnewbies/2013-July/008598.html ありがとう:

別のアプローチは、次のようです。

+0

? – mnagel

+0

本書では、それはentry.Sに位置していると言いますが、私が知る限り、これは最後のバージョンで変更されています。だから、私はarch/x86/kernelでentry_32.Sファイルを見つけましたが、そこにはテーブルが見つかりませんでした。 – Iker

+0

[ここ](http://lxr.linux.no /#linux+v3.9/arch/x86/ia32/syscall_ia32.c#L18) – levengli

答えて

6

のsrcルートでテストフォルダを作成します:src/linux-3.4/testing/を、このフォルダ内に置く:
- システムコールのコードを含むファイル:strcpy.c

#include <linux/linkage.h> 
#include <linux/kernel.h> 
asmlinkage long sys_strcpy(char *dest, char *src) 
{ 
    int i=0; 
    while(src[i]!='\0') { 
     dest[i]=src[i++]; 
    } 
    dest[i]='\0'; 
    printk(" Done it "); 
    return 0; 
} 

、ちょうど次の行が含まれたMakefile:

obj-y:=strcpy.o 

システムコールテーブルと関数のプロトタイプにエントリを追加します。
- ファイルを編集src/linux-3.4/arch/x86/syscalls/syscall_32.tbl Bを添加することにより機能

asmlinkage long sys_strcpy(char *dest, char *src); 

編集SRCルート(src/linux-3.4/Makefile)のメインのMakefileのプロトタイプを追加することによって

223  i386 strcpy   sys_strcpy 

編集ファイルsrc/linux-3.4/include/linux/syscalls.hを含まないエントリ223に次の行を追加Y次のように、前に作成したフォルダをテスト:

Linuxカーネル4.2から
core-y  += kernel/ mm/ fs/ ipc/ security/ crypto/ block/ testing/ 
8

、システムコールテーブルがarch/x86/syscalls/syscall_64.tblトンから移動されましたOここarch/x86/entry/syscalls/syscall_64.tbl

は、対応するcommitです:

あなたはそれを探しました
commit 1f57d5d85ba7f1f467173ff33f51d01a91f9aaf1 
Author: Ingo Molnar <[email protected]> 
Date: Wed Jun 3 18:36:41 2015 +0200 

    x86/asm/entry: Move the arch/x86/syscalls/ definitions to arch/x86/entry/syscalls/ 

    The build time generated syscall definitions are entry code related, move 
    them into the arch/x86/entry/ directory. 
関連する問題