カーネルソースツリーの/includeおよび/include/linux

カーネルソースツリーの/includeおよび/include/linux

存在するLinuxカーネルのソースコード、一部のヘッダファイルとディレクトリは、次の場所に直接配置されます。/含むしかし、一部は次の場所にあります。/include/Linux。なぜすべてを/includeに入れないのですか? /includeと/include/linuxの違いは何ですか?

ベストアンサー1

しかし、それだけでなくlinux/内部には特別なディレクトリもあります。この共通の「インクルード」ディレクトリは異機種です。つまり、カーネル自体です: 40MBの 。uapi/asm-generic/includeinclude/linuxinclude/


K&R "C"は章の最後に次のように明記します。 「...より大きなプログラムでは、より多くの構成とより多くのヘッダーが必要です。」

したがって、中規模のプロジェクトでは、最初から組織が重要です。これは<.h>、構文と含まれるコンパイラの規則にも反映されます".h"。また#ifndef、…#defineシステムアプリケーションによって「保護」されます。 Linuxカーネルはたくさんより多くの組織。

ついに実際のケースを見つけたようです。

kernel/sched/それ自体は小型から中型サイズまであります。 8つのヘッダファイルがあり、そのうちの1つは次sched.hから始まります。

/*
 * Scheduler internal types and methods:
 */
#include <linux/sched.h>

...

この「ローカル」sched.hには、下位レベルのエントリのみが含まれています。


これinclude/linux/sched.hには以下が含まれます。

#ifndef _LINUX_SCHED_H
#define _LINUX_SCHED_H

/*
 * Define 'struct task_struct' and provide the main scheduler
 * APIs (schedule(), wakeup variants, etc.)
 */

#include <uapi/linux/sched.h>

#include <asm/current.h>

#include <linux/pid.h>
...

これらすべては実際に非常によく文書化され、整理されています。

「uapi」には、プログラムで「エクスポート」/使用するためのCLONE_フラグとSCHED_ポリシー(例:RR = 2)の定義が含まれます。

asm/current.h現在のタスクへの低レベルのアクセスです。

linux/pid.hassibling は linux/sched.h と同じようにデフォルトです。

-->はグローバルinclude/linux/「カーネル」ヘッダファイルの主要な中央コンテナです。


他のカタログセクションは、(主に)include/「インポート」定義、つまり統合ハードウェア用です。それらは kernel/、mm/ または fs/ より drivers/ に属します。


include/sound/また、非常に興味深いです。sound/sound_core.c持っている:

/*
 * First, the common part.
 */
#include <linux/module.h>
#include <linux/device.h>
#include <linux/err.h>
#include <linux/kdev_t.h>
#include <linux/major.h>
#include <sound/core.h>

したがって、(Linux、カーネル)モジュール、バグ、およびデバイスと独自の「ALSAドライバデバイス用のデフォルトヘッダファイル...(1994-2001)」が必要ですsound/core.h

おすすめ記事