Skip to content

第1回勉強会 : 新装改訂版 Linuxのブートプロセスをみる 2014.11.21

tokuty edited this page Nov 21, 2014 · 6 revisions

概要

http://connpass.com/event/9835/

  • 2014/11/21(金)
  • 19:00 〜 21:00
  • 大津市ふれあいプラザ 大津市浜大津四丁目1番1号明日都浜大津

このページの使い方: 目次に沿って、事前に疑問とかネタとか議論したいこととか、名前とともにメモっておいてください。

タイムテーブル

  • 19:00 - 19:30 自己紹介、勉強会の趣旨説明。
  • 19:30 - 20:45 1章ざくっと。雰囲気にまかせて強引に1章を進めます。
  • 20:45 - 21:00 かんたんな振り返りと、次回予定日決定

結論

読めた。 次回:Linuxカーネル2.6 解読室。 ふわっとざくっと読む。気になったことはその場またはその場までにメモる。 次々会:12ステップで作る組込みOS自作入門

第1章 ハードウェア

  • 徳:懐かしのキーワード:「起動ディスクでフォーマットする」「LILO」

1.1 本書の目標

1.2 CPUの動作モード

1.2.1 リアルモード

1.2.2 プロテクトモード

1.2.3 仮想8086モード

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・2が使われるという件について。このページが参考になった。

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章 reset_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 kthread()

第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カーネルのデバッグ

You can’t perform that action at this time.