Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
64bit UEFIからxv6を起動してみた
Search
VTb
August 21, 2018
Technology
540
0
Share
64bit UEFIからxv6を起動してみた
セキュリティキャンプ2018 システムプログラミングトラック OS開発ゼミ フルスクラッチOSに参加したときの成果発表スライドです。
VTb
August 21, 2018
More Decks by VTb
See All by VTb
VSP専用プロセッサ設計と実行エンジンIyokanについて
pibvt
0
340
MR1を支えた Ethernet&ROS システム
pibvt
3
1.3k
3日間で作る フルスクラッチHTTPサーバー on STM32F767 Nucleo
pibvt
14
6k
Hello_UEFI_で学ぶC言語ポインタ.pdf
pibvt
0
190
Other Decks in Technology
See All in Technology
エムスリーテクノロジーズ株式会社 エンジニア向け紹介資料 / M3 Technologies Company Deck
m3_engineering
0
180
データモデリング通り #5オンライン勉強会: AIに『ビジネスの文脈』を教え込むデータモデリング
datayokocho
0
290
Redmine次期バージョン7.0の注目新機能解説 — UI/UX強化と連携強化を中心に
vividtone
1
150
Gaussian Splattingの表現力を拡張する — 高周波再構成とインタラクションへのアプローチ —
gpuunite_official
0
190
可視化から活用へ — Mesh化・Segmentation・アライメントの研究動向
gpuunite_official
0
220
アプリブロック機能のつくりかたと、AIとHTMLの不合理な相性の良さについて
kumamotone
1
260
Gaussian Splattingの実用化 - 映像制作への展開
gpuunite_official
0
200
生成AI時代に信頼性をどう保ち続けるか - Policy as Code の実践
akitok_
1
470
CARTA HOLDINGS エンジニア向け 採用ピッチ資料 / CARTA-GUIDE-for-Engineers
carta_engineering
0
47k
「背中を見て育て」からの卒業 〜専門技術としてのテスト設計を軸に、品質保証のバトンを繋ぐ〜 #genda_tech_talk
nihonbuson
PRO
3
1.5k
M&Aで増え続けるプロダクトに少数QAはどう立ち向かうか─GENDAが挑む、全員で取り組む品質標準化戦略 / GENDA Tech Talk #4
genda
0
110
いつの間にかデータエンジニア以外の業務も増えていたけど、意外と経験が役に立ってる
zozotech
PRO
0
640
Featured
See All Featured
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
550
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
The untapped power of vector embeddings
frankvandijk
2
1.7k
Producing Creativity
orderedlist
PRO
348
40k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Writing Fast Ruby
sferik
630
63k
How to Ace a Technical Interview
jacobian
281
24k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
370
SEO for Brand Visibility & Recognition
aleyda
0
4.5k
BBQ
matthewcrist
89
10k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
10k
Building Adaptive Systems
keathley
44
3k
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は楽しい!