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
AHCIに対応したい
Search
Totsugekitai
May 10, 2020
Programming
660
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
AHCIに対応したい
自作OSもくもく会オンライン
https://osdev-jp.connpass.com/event/175433/
で発表した内容です。
Totsugekitai
May 10, 2020
More Decks by Totsugekitai
See All by Totsugekitai
自作OSへの排他制御の実装
totsugekitai
0
630
x86_64での自作OS - サイボウズ・ラボユース 成果発表会
totsugekitai
0
770
フルスクラッチOS格闘記 〜タイマ割り込みをメインに〜
totsugekitai
0
860
自作OSのその手前 UEFI OSローダの作成
totsugekitai
0
190
Other Decks in Programming
See All in Programming
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
11
5.8k
ECSアプリログをFireLensでコスト削減しようとしたけど諦めた話 in Fargate×Node.js
akihisaikeda
2
4.2k
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
250
Honoでのサプライチェーン侵害対策 〜 3つのライブラリに学ぶ
yusukebe
6
1.3k
AI時代のUIはどこへ行く?その2!
yusukebe
21
7.2k
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3.3k
Signal Forms: Details & Live Coding @enterJS 2026 in Mannheim
manfredsteyer
PRO
0
150
Performance Engineering for Everyone
elenatanasoiu
0
160
Strategic Design in the Frontend: Moduliths & Micro Frontends @DDDEurope
manfredsteyer
PRO
0
110
ふつうのFeature Flag実践入門
irof
7
4k
dRuby over BLE
makicamel
2
380
RTSPクライアントを自作してみた話
simotin13
0
610
Featured
See All Featured
The Limits of Empathy - UXLibs8
cassininazir
1
360
WENDY [Excerpt]
tessaabrams
11
38k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
180
How to Ace a Technical Interview
jacobian
281
24k
Skip the Path - Find Your Career Trail
mkilby
1
150
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
62
44k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
200
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
400
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
950
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Transcript
AHCIに対応したい 自 作 OS も く も く 会 オ
ン ラ イ ン by @totsugeki_tai 2020.5.10
自己紹介 2/28 自己紹介
自己紹介 自己紹介 3/28 ハンドルネーム:突撃隊 所属:筑波大学情報科学類 3 年 サイボウズ・ラボユース 第 9
期 最近はファイルシステムとか
私の自作OSの紹介 自己紹介 4/28 ここで公開しています https://github.com/Totsugekitai/minOSv2 最近は feature-ext2 ブランチにいます
AHCI に対応したい 5/28 AHCI に対応したい
自作OSでも二次記憶を読み書き AHCI に対応したい 6/28 したいですよね? 今回は AHCI で SATA デバイスを読み書きして
みました
AHCIって何ですか? AHCI に対応したい 7/28 Advanced Host Controller Interface SATA コントローラの仕様の一つ
SATA をいい感じに操作するデバイス 仕様はいい感じではない
仕様書は意外とコンパクト AHCI に対応したい 8/28 137 ページ 意外と少ない サッとできそう! 落とし穴がたくさんあった
落とし穴紹介 9/28 落とし穴紹介
サンプルコードが役に立たない 落とし穴紹介 10/28 ネット上に転がっているサンプルが動かない まともに初期化をしていないようである みんなどうやって動かしているのん…?
非直感的な操作方法 落とし穴紹介 11/28 ややこしい操作がある 1 を書き込んでその値がデバ イスによって 0 にリセットさ れるのを待つ、とか
データ構造も数珠つなぎが長 くてつらい
暗黙的な前提知識 落とし穴紹介 12/28 SATA・ATA の知識が前提だが… 暗黙的に ATA の仕様書を引用してくる部分が あり、つらい QEMU
のソースコードからマジックナンバー を特定してそれをググって仕様書の記述を見 つけました 初心者にはつらいよ…
そんなこんなで 落とし穴紹介 13/28 なんとか読み書きができるように なった!!!! ここからは解説です。
初期化手順 14/28 初期化手順
仕様書の10章あたりを読む 初期化手順 15/28 仕様書には初期化の 手順が書いてある。
7つの手順を踏めば良い 初期化手順 16/28 1. GHC.AE を 1 にする 2. PI
を読んで実装されているポートを確認する 3. ポートが動いていないことを確認する 3.1 PxCMD.ST, PxCMD.CR, PxCMD.FRE, PxCMD.FR が 0 だったらポートはアイドル状態 3.2 アイドル状態でなければ以下の操作をする 3.3 PxCMD.ST をクリアして PxCMD.CR が 0 になるの を待つ 3.4 PxCMD.FRE をクリアして PxCMD.FR が 0 になる のを待つ
7つの手順を踏めば良い 初期化手順 17/28 4. CAP.NCS を読んでコマンドスロットが何個サ ポートされているか確認する 5. 実装ポートに対してメモリを確保し、 PxCLB,
PxFB を設定した後、PxCMD.FRE を 1 にセット 6. 実装ポートに対して PxSERR に 1 を書き込ん でクリアする 7. GHC.IE を 1 にセットして割り込み通知を ON にする
注意ポイント 初期化手順 18/28
1を書き込むと0にリセット 初期化手順 19/28 RWC に注目
読み書きしよう 20/28 読み書きしよう
仕様書の5.5章あたりを読む 読み書きしよう 21/28 基本的な流れ 1. コマンドを作る 2. AHCI にこのコマンドお願い! と通知を送る
3. 完了の割り込みを待つ 4. 割り込みが来たら OK!
コマンドを作る&通知する 読み書きしよう 22/28 1. 初期化時に指定したメモリ位置に command FIS を構築する 2. 初期化時に指定したメモリ位置に
command header を構築する 3. PxCI のビットを立てて、AHCI に通知する
command FISの構築 読み書きしよう 23/28 SATA の仕様書に FIS の設定が載っている
command FISの構築 読み書きしよう 24/28 注意するパラメータ 1. c: コマンドなので 1 2.
Device: よくわからなかったが、ネット上の サンプルから 1 « 6 に設定した。 3. Count: 1 セクタ単位での指定 4. Features: 0 で良さそう 5. Command: ATA の仕様書を見て決定、自分は READ DMA EXT と WRITE DMA EXT を使用
完了の割り込みを待つ 読み書きしよう 25/28 1. PxIS を読んで割り込みが来たことを確認し、 クリアする 2. ポートに対応した IS.IPS
のビットをクリア する 3. PxCI がクリアされたか確認する
まとめ 26/28 まとめ
感想 まとめ 27/28 仕様書はしっかり見よう 関係ありそうな仕様書も集めて眺めよう アライメントの記述には注意しよう
ありがとうございました! まとめ 28/28 ご清聴ありがとうございました!