最終更新:2015-10-22 (木) 03:07:23 (3081d)
参考図書/新装改訂版Linuxのブートプロセスをみる
http://ascii.asciimw.jp/books/books/detail/978-4-04-891393-5.shtml
http://tatsu-zine.com/books/linux-bootprocess
目次
まえがき
第1章 ハードウェア
- 1.1 本書の目標
- 1.2 CPUの動作モード
- 1.2.1 リアルモード(real mode)
- 1.2.2 プロテクトモード(protect mode)
- 1.2.3 仮想8086モード(virtual 8086 mode)
- 1.2.4 64bitモード
- 1.2.5 互換モード
- 1.2.6 リアルモードからプロテクトモードへの移行
- 1.2.7 プロテクトモードからリアルモードへの移行
- 1.2.8 IA-32モードからIA-32eモードへの移行
- 1.2.9 IA-32eモードからIA-32モードへの移行
- 1.3 レジスタ
- 1.4 メモリ管理
- 1.4.1 セグメント
- 1.4.2 リアルモードのセグメント
- 1.4.3 プロテクトモードのセグメント
- 1.4.4 64bitモードのセグメント
- 1.4.5 ページング
- 1.4.6 ページングのアドレス変換
- 1.4.7 ページディレクトリとページテーブル
- 1.4.8 64bitモードのページング
- 1.4.9 TLB
- 1.5 保護機能
- 1.5.1 特権レベル
- 1.5.2 特権命令
- 1.5.3 セグメントへのアクセス
- 1.5.4 ページフレームへのアクセス
- 1.6 割込みと例外
- 1.6.1 割込みの発生源
- 1.6.2 例外の発生源
- 1.6.3 割込みと例外のベクタ
- 1.6.4 割込みのマスク
- 1.6.5 リアルモードの処理
- 1.6.6 プロテクトモードの処理
- 1.6.7 64bitモードの処理
- 1.7 外部機器との入出力
- 1.7.1 I/Oポートのアドレス
- 1.7.2 I/O命令
- 1.7.3 Memory Mapped I/O
- 1.7.4 I/Oアクセスの保護
- 1.8 PC/ATアーキテクチャ
- 1.8.1 予約されたアドレス領域
- 1.8.2 1MB以上のメモリ
- 1.8.3 A20
- 1.8.4 割込みコントローラ
- 1.8.5 BIOS-
第2章 ブー-トローダからカーネル起動
- 2.1 ブートの概要
- 2.2 ブートローダ
- 2.2.1 いろいろなブートローダ
- 2.2.2 ソースコードについての注意
- 2.3 GRUB2のMBR
- 2.4 GRUB core
- 2.5 GRUB kernel
第3章 圧縮カーネルの解凍
- 3.1 解凍ルーチン概要
- 3.2 セグメント・レジスタの初期設定をおこなう
- 3.3 64bitモードに移行する
- 3.4 プログラムを移動する
- 3.5 圧縮カーネルの解凍
第4章 startup_64ルーチン
- 4.1 64bitカーネルのメモリマップ
- 4.1.1 第1段階のページテーブル
- 4.1.2 第2段階のページテーブル
- 4.1.3 Linuxのページテーブルの名称
- 4.2 startup_64コード解説
第5章 start_kernel()とsetup_arch()
- 5.1 x86_64_start_kernel?()
- 5.2 start_kernel()
- 5.3 setup_arch()
- 5.4 init_memory_mapping()
- 5.5 early_memremap?()
- 5.6 paging_init?()
- 5.7 mm_init?()
第6章 割込みの初期設定
- 6.1 3つの時計
- 6.1.1 リアルタイム・クロック
- 6.1.2 プログラマブル・インターバルタイマ
- 6.1.3 タイムスタンプ・カウンタ
- 6.2 trap_init?()
- 6.3 init_IRQ?()
- 6.4 timekeeping_init()
- 6.5 time_init?()
- 6.6 setup_local_APIC?()
- 6.7 setup_IO_APIC?()
第7章 rest_init()とkernel_init()
- 7.1 rest_init()
- 7.2 cpu_idle?()
- 7.3 kernel_init()
- 7.4 do_pre_smp_initcalls()とdo_basic_setup()
- 7.5 populate_rootfs()
- 7.6 kthreadd()
第8章 kernel_thread()
- 8.1 プロセスとスレッド
- 8.2 kernel_thread()
- 8.3 do_fork?()
- 8.4 copy_process?()
- 8.5 copy_thread?()
- 8.6 alloc_pid?()
- 8.7 kernel_thread_helper?()
第9章 ユーザープロセスの起動とルートファイルシステムのマウント
- 9.1 linux_binfmt
- 9.2 kernel_execve()とsys_execve()
- 9.3 sys_execve()
- 9.4 copy_strings()
- 9.5 search_binary_handler()
- 9.6 load_script()
- 9.7 load_elf_binary()
- 9.8 kernel_execve?()再び
- 9.9 インタープリタの起動
- 9.10 /initスクリプトの実行
第10章 QEMUを使ってカーネルデバッグ
- 10.1 ゲストOSの準備
- 10.2 GRUB2のデバッグ
- 10.3 gdbのコンパイル
- 10.4 Linuxカーネルのデバッグ