
存在するLinuxカーネルのソースコード、一部のヘッダファイルとディレクトリは、次の場所に直接配置されます。/含むしかし、一部は次の場所にあります。/include/Linux。なぜすべてを/includeに入れないのですか? /includeと/include/linuxの違いは何ですか?
答え1
しかし、それだけでなくlinux/
内部には特別なディレクトリもあります。この共通の「インクルード」ディレクトリは異機種です。つまり、カーネル自体です: 40MBの 。uapi/
asm-generic/
include
include/linux
include/
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.h
assibling は 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
。