Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Linuxカーネルクローンの作り方

Ren Kimura
September 11, 2016

 Linuxカーネルクローンの作り方

OSもくもく会 LT 2016/9/11

Ren Kimura

September 11, 2016
Tweet

More Decks by Ren Kimura

Other Decks in Programming

Transcript

  1. Linuxブートのおおまかな流れ 1. ブートローダー stage1 (MBR) a. BIOSを使ってカーネル本体とstage2をメモリ上にロード 2. ブートローダー stage2

    a. GDTの仮設定, カーネル本体へのジャンプ 3. startup_32 (arch/i386/kernel/head.S) a. IDTの仮設定(割り込み割り込みは無視) 4. kernel_main (kernel/main.c) a. 本格的な初期化の開始 5. rest_init(kernel/main.c) a. カーネルスレッド起動
  2. メモリマップ <16-bit:real mode> 0x7c00 - 0x7e00 Boot Loader(loaderS1) 0x7000 -

    0x???? Boot alloc bit map 0x8000 - 0x8200 Boot Loader[2](loaderS1) <= Copy 0x8200 - 0xA0000 Kernel Image(temporary) <32-bit:protected mode> 0x00100000 - 0x???????? kernel body 0x???????? - 0x???????? init page table ~ init_pg_tables_end ~ 0x00300000 - 0x???????? root disk(mounted on /)
  3. 4. kernel_main • e820, early_bootメモリシステムの初期化(setup_arch) • プロセススケジューラの初期化(sched_init) • トラップの初期化(trap_init) •

    割り込みの初期化(init_IRQ) • タイマーの初期化(init_timers) • ソフトウェア割り込みの初期化(softirq_init) • スラブアロケータの初期化(kmem_cache_init) • ファイルシステムの初期化(vfs_caches_init)