Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
64bit UEFIからxv6を起動してみた
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
VTb
August 21, 2018
Technology
550
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
64bit UEFIからxv6を起動してみた
セキュリティキャンプ2018 システムプログラミングトラック OS開発ゼミ フルスクラッチOSに参加したときの成果発表スライドです。
VTb
August 21, 2018
More Decks by VTb
See All by VTb
VSP専用プロセッサ設計と実行エンジンIyokanについて
pibvt
0
350
MR1を支えた Ethernet&ROS システム
pibvt
3
1.3k
3日間で作る フルスクラッチHTTPサーバー on STM32F767 Nucleo
pibvt
14
6.1k
Hello_UEFI_で学ぶC言語ポインタ.pdf
pibvt
0
200
Other Decks in Technology
See All in Technology
AIで社員の自主発信に広報目線を組み込む
_mossann_t
0
140
おい、エージェントを使って終わらせろ
nwiizo
2
850
安心して変更できるWebフロントエンドの作り方
pirosikick
5
2.9k
beyond jj: config & tools ecosystem
indirect
0
5.8k
SREの視点で考えるSIEM活用術 〜AWS環境でのセキュリティ強化〜
cscengineer
PRO
0
160
Railsのように考える: See through the Master
snoozer05
PRO
5
1.2k
Issue 駆動でスペシャリストの意図を届ける、AI 実装のアクセシビリティ向上
thkt
0
130
10Xに技術的負債をもたらした「2つの境界の歪み」その構造と解消への営み
10xinc
0
2.3k
C#未経験の僕がAIに読めるコードを書かせるまで
maguroalternative
0
220
AIは推し活である。
kurazuuuuuu
1
940
AI 時代のスタートアップエコシステ厶から考究する技術的負債との向き合い方
m3m0r7
PRO
3
2.5k
積み重なった技術負債への挑戦 〜初手としての全社ゴト化〜
techtekt
PRO
0
1.5k
Featured
See All Featured
Ethics towards AI in product and experience design
skipperchong
2
380
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
Making Projects Easy
brettharned
120
6.8k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
240
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
580
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
How GitHub (no longer) Works
holman
316
150k
A Modern Web Designer's Workflow
chriscoyier
699
190k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
500
Transcript
64bit UEFIからxv6を起動してみた YⅠ OS開発ゼミ フルスクラッチOS @PiBVT
xv6とは? UNIX V6をMITがx86向けに再実装したもの コンパクト(約1万行) x86で BIOSから起動できる マルチコア対応などの改良有
なぜUEFI? BIOSは2020年までに互換機能が削除される →2020年以降もxv6を実機で動かしたい。 →xv6を64bit UEFIから起動できた人はいない(当社調べ) →何か楽しそう
起動するまでの壁 1.64bitのプロセッサで32bitのバイナリを実行する →32bitバイナリのOSを実行するためにCPUのモードを変更する →バイナリの64bit対応は必要ないため、少しの変更で動かすことが出来る 2.BIOSに依存した部分をUEFI用に書き換える →CPUの情報を取得する部分がBIOS依存のため、UEFI対応にする
x86-64のCPUモード x86-64には大別して以下のモードがある。 ・Real mode (16bit) ・Protected mode (16/32bit) ・Long mode
(64bit) UEFI起動時にCPUはLong modeであるため、 Long mode → Protected mode の移行をして32bitカーネルを実行する。
CPUモードの変更 たった6ステップでモード変更が出来る! Intel® 64 and IA-32 Architectures Software Developer’s Manual
V3より
が、なぜかpagingが有効化できない Legacy paged-protected modeでないといけない。 →ん? QEMUで確認するとPAEのフラグが立っている。 →PAEを無効化すると動いた。 仕様書はしっかりと読もう! (1週間以上溶かしました。)
モード移行後、カーネルの初期化関数が走り始める! が...
mpinit()がBIOS依存 mpinit()は各プロセッサのLAPICやIOAPIC等の情報を取得する関数 →BIOSが作成するMP Floating Pointer Structureを利用。 MP構造体はプロセッサの情報やAPIC関連の情報を持つ。 →UEFIにはそんなものない。 詰み?
UEFI用にmpinit_uefi()を実装しました。
UEFIにはMP構造体に相当するものとして MADT(Multiple APIC Description Table)がある。 UEFI側でMADTのアドレスを取得 →mpinit_uefi()内でMADTのアドレスからLAPICやIOAPICの情報を取得 →mpinit()のUEFI版移植完成。
壁を乗り越え、シェルが起動
UEFIからxv6が起動した ・IDEやディスプレイのドライバが動かないが、ほとんどの機能は動いた。 ・シリアルポート経由で表示できる。 ・lsやmkdir,echoなどのコマンドが動く。 今後の目標 ・フレームバッファを利用してディスプレイ上で表示できるようにしたい。 ・NICのデバドラとTCP/IPのプロトコルスタック作って通信したい。
経験してみて分かったこと ・既存のOSを改造することには、新しいものを作る場合とは違う難しさがある。 ・まずは、Intel SDMやUEFIの仕様書を読もう。話はそれから。 ・QEMU monitor等でレジスタ・メモリーの様子を観察すれば問題の原因をつかめる ・段階的に初期化関数が動くようになるのは快感 ・地獄のデバッグ作業を乗り越えシェルが起動したときの感動は言葉にできない 自作OSは楽しい!