20199314 Linuxカーネルの原理と作業の第四週の解析た.md

MenuOS建設

、Linuxカーネルのソースコードの紹介

Linuxカーネルのソースコードのディレクトリ構造が示されています

これは、コードの種類を格納するサブディレクトリの数が含まれています。

  1. アーチ:これは、このようなようにアームのx86、MIPS、PPCおよびAS CPUアーキテクチャ、多くの内部に格納されている関連付けられているディレクトリスキーマです。研究は主にX86システムなので、フォーカスX86ディレクトリに基づいています。

  2. ブロック: NAND、iNand、たとえば、Linuxのブロック、(全体へのアクセス単位のブロック(バイトの整数倍、等セクタ))ブロック装置において、SDカード、ハードドライブ、および他のデバイスがブロックされています。あなたは、ほぼブロックデバイスがストレージデバイスであると考えることができます。デバイス管理部に格納されているいくつかのディレクトリブロック分権のLinuxシステム・コード。

  3. 暗号:英語の意味が暗号化されています。一般的な暗号化アルゴリズムのさまざまないくつかのC言語コードのこのディレクトリ分権化。たとえば、CRC32、MD5、SHA1などのため。

  4. ドキュメント:いくつかのドキュメントを置きます。

  5. ドライバ: Linuxカーネルのサポートのハードウェアデバイスドライバのソースコードのすべてのカテゴリを示しますドライブのディレクトリ、。一部の学習に焦点を当てる必要があります。

  6. ファームウェア:ファームウェア。ファームウェアとは何ですか?実際には、ファームウェア、ソフトウェアですが、ソフトウェアはファームウェアと呼ばれるICを実行している内部に固定されていますS5PV210のようなIROMコードインチ
  7. FS: FSは、Linuxでサポートされているさまざまなファイル・システムの実現を一覧表示し、ファイルシステム、ファイルシステム、です。
  8. 含める:ヘッダファイルのディレクトリ、パブリック(共有様々なCPUアーキテクチャ)ヘッダファイルはここにあります。アーチ/アーム/ディレクトリとサブディレクトリを含む各CPUアーキテクチャ固有のヘッダファイル。
  9. INIT:コードはLinuxカーネルがこのディレクトリを開始したときのinit初期化は、カーネルの初期化コードの意味です。

二、Linuxカーネルブートしきい値問題

我々はすべて知っているように、ハイレベル言語およびアセンブリ言語は、主な機能が活性化されることで始まるmain.cの機能、スイッチングプロセスから最初に読みます。しかし、Linuxカーネルは、そこもののmain.cの機能が、それはstart_kernel機能によって開始することです。

第三に、シンプルなカーネル(実験棟の環境下)構造--MenuOS

ステップ:Linuxシステムと、単純なファイルシステム稼働。
QEMUのシミュレーションカーネルとまず、イメージ、bzImageはgzip圧縮を通じてのvmlinuxファイル、圧縮されたカーネルイメージです。bImageとzImageのは、カーネルの大きさを表しています。initrdのルートファイルシステムはrootfs.imgと交換しました。
コードは以下の通りであります:

    $ cd ~/LinuxKernel/
    $ qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img

自分のコンピュータ上でLinuxカーネルを構築するプロセスは、スピードが遅すぎるので、何のダウンロードはダウンロードの失敗ではありません。

第四に、使用GDBデバッグカーネルの追跡

GBDトレースデバッグカーネル・プロセスは、次のコードを実行する必要があります。

 qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S

-sは、GPUの初期化の前にフリーズ表し、-s代表は、デフォルトのポート1234を使用してGDB-サーバーを作成します。

在gdb界面中targe remote之前加载符号表,并用1234这个端口进行连接,代码如下:

 (gdb)file linux-3.18.6/vmlinux 
   target remote:1234

V.の概要

三つの主要なプロセスの作成プロセスがinit_taskある()、kernel_init()、kthreadd()。米国特許第0,1,2それぞれのプロセス。前記初期プロセスkernel_initに由来init_task()()、kthreadd()の両方のカーネル・デーモンを実行前者実行ユーザプロセス。

おすすめ

転載: www.cnblogs.com/morvalhe/p/11618596.html