Submit Search
Upload
Kernel bootstrap
•
1 like
•
1,348 views
Kai Sasaki
Follow
Learning resource of bootstraping linux kernel on x86.
Read less
Read more
Software
Report
Share
Report
Share
1 of 23
Download now
Download to read offline
Recommended
Page frame management
Page frame management
siburu
軽快なPlan 9 Update - Illumos KVM上陸 -
軽快なPlan 9 Update - Illumos KVM上陸 -
Go Saito
20apr2012 kernelvm7-main
20apr2012 kernelvm7-main
Shotaro Uchida
EE
EE
Tatsumi Naganuma
UEFI時代のブートローダ
UEFI時代のブートローダ
Takuya ASADA
ちょっと古いマシンにLinuxを
ちょっと古いマシンにLinuxを
Kenichiro MATOHARA
NetBSD on Google Compute Engine
NetBSD on Google Compute Engine
Ryo ONODERA
Play with UEFI
Play with UEFI
Takuya ASADA
Recommended
Page frame management
Page frame management
siburu
軽快なPlan 9 Update - Illumos KVM上陸 -
軽快なPlan 9 Update - Illumos KVM上陸 -
Go Saito
20apr2012 kernelvm7-main
20apr2012 kernelvm7-main
Shotaro Uchida
EE
EE
Tatsumi Naganuma
UEFI時代のブートローダ
UEFI時代のブートローダ
Takuya ASADA
ちょっと古いマシンにLinuxを
ちょっと古いマシンにLinuxを
Kenichiro MATOHARA
NetBSD on Google Compute Engine
NetBSD on Google Compute Engine
Ryo ONODERA
Play with UEFI
Play with UEFI
Takuya ASADA
UEFIで始めるLinux From Scratch
UEFIで始めるLinux From Scratch
Yuma Ohgami
Wiiリモコンで遊ぶ
Wiiリモコンで遊ぶ
A_Shotaro
Summer camp2018 group1
Summer camp2018 group1
openrtm
CUDAメモ
CUDAメモ
Yuuki Takano
UNIXアレコレ調べたい3
UNIXアレコレ調べたい3
Hirokazu Yatsunami
Summercamp2020 group2
Summercamp2020 group2
openrtm
UEFI向け自作OSの紹介
UEFI向け自作OSの紹介
Yuma Ohgami
謎PCとの付き合い方(LILO東海道 2015/5発表分)
謎PCとの付き合い方(LILO東海道 2015/5発表分)
shimadah
retrobsd-2012-JUL-07 at JNUG BSD BoF
retrobsd-2012-JUL-07 at JNUG BSD BoF
たけおか しょうぞう
Raspberry Piにdiskless modeのalpine linuxを導入してみる
Raspberry Piにdiskless modeのalpine linuxを導入してみる
Kenichiro MATOHARA
20分でわかった事にするパワーマネジメント
20分でわかった事にするパワーマネジメント
magoroku Yamamoto
CybozuのOSS(WalB)へコミットしてみた/使ってみた
CybozuのOSS(WalB)へコミットしてみた/使ってみた
Yuma Ohgami
opencoconの作り方 (オープンソースカンファレンス2015 Tokyo/Spring 小江戸らぐセミナー)
opencoconの作り方 (オープンソースカンファレンス2015 Tokyo/Spring 小江戸らぐセミナー)
shimadah
モバイルノート
モバイルノート
s1170024
2020 04-11-koedo
2020 04-11-koedo
Hashimoto Hisashi
OS development beginner version 20160611
OS development beginner version 20160611
Langur
Making Editor written in Ruby version 20160611
Making Editor written in Ruby version 20160611
Langur
第2回勉強会資料 柏木
第2回勉強会資料 柏木
beyond0iwamoto
Kansai mrb gr_sakura
Kansai mrb gr_sakura
Kosuga Masakatsu
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
basicinc_dev
LinAction Theme LPICの問題を解いてみる~システムアーキテクチャ編~
LinAction Theme LPICの問題を解いてみる~システムアーキテクチャ編~
cyberblack28 Ichikawa
Linux Kernel Module - For NLKB
Linux Kernel Module - For NLKB
shimosawa
More Related Content
What's hot
UEFIで始めるLinux From Scratch
UEFIで始めるLinux From Scratch
Yuma Ohgami
Wiiリモコンで遊ぶ
Wiiリモコンで遊ぶ
A_Shotaro
Summer camp2018 group1
Summer camp2018 group1
openrtm
CUDAメモ
CUDAメモ
Yuuki Takano
UNIXアレコレ調べたい3
UNIXアレコレ調べたい3
Hirokazu Yatsunami
Summercamp2020 group2
Summercamp2020 group2
openrtm
UEFI向け自作OSの紹介
UEFI向け自作OSの紹介
Yuma Ohgami
謎PCとの付き合い方(LILO東海道 2015/5発表分)
謎PCとの付き合い方(LILO東海道 2015/5発表分)
shimadah
retrobsd-2012-JUL-07 at JNUG BSD BoF
retrobsd-2012-JUL-07 at JNUG BSD BoF
たけおか しょうぞう
Raspberry Piにdiskless modeのalpine linuxを導入してみる
Raspberry Piにdiskless modeのalpine linuxを導入してみる
Kenichiro MATOHARA
20分でわかった事にするパワーマネジメント
20分でわかった事にするパワーマネジメント
magoroku Yamamoto
CybozuのOSS(WalB)へコミットしてみた/使ってみた
CybozuのOSS(WalB)へコミットしてみた/使ってみた
Yuma Ohgami
opencoconの作り方 (オープンソースカンファレンス2015 Tokyo/Spring 小江戸らぐセミナー)
opencoconの作り方 (オープンソースカンファレンス2015 Tokyo/Spring 小江戸らぐセミナー)
shimadah
モバイルノート
モバイルノート
s1170024
2020 04-11-koedo
2020 04-11-koedo
Hashimoto Hisashi
OS development beginner version 20160611
OS development beginner version 20160611
Langur
Making Editor written in Ruby version 20160611
Making Editor written in Ruby version 20160611
Langur
第2回勉強会資料 柏木
第2回勉強会資料 柏木
beyond0iwamoto
Kansai mrb gr_sakura
Kansai mrb gr_sakura
Kosuga Masakatsu
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
basicinc_dev
What's hot
(20)
UEFIで始めるLinux From Scratch
UEFIで始めるLinux From Scratch
Wiiリモコンで遊ぶ
Wiiリモコンで遊ぶ
Summer camp2018 group1
Summer camp2018 group1
CUDAメモ
CUDAメモ
UNIXアレコレ調べたい3
UNIXアレコレ調べたい3
Summercamp2020 group2
Summercamp2020 group2
UEFI向け自作OSの紹介
UEFI向け自作OSの紹介
謎PCとの付き合い方(LILO東海道 2015/5発表分)
謎PCとの付き合い方(LILO東海道 2015/5発表分)
retrobsd-2012-JUL-07 at JNUG BSD BoF
retrobsd-2012-JUL-07 at JNUG BSD BoF
Raspberry Piにdiskless modeのalpine linuxを導入してみる
Raspberry Piにdiskless modeのalpine linuxを導入してみる
20分でわかった事にするパワーマネジメント
20分でわかった事にするパワーマネジメント
CybozuのOSS(WalB)へコミットしてみた/使ってみた
CybozuのOSS(WalB)へコミットしてみた/使ってみた
opencoconの作り方 (オープンソースカンファレンス2015 Tokyo/Spring 小江戸らぐセミナー)
opencoconの作り方 (オープンソースカンファレンス2015 Tokyo/Spring 小江戸らぐセミナー)
モバイルノート
モバイルノート
2020 04-11-koedo
2020 04-11-koedo
OS development beginner version 20160611
OS development beginner version 20160611
Making Editor written in Ruby version 20160611
Making Editor written in Ruby version 20160611
第2回勉強会資料 柏木
第2回勉強会資料 柏木
Kansai mrb gr_sakura
Kansai mrb gr_sakura
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
Viewers also liked
LinAction Theme LPICの問題を解いてみる~システムアーキテクチャ編~
LinAction Theme LPICの問題を解いてみる~システムアーキテクチャ編~
cyberblack28 Ichikawa
Linux Kernel Module - For NLKB
Linux Kernel Module - For NLKB
shimosawa
Linux Initialization Process (1)
Linux Initialization Process (1)
shimosawa
Linux Initialization Process (2)
Linux Initialization Process (2)
shimosawa
Linux Kernel Booting Process (1) - For NLKB
Linux Kernel Booting Process (1) - For NLKB
shimosawa
PFI Seminar 2010/02/18
PFI Seminar 2010/02/18
Preferred Networks
2章 Linuxカーネル - メモリ管理1
2章 Linuxカーネル - メモリ管理1
mao999
What Makes Great Infographics
What Makes Great Infographics
SlideShare
Masters of SlideShare
Masters of SlideShare
Kapost
STOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
STOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
Empowered Presentations
You Suck At PowerPoint!
You Suck At PowerPoint!
Jesse Desjardins - @jessedee
10 Ways to Win at SlideShare SEO & Presentation Optimization
10 Ways to Win at SlideShare SEO & Presentation Optimization
Oneupweb
How To Get More From SlideShare - Super-Simple Tips For Content Marketing
How To Get More From SlideShare - Super-Simple Tips For Content Marketing
Content Marketing Institute
How to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & Tricks
SlideShare
Viewers also liked
(14)
LinAction Theme LPICの問題を解いてみる~システムアーキテクチャ編~
LinAction Theme LPICの問題を解いてみる~システムアーキテクチャ編~
Linux Kernel Module - For NLKB
Linux Kernel Module - For NLKB
Linux Initialization Process (1)
Linux Initialization Process (1)
Linux Initialization Process (2)
Linux Initialization Process (2)
Linux Kernel Booting Process (1) - For NLKB
Linux Kernel Booting Process (1) - For NLKB
PFI Seminar 2010/02/18
PFI Seminar 2010/02/18
2章 Linuxカーネル - メモリ管理1
2章 Linuxカーネル - メモリ管理1
What Makes Great Infographics
What Makes Great Infographics
Masters of SlideShare
Masters of SlideShare
STOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
STOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
You Suck At PowerPoint!
You Suck At PowerPoint!
10 Ways to Win at SlideShare SEO & Presentation Optimization
10 Ways to Win at SlideShare SEO & Presentation Optimization
How To Get More From SlideShare - Super-Simple Tips For Content Marketing
How To Get More From SlideShare - Super-Simple Tips For Content Marketing
How to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & Tricks
Similar to Kernel bootstrap
Spresense meetup#2 try_multicore_programming
Spresense meetup#2 try_multicore_programming
義則 太田
あるキャッシュメモリの話
あるキャッシュメモリの話
nullnilaki
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1
信之 岩永
あるブートローダの話
あるブートローダの話
nullnilaki
PIC RoR Heroku
PIC RoR Heroku
mgwsuzuki
Twitter for PC-G850
Twitter for PC-G850
Masayuki Sugahara
PSoCまつり「PSoCの美味しい料理法」
PSoCまつり「PSoCの美味しい料理法」
betaEncoder
20111015 勉強会 (PCIe / SR-IOV)
20111015 勉強会 (PCIe / SR-IOV)
Kentaro Ebisawa
20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門
20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門
Takeshi HASEGAWA
Exploring the x64
Exploring the x64
FFRI, Inc.
core dumpでcode golf
core dumpでcode golf
Nomura Yusuke
0章 Linuxカーネルを読む前に最低限知っておくべきこと
0章 Linuxカーネルを読む前に最低限知っておくべきこと
mao999
Extreme Assembler Tanka - eagle0wl
Extreme Assembler Tanka - eagle0wl
asmtanka
あなたのAppleにもEFIモンスターはいませんか? by Pedro Vilaça - CODE BLUE 2015
あなたのAppleにもEFIモンスターはいませんか? by Pedro Vilaça - CODE BLUE 2015
CODE BLUE
Raspberrypi+yocto in Yocto Workshop Japan #1
Raspberrypi+yocto in Yocto Workshop Japan #1
kazuya-nisimura
20150630_MySQL勉強会
20150630_MySQL勉強会
masayoshi shiraishi
計算機理論入門01
計算機理論入門01
Tomoyuki Tarumi
リバースエンジニアリングのための新しいトレース手法 - PacSec 2010
リバースエンジニアリングのための新しいトレース手法 - PacSec 2010
Tsukasa Oi
An idea of bios emulation on b hy ve
An idea of bios emulation on b hy ve
Takuya ASADA
Similar to Kernel bootstrap
(19)
Spresense meetup#2 try_multicore_programming
Spresense meetup#2 try_multicore_programming
あるキャッシュメモリの話
あるキャッシュメモリの話
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1
あるブートローダの話
あるブートローダの話
PIC RoR Heroku
PIC RoR Heroku
Twitter for PC-G850
Twitter for PC-G850
PSoCまつり「PSoCの美味しい料理法」
PSoCまつり「PSoCの美味しい料理法」
20111015 勉強会 (PCIe / SR-IOV)
20111015 勉強会 (PCIe / SR-IOV)
20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門
20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門
Exploring the x64
Exploring the x64
core dumpでcode golf
core dumpでcode golf
0章 Linuxカーネルを読む前に最低限知っておくべきこと
0章 Linuxカーネルを読む前に最低限知っておくべきこと
Extreme Assembler Tanka - eagle0wl
Extreme Assembler Tanka - eagle0wl
あなたのAppleにもEFIモンスターはいませんか? by Pedro Vilaça - CODE BLUE 2015
あなたのAppleにもEFIモンスターはいませんか? by Pedro Vilaça - CODE BLUE 2015
Raspberrypi+yocto in Yocto Workshop Japan #1
Raspberrypi+yocto in Yocto Workshop Japan #1
20150630_MySQL勉強会
20150630_MySQL勉強会
計算機理論入門01
計算機理論入門01
リバースエンジニアリングのための新しいトレース手法 - PacSec 2010
リバースエンジニアリングのための新しいトレース手法 - PacSec 2010
An idea of bios emulation on b hy ve
An idea of bios emulation on b hy ve
More from Kai Sasaki
Graviton 2で実現する コスト効率のよいCDP基盤
Graviton 2で実現する コスト効率のよいCDP基盤
Kai Sasaki
Infrastructure for auto scaling distributed system
Infrastructure for auto scaling distributed system
Kai Sasaki
Continuous Optimization for Distributed BigData Analysis
Continuous Optimization for Distributed BigData Analysis
Kai Sasaki
Recent Changes and Challenges for Future Presto
Recent Changes and Challenges for Future Presto
Kai Sasaki
Real World Storage in Treasure Data
Real World Storage in Treasure Data
Kai Sasaki
20180522 infra autoscaling_system
20180522 infra autoscaling_system
Kai Sasaki
User Defined Partitioning on PlazmaDB
User Defined Partitioning on PlazmaDB
Kai Sasaki
Deep dive into deeplearn.js
Deep dive into deeplearn.js
Kai Sasaki
Optimizing Presto Connector on Cloud Storage
Optimizing Presto Connector on Cloud Storage
Kai Sasaki
Presto updates to 0.178
Presto updates to 0.178
Kai Sasaki
How to ensure Presto scalability in multi use case
How to ensure Presto scalability in multi use case
Kai Sasaki
Managing multi tenant resource toward Hive 2.0
Managing multi tenant resource toward Hive 2.0
Kai Sasaki
Embulk makes Japan visible
Embulk makes Japan visible
Kai Sasaki
Maintainable cloud architecture_of_hadoop
Maintainable cloud architecture_of_hadoop
Kai Sasaki
図でわかるHDFS Erasure Coding
図でわかるHDFS Erasure Coding
Kai Sasaki
Spark MLlib code reading ~optimization~
Spark MLlib code reading ~optimization~
Kai Sasaki
How I tried MADE
How I tried MADE
Kai Sasaki
Reading kernel org
Reading kernel org
Kai Sasaki
Reading drill
Reading drill
Kai Sasaki
Kernel ext4
Kernel ext4
Kai Sasaki
More from Kai Sasaki
(20)
Graviton 2で実現する コスト効率のよいCDP基盤
Graviton 2で実現する コスト効率のよいCDP基盤
Infrastructure for auto scaling distributed system
Infrastructure for auto scaling distributed system
Continuous Optimization for Distributed BigData Analysis
Continuous Optimization for Distributed BigData Analysis
Recent Changes and Challenges for Future Presto
Recent Changes and Challenges for Future Presto
Real World Storage in Treasure Data
Real World Storage in Treasure Data
20180522 infra autoscaling_system
20180522 infra autoscaling_system
User Defined Partitioning on PlazmaDB
User Defined Partitioning on PlazmaDB
Deep dive into deeplearn.js
Deep dive into deeplearn.js
Optimizing Presto Connector on Cloud Storage
Optimizing Presto Connector on Cloud Storage
Presto updates to 0.178
Presto updates to 0.178
How to ensure Presto scalability in multi use case
How to ensure Presto scalability in multi use case
Managing multi tenant resource toward Hive 2.0
Managing multi tenant resource toward Hive 2.0
Embulk makes Japan visible
Embulk makes Japan visible
Maintainable cloud architecture_of_hadoop
Maintainable cloud architecture_of_hadoop
図でわかるHDFS Erasure Coding
図でわかるHDFS Erasure Coding
Spark MLlib code reading ~optimization~
Spark MLlib code reading ~optimization~
How I tried MADE
How I tried MADE
Reading kernel org
Reading kernel org
Reading drill
Reading drill
Kernel ext4
Kernel ext4
Kernel bootstrap
1.
Kernel Bootstrap Kai Sasaki(@Lewuathe)
2.
今日のお話 • BIOS • Bootloader •
header.S • main.c ※アーキテクチャはx86
3.
まず電源ボタンを押します
4.
マザーボード 1.マザーボードに十分な電力が与えられる 2.CPUを走らせるためにすべてのregisterを初期化 3.Real modeで起動を開始する IP 0xfff0 CS
base 0xffff0000
5.
Real Mode • x86互換のCPUでの起動時の動作モード •
メモリを20bit(1MB)の空間で分割 • すべてのプログラムが直接的に メモリにアクセス可能
6.
Real Mode Mem メモリバスは20bit CPU register registerは16bit
7.
Real Mode Mem メモリバスは20bit CPU register registerは16bit メモリ空間は1MB(2^20)あるのに16bit registerしかない
8.
Real Mode 65535 65535 … CP:IP base address
offset
9.
Real Mode 65535 65535 … CP:IP 0x2000 0x0010 (0x2000
<< 4) + 0x1000 対象のアドレスは
10.
Reset Vector IP 0xfff0 CS
base 0xffff0000 0xffff0000:0xfff0 Logical Address
11.
Reset Vector IP 0xfff0 CS
base 0xffff0000 0xffff0000:0xfff0 Logical Address これをReset Vectorといい、すべての初期化が 終わった段階で最初に行う命令がこのアドレスに入っている
12.
jump命令 • Reset Vectorの先にはjump命令が入っている •
多くはBIOSへと飛ぶ無条件分岐命令 .section ".reset" .code16 .globl reset_vector reset_vector: .byte 0xe9 .int _start - ( . + 2 ) ... coreboot(http://www.coreboot.org/) より
13.
BIOS • ハードウェアの初期化、チェックを行い 次にブート可能なデバイスを探す • マザーボード毎に実装され、通常はROMなどの 不揮発性メモリの上に乗っている
14.
BIOS • ブートセクターを探す • デバイス毎にブートプログラムを可能している •
通常そのデバイスの先頭512byteに格納 P1 P2 P3BS 5120
15.
Master Boot Record •
ブートセクタにおいてあるプログラム • BIOSは先頭512byteの ロードのみ保証 • そのためこのプログラムが 後続のプログラムを次々に ロードしていく形になる http://ja.wikipedia.org/wiki/マスターブートレコード
16.
Bootloader • MBRにインストールされているソフトウェア • GRUBやLILOが一般的 •
BIOSはBootloaderを選択し処理を受け渡す • このBootloaderとして利用可能なプログラムは Kernelの を実装しているBoot Protocol https://github.com/torvalds/linux/blob/master/Documentation/x86/boot.txt
17.
GRUB stage1(boot.img) BIOS stage2 (diskboot.img) grub_main
18.
header • Boot Protocolでヘッダの設定が規定されている •
Bootloaderはこれらの設定を行う必要がある https://github.com/torvalds/linux/blob/master/arch/x86/boot/header.S#L280-L288
19.
kernel loading • Boot
Protocolに従いカーネルをメモリにロードする https://github.com/torvalds/linux/blob/master/Documentation/x86/boot.txt
20.
kernel setup • loadが完了すると処理がkernelに移る •
kernelのsetupは_startからはじまる • ここのメモリ上のoffsetはBootloaderは知っている https://github.com/torvalds/linux/blob/master/arch/x86/boot/header.S#L293
21.
header.S 1. label 1へのjump 2.
headerのsetup 3. start_of_setup 1. segment registerの検証 : dsとesの両segment registerを同じ箇所を指すようにする 2. スタックの設定 : 3. bssの設定 : 静的なデータ領域の設定を行う 4. main.cへのjump .byte 0xeb .byte start_of_setup-1f
22.
main.c https://github.com/torvalds/linux/blob/master/arch/x86/boot/main.c ここからはC お疲れ様でした
23.
Reference • linux-internals • http://0xax.gitbooks.io/linux-insides/content/index.html
Download now