ホームページ >システムチュートリアル >Linux >Linux カーネルのソースコードの読み取り体験の共有
Linux の人気が徐々に高まっているため、多くの人が Linux のインストールと設定にすでに慣れています。 Linux の活発な発展に伴い、Linux についてもっと知りたいと思う人が増えています。 Linux を深く理解したい場合は、Linux カーネルのソース コードを読んで分析する必要があります。
Linux カーネルのソース コードは、多くのソースから入手できます。一般に、インストールされた Linux システムでは、/usr/src/linux ディレクトリの内容がカーネル ソース コードです。インターネットからダウンロードすることもでき、解凍されたファイルは通常 Linux ディレクトリにあります。カーネル ソース コードには多くのバージョンがあり、最新の安定バージョンは 2.2.14 です。
Linux カーネルを読むのに不安を感じる人は、不要ではありますが、多くの人が抱いています。実際、Linux カーネルのような大規模で複雑なシステム コードを読み取るのは確かに難しく、想像されているほど達成不可能ではありません。忍耐力がある限り、困難は克服できます。実際、Linux のシャットダウン コマンドについては、会議に参加せずに実際に勉強して学ぶことがたくさんあります。
何をするにもスキルとツールが必要です。適切なアプローチによって作業を進めることができ、優れたツールを使用すれば、半分の労力で 2 倍の結果を得ることができます。 Linux カーネルのソース コードを読み取る場合も同じです。次に、カーネル ソース コードの読み取りに関する私の経験をいくつか紹介し、最後に Windows プラットフォームでの読み取りツールを紹介します。
ソースコードの読み込みをスムーズに進めるには、事前にソースコードの知識背景をある程度理解しておくのがベストです。 Linux カーネル ソース コード Linux カーネル コード読み取りツール の場合、基本的な要件は次のとおりだと思います: 1. オペレーティング システムの基本的な知識; 2. C 言語に精通していること、できればアセンブリ言語と GNUC の拡張知識があることスタンダードCのさらに、読む前に、Linux カーネル ソース コードの全体的な配布状況についても知っておく必要があります。最新のオペレーティング システムは通常、プロセス管理、メモリ管理、ファイル システム、ドライバー、ネットワークなどで構成されていることがわかっています。 Linux カーネルのソース コードを見ると、各ディレクトリがこれらの側面にほぼ対応していることがわかります。 Linux カーネルのソース コードは次のように構成されています (linux ディレクトリに相対していると想定されます):
archこのサブディレクトリには、このコア ソース コードでサポートされるハードウェア アーキテクチャに関連するコア コードが含まれています。たとえば、X86 プラットフォームの場合は i386 です。
include このディレクトリには、ほとんどのコア インクルード ファイルが含まれています。サポートされているアーキテクチャごとにサブディレクトリもあります。
init このディレクトリには、コアの起動コードが含まれています。
mmこのディレクトリには、すべてのビデオ メモリ管理コードが含まれています。特定のハードウェア アーキテクチャに関連するビデオ メモリ管理コードは、arch/*/mm ディレクトリにあります。たとえば、X86 に対応するコードは、arch/i386/mm/fault.c です。
driversシステム内のすべてのデバイス ドライバーはこのディレクトリにあります。さらに、いくつかのタイプのデバイス ドライバーに定義されており、それぞれに、drivers/sound に対応するサウンド カード ドライバーなど、対応するサブディレクトリもあります。
ipcこのディレクトリには、コアのプロセス間通信コードが含まれています。
modulesこのディレクトリには、構築され、動的にロードできるモジュールが含まれています。
fsLinux はファイル システム コードをサポートしました。ファイル システムが異なれば、対応するサブディレクトリも異なります。たとえば、ext2 ファイル システムは ext2 サブディレクトリに対応します。
カーネルのメインコアコード。同時に、プロセッサ構造に関連するコードが Arch/*/kernel ディレクトリに配置されます。
ネットコアネットワーク部品コード。上記の各サブディレクトリは、ネットワークの側面に対応します。
libこのディレクトリには、コア ライブラリ コードが含まれています。プロセッサ アーキテクチャに関連するライブラリ コードは、arch/*/lib/ ディレクトリに配置されます。
scriptsこのディレクトリには、コアの構成に使用されるスクリプト ファイルが含まれています。
Documentationこのディレクトリには、参照用のドキュメントが含まれています。
ソース コードの構造を理解したら、読み始めることができます。読解力あるいは順序については、いわゆる横の区別と縦の区別がございます。プログラムの実行順序に沿って徐々に進めていくのがいわゆる水平ビュー、Linux がどのようなシステムなのかをモジュール単位で進めていくのがいわゆる垂直ビューです。これらは絶対的なものではありませんが、組み合わせて使用されることがよくあります。 Linux ソース コードの場合、スタートアップ コードは Linux の起動シーケンスに沿って段階的に実行できます。その一般的なプロセスは次のとおりです (X86 プラットフォームを例にします):
./larch/i386/boot/bootSect.S-->./larch/i386/boot/setup.S-->./larch/i386/kernel/head.S-->./ init/main.c の start_kernel()。ビデオメモリ管理などの部分については、個別に取り出して読み出し、解析することが可能です。私の感覚では、最初はスタートアップ コードを順番に読んでから、プロセス部分やビデオ メモリ管理部分などの特別なトピックを読むのが最善です。各機能は段階的に実行する必要があります。実際、これは反復的なプロセスLinuxカーネルコード読み取りツールであり、一度読んだだけでは理解することは不可能です。
以上がLinux カーネルのソースコードの読み取り体験の共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。