web-dev-qa-db-ja.com

Linuxカーネルにシステムコールを追加する方法

現在読んでいるのはOperating System Concepts Silberschartz、Galvin、Gagneによる第7版です。第2章の最後に、「Linuxカーネルにシステムコールを追加する」という演習があります。残念なことに、著者が使用したディレクトリ構造はUbuntuのディレクトリ構造とはまったく異なることに気付きました。たとえば、著者は「/usr/src/linux-2.x/include/asm-i386/unistd.h」を参照しましたが、私のマシンでは次のとおりです。

  • /usr/src/linux-headers-2.6.38-10
  • /usr/src/linux-headers-2.6.38-10-generic

そして、このフォルダーの中に、「asm-i386」というものは何も見つかりませんでした:(。Ubuntu用のドキュメントが指定されているのでしょうか?提案は大歓迎です。

ありがとうございました、

3
Chan

Ubuntuは特別なことは何もしません。最初の問題は、カーネルソースのみがインストールされており、カーネルヘッダーのみがインストールされていることです。著者は、/usr/src/linux-2.xにカーネルソースのコピーがあるシステムについて説明しています。外部モジュールのみをコンパイルする場合は、システムに表示されるヘッダーで十分です。 Ubuntuは、その目的のためにlinux-headers-*パッケージ(通常は linux-headers-genericInstall linux-headers-generic メタパッケージ)。ソース全体が必要な場合は、 linux-source-2.6Install linux-source-2.6 バイナリパッケージ。

もう1つは、ディレクトリ構造が時間の経過とともに少し変更されたことです。アーキテクチャ依存のヘッダーがinclude/asm-$ArchからArch/$Arch/include/asmに移動しました。さらに、i386およびx86_64アーキテクチャは、2.6.24で統合されたx86に統合されました。 ( 詳細はこちら )したがって、Arch/x86/includeではなくinclude/asm-i386を調べる必要があります。

Linuxカーネルハッカーに役立つリソースをいくつか紹介します。

また、 nixおよびLinuxのこのスレッド も読んでください。これは、既存のsyscallの実装を見つける方法を説明しています。

4
Gilles

/usr/src/linux-headers-2.6.38-10-generic/include/linux/unistd.h

または将来のカーネルでは:

/usr/src/linux-headers-KERNEL_VERSION/include/asm-generic/unistd.h

:)

3