私はSalzmanの「Linuxカーネルモジュールプログラミングガイド」を読んでいますが、linux / kernel.hファイルの場所を知りたいです。見つかりませんfind
。または、私が見つけたファイルprintk
に優先順位マクロがありません。
答え1
linux/kernel.h
モジュールの構築に使用されるヘッダーは次のとおりです。カーネルソースコードの一部。カーネルソースツリーからモジュールを構築するときに使用されるバージョン。
外部モジュールビルドの場合、ビルドプロセスはから始まります/lib/modules/$(uname -r)/build/include/linux/sched.h
。このファイルはカーネルヘッダパッケージで提供されます。例えばDebian 派生製品ではこのlinux-headers-$(uname -r)
パッケージです。
カーネルモジュールではなく、ユーザープロセスで動作/usr/include/linux/kernel.h
します。
優先順位printk
マクロは現在linux/printk.h
そしてlinux/kern_levels.h
。読んでいると思います。オリジナルガイド、最新のカーネルでは、2.6カーネルシリーズに基づいています。更新されたガイド(現在使用中5.6.7)。
答え2
私のMint 18.xシステムでbuild-essential
完全なソースツリーがインストールされていない場合 -
user@localhost:~ $ locate kernel.h | grep \/kernel.h$
/usr/include/linux/kernel.h
/usr/src/linux-headers-4.4.0-21/include/linux/kernel.h
/usr/src/linux-headers-4.4.0-21/include/uapi/linux/kernel.h
/usr/src/linux-headers-4.4.0-21-generic/include/config/debug/kernel.h
/usr/src/linux-headers-4.4.0-21-generic/include/config/firmware/in/kernel.h
/usr/src/linux-headers-4.4.0-53/include/linux/kernel.h
/usr/src/linux-headers-4.4.0-53/include/uapi/linux/kernel.h
/usr/src/linux-headers-4.4.0-53-generic/include/config/debug/kernel.h
/usr/src/linux-headers-4.4.0-53-generic/include/config/firmware/in/kernel.h
/usr/src/linux-headers-4.8.0-53/include/linux/kernel.h
/usr/src/linux-headers-4.8.0-53/include/uapi/linux/kernel.h
/usr/src/linux-headers-4.8.0-53-generic/include/config/debug/kernel.h
/usr/src/linux-headers-4.8.0-53-generic/include/config/firmware/in/kernel.h
あなたの質問に対するジェフの意見に基づいて、私の考えでは最大時間が/usr/include/linux/kernel.h
使用されます。
カーネルツリーのタルボールを抽出した場合は、そのディレクトリ構造に別のコピーがある可能性があります。クイックチェックにより、サイズがすべて異なるか空のファイルであることがわかります。
答え3
この質問に対する答えは、Linuxディストリビューションによって大きく変わる可能性があります。 SUSE/SLES vs RHEL/Centos/Fedora vs debian vs mintなど
LinuxディストリビューションとDebian RPMのバージョンによって異なりますか?
とにかく私の経験はほとんどSLESバージョン11.4で行われましたが、これは私が保証できるものです。
/usr/src/linux/include/linux/kernel.h
where for me /usr/src/linux -> /usr/src/linux-3.0.101-108.21
uname -r for me returns 3.0.101-108.21-default
カーネルを最新バージョンに更新すると、ソフトリンクは kernel.h とともにそれに応じて変更されます。お探しの方は、こう言うのが安全だと思います。カーネルモジュールそのバージョンは、kernel.h
以下に関連するいくつかのフォルダにあり、uname -r
その一部になります。カーネルソースコードLinuxディストリビューション用のパッケージ。