1. Linux版
1. 安定版と開発版
Linux
カーネルは主に 2 つのバージョンに分かれています。
- 安定版 (長期サポート版): カーネルの安定版は工業用の強度を備えており、広く使用および展開できます。各世代の新しくリリースされた安定したカーネルのほとんどは、いくつかのバグを修正するか、いくつかの新しいデバイス ドライバーを追加するだけです。
- 開発バージョン: 開発バージョンのカーネルのカーネル開発者は常に新しいソリューションを実験しているため、開発バージョンのカーネルのコードは非常に急速に変更されます。
これら 2 つのバージョンはLinux
バージョン番号によって区別されます。
2. Linuxのバージョン番号
Linux
のバージョン番号は、主に次の 3 つのグループの数字で構成されますxxx.yyy.zzz
。
xxx
: メジャーバージョン番号 (Major Release
)yyy
: マイナーバージョン番号 (Minor Release
)zzz
: リビジョン番号 (Revision Count
)
の:
- 新しいドライバーを追加し、マイナー バージョン間のバグを修正します。例
3.21.x
:3.22.x
- マイナー バージョンがある程度蓄積されると、次のような新しいメジャー バージョンがリリースされます
5.x.x
。6.x.x
- 各マイナー バージョンがリリースされると、使用中にバグが見つかる可能性があるため、次のようなマイナー バージョンの改訂版がリリースされます
5.6.13
。5.6.14
安定Linux
バージョンと開発バージョンは、マイナー バージョン番号によって区別されます。
- 偶数のバージョン番号は、カーネルのバージョンが安定したバージョンであることを示します
- 奇数のバージョン番号は、カーネルのバージョンがベータ版であることを示します
たとえば、次のようになりますLinux 3.6.34
。
主版本号
:3次版本号
:6、安定版修订版本号
:34、現在のバージョンがLinux 3.6
リビジョン 34 であることを示します。
ただし、その後のリビジョンはすべてバグ修正であり、新機能のリリースを含まないため、メジャー バージョン番号とマイナー バージョン番号の組み合わせで実際にカーネルのバージョンを表すことができます。
2、Linuxカーネルのソースコード構成構造
Linux
カーネル ソース コードは膨大で、2020 年バージョンのカーネル ソース コードはすでに 2,780 万行あり、これらのコードは 66,492 個の C ファイルに分散されています。Linux
コードのソース ファイルは、特定の組織構造に従って異なるディレクトリに保存され、各ディレクトリ内のソース コードの機能は論理的に同じ点を持ちます。
ディレクトリに加えて、特別な役割と目的を持つファイルもいくつかあります。
1. ディレクトリ
Linux
ソース コードのルート ディレクトリの下に一連のディレクトリが格納されており、各ディレクトリには多数の C コードが存在します。これらのCコードを論理的に機能分けした上で、同じフォルダに入れてください。
A.arch
フォルダー
arch
アーキテクチャに関連するコードはディレクトリに保存され、異なるシステムやプラットフォーム間の違いを保護するために使用されます。例えば:
RISC-V
CPU
仮想アドレスを開くアーキテクチャのアドレス変換機能は、satp
レジスタとmstatus
レジスタの読み書きを行う必要があります。x86
オープン仮想アドレスのアドレス変換機能は、レジスタとレジスタのCPU
読み書きを行う必要があります。cr3
cr0
Linux
仮想アドレス変換関数を開く関数は です。switch_mm
仮想アドレス変換関数を開くにはアーキテクチャが異なると異なる操作が必要となるため、この関数はディレクトリにswitch_mm
配置されます。arch
実は、switch_mm
割り込み処理関数など、似たような関数はたくさんあります... そこで、Linux
各システムに依存するコードはカーネルarch
内のディレクトリに配置されます。
B.block
フォルダー
block
このフォルダーには、Linux
カーネルのブロック デバイス ドライバーが保存されます。ブロックデバイスとは、固定サイズのブロックに情報を格納することを指し、各ブロックには独自のアドレスがあり、CPU
アドレスを指定することでデバイス上の任意の場所にある一定の長さのデータを読み取ることができます。
ブロック デバイスは実際には、グラフィックス カードなどのコンピューティング デバイスではなく、デバイスの種類、具体的にはデバイス、つまりI/O
データを保存するデバイスを指します。CPU
硬盘
U盘
SD卡
なお、後述するLinux
カーネルソースコードのルートディレクトリ下にはdrivers
ディレクトリが存在し、このディレクトリ内に各種デバイスのドライバが配置されている。論理的に言えば、ブロックデバイスドライバーも一種のドライバーであるはずですが、なぜそれをディレクトリの下にblock
置かずに個別に取り出すのでしょうか?drivers
これは実際には、drivers
さまざまなデバイスのドライバーが実際にディレクトリの下に配置されているためです。たとえば、次のとおりです。
driver/cdrom
CD-ROMのドライバーは次のフォルダに格納されています。driver/usb
USB
デバイスのドライバーは、U ディスクなどのフォルダーに保存されます。
実際、読み取り専用 CD と CD-ROM は両方ともUSB
ブロック デバイスであるため、ブロックの読み取りやブロックの書き込みなどのブロック操作は同じですが、ブロックの読み取りの操作は特定のデバイスによって異なります。
したがって、Linux
一般block
的なブロックデバイスドライバー、つまりブロックの書き込みとブロックの読み取りの機能はディレクトリに格納され、ブロックの読み取りを行う特定のデバイスの機能はディレクトリに格納されますdriver/设备
。したがって、ディレクトリをルートディレクトリにLinux
置きます。block
実装に関しては、block
ディレクトリを除いて、ディレクトリipc
とnet
同じです。ipc
一般的なデバイス ドライバーと一般的なネットワーク ドライバーを保存するだけです。
C.certs
ディレクトリ
certs
Linux
認証と署名に関連するコードは、ディレクトリに保存されます。このディレクトリには、署名付きモジュール、カーネル コード、ユーザー スペース アプリケーションなどを検証するために使用できる、いくつかのプリインストールされたデジタル証明書が含まれています。これらの証明書を使用すると、これらのコンポーネントが信頼できるソースからのものであることを確認できるため、システム セキュリティが向上します。
このディレクトリが必要な理由は、このバージョン以降、Linux
カーネルが動的ロードをサポートしているためです。2.2
内核模块
カーネルモジュール
カーネルをコンパイルするとき、すべてのドライバー、ファイル システム、またはネットワーク プロトコル コードがカーネルにコンパイルされます。最終的に、カーネルはさまざまなデバイス用のドライバーでいっぱいになります。コンピューターのハードウェア システムには 10 種類以上のデバイスしかないかもしれませんが、実行中のカーネルにはデバイス用のドライバーが 400 以上あります。
だからこそ、バージョンアップ後に提案されたコンセプトは、カーネルのバイナリプログラムからファイルシステムやドライバなどを分離し、コンパイル段階で別ファイルを生成する
Linux
というものだった。将来どのプログラムが必要になるかは、対応するファイルをロードするだけです。2.2
内核模块
.so
.so
たとえば、私たちがファイルシステムとストレージの研究者として、
ext
ファイルシステムの欠点を改善し、独自のファイルシステムIron
ファイルシステムを提案したとします。ファイル システムをテストしたいので、この時点では、 の形式でファイル システムのプログラムを内核模块
作成できます。カーネルは、実行中に、作成したファイル システムをメモリにロードできます。Iron
Linux
Iron
内核模块
内核模块
これらは、システムの実行中に動的にロードおよびアンロードできます。つまり、システムの起動時に必ずしもロードされるわけではなく、必要に応じてロードされます。この動的な読み込み方法は、システムの柔軟性と拡張性に大きなメリットをもたらしますが、システムに潜在的なセキュリティ リスクももたらします。
たとえば、攻撃者は、機密情報の窃取、サービス拒否攻撃、権限昇格などの通常のカーネル モジュール機能を実装するコードに悪意のあるコードを追加する可能性があります。最後に、正規のカーネル モジュールに偽装され、コンパイルされた.so
ファイルが元の通常のファイルに置き換えられます内核模块
。最後に、ユーザーがこれらの悪意のある内核模块
カーネル モジュールをロードすると、これらの悪意のあるカーネル モジュールはシステムに損傷を与え始めます。
このため、オープン ソースのソース コード、検証済みカーネルに悪意のあるコードが挿入されたり、悪意のあるカーネル モジュールが読み込まれたりするのを防ぐために、Linux
含まれる複数のコンポーネントを検証する必要があります。内核模块
Linux
D.crypto
ディレクトリ
crypto
Linux
カーネルで一般的に使用される圧縮および暗号化アルゴリズムは、ディレクトリに保存されます。
1. カーネル内の暗号化アルゴリズム
Linux
カーネルは多くの場所で暗号化アルゴリズムを使用する必要があり、基本的に、Linux
暗号化ファイル システム、ネットワーク送信の暗号化、デジタル署名、安全なログインなど、パスワードを保存する必要があるさまざまなセキュリティ機能がシステムに実装されています。暗号化されること。
したがって、Linux
カーネル内のディレクトリには、、、、など、一般的に使用される暗号化アルゴリズムのcrypto
実装が含まれています。AES
DES
SHA1
SHA256
また、暗号化と復号化は頻繁に使用されるため、Linux
カーネルcrypto
ディレクトリには、ハードウェア ベースのアクセラレータなど、暗号化/復号化を高速化するハードウェア用のドライバも提供されており、AES
これらのドライバを使用してこれらのハードウェアを呼び出すことで、カーネルの暗号化と復号化のパフォーマンスを向上させることができますLinux
。パフォーマンス。
2. カーネル圧縮アルゴリズム
Linux
カーネルのソース コードは現在 1.1G で、最終的にコンパイルされたバイナリ形式のカーネルはさらに大きくなるだけです。起動する前に、Linux
カーネルはファイルの形式でディスク上に存在し、実行する場合はメモリにロードする必要があります。したがって、起動時間とメモリ使用量を削減するために、Linux
カーネルはそれ自体を圧縮し、必要に応じて対応するコードを解凍します。
したがって、カーネルの圧縮アルゴリズムの主な目的は、カーネル イメージのサイズを削減することです。圧縮を行わないと、カーネル イメージのロードと実行に時間がかかり、より多くのメモリ領域を占有することになります。
圧縮アルゴリズムを使用すると、カーネル イメージのサイズを半分またはさらに小さくすることができるため、起動速度が向上し、メモリ領域が節約されます。さらに、一部のファイル システムでは、ストレージ領域の使用量を削減し、ファイル システムのパフォーマンスを向上させるために圧縮アルゴリズムも使用します。
もちろん、圧縮と解凍の両方にオーバーヘッドがかかります。圧縮アルゴリズムによりカーネル イメージのサイズは削減できますが、カーネルの起動時の解凍時間も長くなります。したがって、Linux
カーネルが特定の圧縮アルゴリズムを選択する場合、圧縮率と解凍時間のバランスをとる必要性に応じて圧縮アルゴリズムを選択するか、最高のパフォーマンスを得るためにユーザーが指定した圧縮アルゴリズムを直接使用します。
具体的には、crypto
ディレクトリに実装されLinux
ているさまざまな圧縮アルゴリズムにはLZO
、、、、…が含まれます。LZ4
Zlib
Deflate
E.Documentation
ディレクトリ
Documentation
ディレクトリはLinux
カーネルのドキュメントであり、主にさまざまなモジュールの機能を説明し、いくつかの仕様を定義します。
例えば:
cat Documentation/riscv/boot-image-header.rst | less
F.drivers
ディレクトリ
drivers
このディレクトリには、Linux
カーネルのさまざまなハードウェアのドライバーが保存されます。デバイスの例GPIO
:
ls drivers/gpio | less
CPU
モデルごとに設定と初期化方法が異なるGPIO
ため、さまざまなチップのコードがLinux
ディレクトリdrivers/gpio
に保存されますGPIO
。
G.fs
ディレクトリ
fs
ディレクトリ108には、Linux
仮想ファイルシステムのコードや各種ファイルシステムのコードが格納される。
たとえば、Windows
より一般的なntfs
ファイル システムの実装はfs/ntfs
次のディレクトリにあります。
ls fs/ntfs | less
H.include
ディレクトリ
include
Linux
カーネル ソース コードが依存するヘッダー ファイルのほとんどは、ディレクトリに保存されます。各ヘッダー ファイルにはカーネルのさまざまな定義と宣言が含まれており、カーネルの構築と開発に必要なサポートを提供します。
I.init
ディレクトリ
init
カーネル初期化のコードはディレクトリに保存されます。
カーネルの実行プロセス全体は、実際には 2 つのプロセスとみなすことができます。
- 電源ボタンを押してカーネルを起動すると、カーネルはユーザーがこのプロセスを使用するのを待つ準備が整います。このプロセスはと呼ばれます。
初始化
- ユーザーがカーネルの使用を開始し、シャットダウンされるまでカーネルは正常に動作します。このプロセスがカーネルの通常の動作プロセスです。
初期化フェーズでは、カーネルは次のような多くのことを行う必要があります。
- 利用可能な物理メモリをカウントし、仮想アドレス変換を有効にし、メモリ管理モジュールを初期化します...
- スレッド管理モジュールを初期化し、カーネル スレッドを構築し、実行する初期スレッドを作成して対話型シェルを使用します...
- ……
カーネルは複数のコンポーネントで構成されているため、カーネル初期化フェーズのコードは実際にカーネルの各コンポーネントに入り、各コンポーネントの初期化を完了します。
J.ipc
ディレクトリ
ipc
ディレクトリはプロセス間通信の実装であり、将来的にはカーネルのプロセス間通信モジュールにコンパイルされる予定です。Linux
一般的に使用される、次のようなさまざまなプロセス間通信メカニズム。
- 信号量
- 共有メモリ
- 匿名パイプ
- ……
実装コードはすべてipc
このディレクトリの下にあります。
ls ipc
K.kernel
ディレクトリ
kernel
ディレクトリはカーネルのコア コードであり、次のものが含まれます。
- プロセス管理
- 割り込み管理
- 時計
- ……
これらはカーネルの中核となる機能コンポーネントであるため、すべてkernel
このディレクトリの下に配置されます。
L.lib
ディレクトリ
lib
このディレクトリには、次のようないくつかの共通ライブラリ関数が含まれています。 、memset
...strlen
これらの関数はカーネルの他の部分で使用できるため、カーネルの開発が簡素化されます。自分で書いたユーザープログラム#include <stdlib.h>
にも#include<stdio.h>
対応できますmemset
が、memset
カーネルディレクトリlib
内のプログラムとはmemset
異なりますのでご注意ください。
memset
で定義された関数を使用しますC标准库
が、C标准库
実際にはオペレーティング システムのサポートが必要なため、カーネルのソース コードを作成する際にはそれらは使用されず、一部の関数は自分でC标准库
手動で実装する必要があります。C标准库
したがって、この観点から見ると、カーネル ソース コード内のディレクトリは実際には実装のサブセットlib
です。C标准库
さらに、lib
ディレクトリには、リンク リスト、ハッシュ テーブル、赤黒ツリー、ビットマップなどのいくつかの一般的なデータ構造とアルゴリズムの実装があります。
M.mm
カタログ
mm
ディレクトリは、次Linux
のようなカーネル メモリ管理に関連する実装です。
- 物理メモリ管理
- ページ割り当てアルゴリズム
- ページフォルト割り込み、ページ変更アルゴリズム
- ……
N.net
ディレクトリ
net
このディレクトリは、block
ワイヤレス ネットワーク カード (つまりWiFi
)、イーサネット (つまり、有線)、4G などのさまざまな種類のネットワーク デバイスと、これらの特定のネットワーク デバイスのドライバー コードが存在するため、ディレクトリと似ています。drivers
ディレクトリに配置されます。
デバイスの種類が何種類であっても、ネットワーク プロトコル スタックは実際には同じです。たとえば、ワイヤレス ネットワーク カードとイーサネットはデータ パケットの送受信に使用されます。データ パケットの送受信に使用されるデバイスは異なりますが、それらは同じです。すべて IPv4 ネットワーク プロトコルに従います。したがって、Linux
カーネルは、ネットワーク プロトコルによって実装されたコードをnet
ディレクトリに配置します。
net
カタログに実装されているネットワーク プロトコルには次のものがあります。
TCP
IPv6
DNS
- ……
O.samples
ディレクトリ
samples
カーネルのサンプル コードとプログラムの一部は、 ディレクトリ に保存されています。これらのコードとプログラムは、初心者のカーネル エンジニアがカーネルの動作原理と実装の詳細をLinux
よりよく理解するのに役立ちます。Linux
samples
ディレクトリ内のサンプル コードとプログラムは、開発者が、Linux
ネットワーク プロトコル スタック、ファイル システム、ドライバー、スケジューラに関連する関数、および機能モジュール内のその他の関連関数など、カーネルによって実装される関数の使用方法を学習するのに役立ちます。
同時に、これらのサンプル コードおよびアプリケーション プログラムは、開発者が独自のカーネル モジュールおよびアプリケーション プログラムを開発するためのLinux
参考および例として使用することもできます。
最後に、samples
ディレクトリにはテスト ケースとしていくつかのプログラムがあり、Linux
カーネルのさまざまな機能とインターフェイスの正確性とパフォーマンスをテストするために使用できます。
基本的に、私たちが最初にカーネル開発を学び始めたときLinux
、または他のディレクトリのコードを直接変更して独自のコードを挿入すると実行できなくなりデバッグが難しくなるのを避けるHacking Linux Kernel
ために、通常、コードをカーネル開発用のディレクトリに置きます。テスト中。今後スキルを向上させた場合は、他のディレクトリのコードを修正する予定です。Linux
samples
P.scripts
カタログ
Linux
カーネル ソース ディレクトリ内のディレクトリscripts
には、カーネル開発者がカーネルのコンパイル、デバッグ、分析、最適化を実行するのに役立ついくつかのスクリプト ツールが含まれています。
具体的には、scripts
ディレクトリには次のカテゴリのツールが含まれています。
- コンパイル ツール:このディレクトリには、 、、その他のツール スクリプト
scripts
など、カーネルをコンパイルするためのいくつかのツール スクリプトが含まれています。これらのツール スクリプトは、開発者がカーネル ソース コードをコンパイルし、実行可能なカーネル イメージ ファイルを生成するのに役立ちます。make
gcc
ld
- デバッグ ツール:このディレクトリには、 、、およびその他のツールのスクリプト
scripts
など、カーネルをデバッグするためのいくつかのスクリプト ツールが含まれています。これらのスクリプトは、開発者がカーネルをデバッグし、カーネル内のさまざまな問題を特定して解決するのに役立ちます。gdb
kgdb
kdb
- 分析ツール:
scripts
このディレクトリには、カーネルを分析するためのスクリプト ツール (perf
、trace-cmd
など) が含まれています。これらのツールは、開発者がカーネルのパフォーマンス分析、トレース、統計を実行して、カーネル内のパフォーマンスのボトルネックや最適化ポイントを見つけるのに役立ちます。 - コード検査ツール:
scripts
このディレクトリにはcheckpatch.pl
、 、などのコード検査用のいくつかのスクリプト ツールが含まれていますsparse
。これらのスクリプト ツールは、開発者がカーネル ソース コード内のコード スタイル、構文エラー、メモリ リーク、その他の問題をチェックして、コードの品質と保守性を向上させるのに役立ちます。
Q.security
カタログについて
Linux
カーネル ソース ディレクトリ内のディレクトリは、次のようなカーネル セキュリティ メカニズムの実装をsecurity
提供します。 (つまり、)、…Linux
Access Contol List
ACL
SELinux
このディレクトリ内のコードは主にセキュリティ関連の機能を実装するため、このディレクトリは、開発者がシステムのセキュリティ パフォーマンスを強化するのに役立つセキュリティ関連のモジュールとインターフェイスを提供しますLinux
。
具体的には、security
ディレクトリには次のタイプのモジュールとインターフェイスが含まれています。
- セキュリティ モジュール:
security
ディレクトリには、 などのいくつかのセキュリティ モジュールが含まれていSELinux
ますAppArmor
。これらのセキュリティ モジュールは、開発者がシステム内のさまざまなリソースに対してアクセス制御とセキュリティ戦略管理を実装するのに役立ち、それによってシステムのセキュリティ パフォーマンスが向上します。 - セキュリティ インターフェイス:
security
ディレクトリには、 などのいくつかのセキュリティ インターフェイスも含まれていsecurity_inode_permission
ますsecurity_file_permission
。これらのセキュリティ インターフェイスは、開発者がシステム内のさまざまなリソースへのアクセス制御と権利管理を実装するのに役立ち、それによってシステム内の機密データとアプリケーションを保護します。 - セキュリティ ポリシー:
security
このディレクトリにはcapability
、 、posix_acl
などのいくつかのセキュリティ ポリシーも含まれています。これらのセキュリティ ポリシーは、開発者がシステム内のさまざまなリソースへのアクセス制御と権限管理を実装するのに役立ち、それによってシステム内の機密データとアプリケーションを保護します。
R.sound
ディレクトリ
sound
このディレクトリは、Linux
サウンド関連のドライバーとモジュールが含まれるカーネル ソース内のディレクトリです。net
ディレクトリと同様にblock
、特定のタイプのサウンド カード デバイスのドライバがdrivers
ディレクトリに配置され、sound
ディレクトリ内のコードは一般的なサウンドの再生、録音、および処理機能に重点を置いています。
したがって、sound
ディレクトリは、drivers
ディレクトリ内のさまざまなタイプのサウンド カードのドライバを呼び出します。これにより、カーネルは、サウンドのLinux
再生、録音、処理のための複数のサウンド カード デバイスの使用をサポートし、ユーザー プログラムに一連のインターフェイスと機能を提供できます。
具体的には、sound
ディレクトリが主に実装しているもの、またはLinux
現在サウンドを処理しているモジュールのアーキテクチャはの略称であり、システム内のサウンド処理のための高度なアーキテクチャALSA
です。この仕様では、システムがさまざまなサウンド カード デバイスをサポートできるようにする一連のドライバーとライブラリを定義し、アプリケーションがサウンドを簡単に録音、再生、処理できるようにする一連のインターフェイスと機能を提供します。Advanced Linux Sound Architecture
Linux
alsa
Linux
さらにalsa
、このディレクトリには、サブディレクトリsound
など、他のいくつかのサウンド ドライバおよびモジュールも含まれています。サブディレクトリは、徐々に置き換えられてきた古いサウンド アーキテクチャの頭字語です。oss
Open Sound System
Linux
alsa
さらに、sound
このディレクトリには、USB サウンド カード ドライバー、Bluetooth ヘッドセット ドライバーなど、他のいくつかのサウンド ドライバーとモジュールも含まれています。これらのドライバーとモジュールは、さまざまなサウンド カード デバイスをサポートし、Linux システムがサウンドを再生、録音、処理できるようにする一連のインターフェイスと機能を提供します。
S.tools
ディレクトリ
Linux カーネル ソース ディレクトリには、tools
通常、カーネルの開発とデバッグに使用されるいくつかのツールとユーティリティのソース コードが含まれています。これらのツールの中には C で書かれたものもありますが、その他のツールはPython
他のスクリプト言語で書かれています。具体的には:
- これらのツールには、システムのデバッグやパフォーマンス分析のためのいくつかのプログラムが含まれています
perf
。ftrace
kconfig
カーネルの構築とコンパイルのkbuild
ためのツールもいくつか含まれています。- シミュレーションやテスト用のプログラム ( や
ktest
などkvm
)も含まれています。
tools
ディレクトリ内のツールとユーティリティは、カーネルの開発とデバッグにとって非常に重要です。通常、上級Linux
カーネル開発者は、これらのツールの使用法と実装原則をよく知っている必要があります。
T.usr
カタログ
usr
このディレクトリは、ユーザーがパッケージ化して圧縮したカーネル実装のソース コードです。
U.virt
ディレクトリ
virt
このディレクトリは、Linux
カーネルの仮想化サポートのコード実装を提供します。
たとえば、virt/kvm
このディレクトリには、Linux
カーネル内のKVM
仮想化モジュールのソース コードが含まれており、これにより Linux カーネルが仮想マシン モニタ ( VMM
) として機能し、仮想マシンを実行できるようになります。
W.LICENSE
ディレクトリ
Linux
カーネル ソース ディレクトリ内のディレクトリには、カーネル ソースで使用されるさまざまなライセンスのテキスト ( 、、など)がLICENSES
含まれています。Linux
GPL
LGPL
BSD
MIT
このディレクトリの目的は、Linux
カーネル ソース コードの開発者が各ライセンスの特定の内容と制限を簡単に表示して理解できるようにすることです。
Linux
このディレクトリは、カーネル ソース コードのオープン性と透明性を確保し、誰もLinux
がカーネル ソース コードの使用条件と制限を理解して、これらのライセンスと規制をより適切に遵守できるようにすることを目的としています。
2. 文書化
カーネル ソース コードディレクトリには、ディレクトリに加えてLinux
いくつかのファイルが保存されており、これらのファイルにはさまざまな用途があります。
A.COPYING
書類
Linux
カーネル ソース コード ディレクトリ内のファイルは、カーネル ソース コードの使用に関する条件と制限をCOPYING
規定する著作権表示ファイル、つまりライセンスです。Linux
Linux
カーネル ソース コードで使用されるライセンスは ですGPLv2
。オープンソース ライセンスでは、誰でもカーネル ソース コードをGPLv2
自由に使用、コピー、配布、変更できると規定されていますが、ライセンスを使用すると、得られる結果もオープンソース化されます。Linux
GPL
Linux
カーネルのソース コードのほとんどは同じ を使用しますGPLv2
が、一部のシステム コールなどの例外もあり、対応する認可ステートメントは次 LICENSES/exceptions/Linux-syscall-note
のとおりです。
b.CREDIT
ファイル
Linux
カーネル ソース ディレクトリ内のファイルには、次のようなカーネルに貢献したCREDIT
すべての人々がリストされています。Linux
- カーネル開発者
- メンテナー
- テスター
- ……
CREDIT
Linux
このファイルの目的は、カーネルに貢献したすべての人々を讃え、感謝し、彼らの貢献と成果を文書化することです。
同時に、CREDIT
このドキュメントはLinux
コミュニティ文化の一部でもあり、誰もがカーネルの開発と保守Linux
に参加できるように、カーネル開発のオープンさ、協力、コミュニティ精神を強調しています。Linux
c.Kbuild
ファイル
Linux
カーネル ソース ディレクトリ内のファイルは、カーネルのKbuild
構築に使用されます。このファイルは主にカーネルを構築するための構成を定義することに注意してください。カーネルのコンパイル時に実行するコマンドは主にファイルで定義されます。Linux
Makefile
Kbuild
Linux
Makefile
Makefile
Kbuild
Linux
このファイルの機能は、カーネルの構築プロセスを自動化し、開発者がLinux
カーネルを簡単にコンパイル、構築、インストールできるようにすることです。
同時に、Kbuild
このファイルは次のような高度なコンパイル機能も提供します。
- モジュラーコンパイルをサポート
- クロスコンパイル
- 並列コンパイル
- ……
これらの機能により、Linux
カーネルの構築がより柔軟かつ効率的になります。
D.MAINTAINERS
ファイル
Linux
カーネル ソース ディレクトリ内のファイルには、MAINTAINERS
現在のすべてのカーネルのメンテナのリストが保存されています。Linux
カーネル内のさまざまなサブシステムの保守者と貢献者を記録します。
MAINTAINERS
このファイルの役割は、開発者がサブシステムの責任を負うメンテナまたはコントリビュータをすぐに見つけられるようにして、コードの提出、修復、または共同開発を容易にすることです。
MAINTAINERS
このファイルには、Linux
カーネル内の各サブシステムの保守者および貢献者の名前、電子メール アドレス、会社、担当サブシステム、およびその他の情報がリストされています。このファイルを通じて、開発者は関心のあるサブシステムを担当するメンテナやコントリビュータを見つけて、コードを送信したり問題を報告したりできます。
MAINTAINERS
このドキュメントは開発者向けのリファレンスであるだけでなく、Linux
カーネル コミュニティの組織化および管理ツールとしても機能します。このファイルを通じて、カーネル コミュニティは各サブシステムのメンテナとコントリビュータを管理および調整し、カーネルの良好な開発と安定性Linux
を確保できます。Linux
E.Makefile
ドキュメント
Linux
カーネル ソース ディレクトリ内のファイルは、Makefile
カーネルをコンパイルするために使用されます。これには、カーネルのコンパイル時に実行する必要がある次のような一連のコマンドが含まれています。
- カーネルイメージを生成するためのコマンド
- カーネルモジュールを生成するコマンド
- ……
Makefile
ファイルはKbuild
ファイル内の構成情報を読み取り、カーネル ソース コードをコンパイルするためのコンパイル コマンドを生成します。
カーネル イメージとモジュールのコンパイルに加えて、Makefile
次のような他の操作がファイル内で定義されます。
- カーネルをインストールする
- パッケージ化されたカーネル
- コンパイルされたファイルをクリアする
- ……
Makefile
このファイルは、make
コマンド呼び出し時のさまざまなターゲットの指定に応じて、make all
カーネルとモジュールのコンパイル、make install
カーネルのインストール、make clean
コンパイルによって生成されたファイルのクリアなど、さまざまな操作を実行します。
F.README
ドキュメント
Linux
カーネル ソース ディレクトリ内のファイルREADME
には、カーネルの特定のバージョンに関する次のような基本情報が含まれています。
- カーネルのバージョン番号
- サポートされているハードウェア プラットフォーム
- インストールおよび構成ガイド
- ……
さらに、README
ファイルには次のような他の有用な情報が含まれる場合があります。
- 既知の問題、制限事項
- バグ修正
通常、README
ファイルには、ユーザーがすぐに使い始めるのに役立つカーネルに関する基本情報が含まれています。