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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
VTb
August 21, 2018
Technology
540
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
6k
Hello_UEFI_で学ぶC言語ポインタ.pdf
pibvt
0
190
Other Decks in Technology
See All in Technology
#エンジニアBooks 30分でわかる 「技術記事を書く技術」 / engineer-books 2026-06-30
jnchito
1
100
5分でわかるDuckDB Quack
chanyou0311
4
260
10年間のブログ発信を振り返って見えたWebアプリケーションエンジニアとしての軌跡
stefafafan
0
190
MUSUBI 田中裕一『AIと共に行う「しごとのリデザイン」- スモールバックオフィス編』AI Ops Lab #4
musubi
0
320
LayerX コーポレートエンジニアリング室におけるサプライチェーンセキュリティへの取り組み / Supply Chain Security at LayerX Corporate Engineering
yuyatakeyama
3
850
BPaaSで進むAIオペレーションの現在地 AI実装が効く領域とスケーラビリティの選定と実装
kentarofujii
0
210
AI時代に求められる技術力 フロンティア・クリエイティビティ / Technical Excellence in the AI Era: Frontier Creativity
kaonavi
0
110
アラート調査向けAIエージェントの本番導入とその後/AI Agents for Alert Investigation: Production Deployment and After
taddy_919
1
190
脱SaaS!FDEを支えるプロビジョニングと分離設計
knih
0
300
AIペネトレーションテスト・ セキュリティ検証「AgenticSec」紹介資料
laysakura
2
7.6k
水を運ぶ人としてのリーダーシップ
izumii19
4
1k
徹底討論!ECS vs EKS!
daitak
3
1.7k
Featured
See All Featured
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
エンジニアに許された特別な時間の終わり
watany
107
250k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
62
44k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
260
Skip the Path - Find Your Career Trail
mkilby
1
150
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
250
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
260
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.9k
Site-Speed That Sticks
csswizardry
13
1.2k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
400
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は楽しい!