現在読んでいるのはOperating System Concepts Silberschartz、Galvin、Gagneによる第7版です。第2章の最後に、「Linuxカーネルにシステムコールを追加する」という演習があります。残念なことに、著者が使用したディレクトリ構造はUbuntuのディレクトリ構造とはまったく異なることに気付きました。たとえば、著者は「/usr/src/linux-2.x/include/asm-i386/unistd.h」を参照しましたが、私のマシンでは次のとおりです。
そして、このフォルダーの中に、「asm-i386」というものは何も見つかりませんでした:(。Ubuntu用のドキュメントが指定されているのでしょうか?提案は大歓迎です。
ありがとうございました、
Ubuntuは特別なことは何もしません。最初の問題は、カーネルソースのみがインストールされており、カーネルヘッダーのみがインストールされていることです。著者は、/usr/src/linux-2.x
にカーネルソースのコピーがあるシステムについて説明しています。外部モジュールのみをコンパイルする場合は、システムに表示されるヘッダーで十分です。 Ubuntuは、その目的のためにlinux-headers-*
パッケージ(通常は linux-headers-generic メタパッケージ)。ソース全体が必要な場合は、 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の実装を見つける方法を説明しています。
/usr/src/linux-headers-2.6.38-10-generic/include/linux/unistd.h
または将来のカーネルでは:
/usr/src/linux-headers-KERNEL_VERSION/include/asm-generic/unistd.h
:)