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
AHCIに対応したい
Search
Totsugekitai
May 10, 2020
Programming
680
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
650
x86_64での自作OS - サイボウズ・ラボユース 成果発表会
totsugekitai
0
780
フルスクラッチOS格闘記 〜タイマ割り込みをメインに〜
totsugekitai
0
880
自作OSのその手前 UEFI OSローダの作成
totsugekitai
0
190
Other Decks in Programming
See All in Programming
GemmaをJevのように使ってみる / Use Gemma like Jev
kishida
4
400
世界の中心で、AI(App Intents)をさけぶ ー App Intents中心設計の実践ガイド
touyou
0
730
Androidだけじゃない、DroidKaigiで広がった私の技術スタック
akkeylab
0
100
大喜利で理解するLLM as a Judge / Understanding LLM-as-a-Judge through Ogiri
rockname
0
180
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
220
Heart of Swift Concurrency
koher
0
1.1k
AHC070解法紹介
eijirou
0
150
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
320
Workers Cache を知る
syumai
0
320
海上で動くGoサーバー: goroutineとchannelでさばく航行データストリーム
atsuki_seo
0
1k
モジュールの視点からSwiftを読み解く #iosdc
s_shimotori
0
270
仕様駆動開発による爆速プロダクト開発 / Bakusoku Spec Driven Development
kobakei
0
150
Featured
See All Featured
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
510
Designing for Timeless Needs
cassininazir
1
510
The #1 spot is gone: here's how to win anyway
tamaranovitovic
4
1.2k
Making Projects Easy
brettharned
120
6.8k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.2k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
340
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.8k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
How Software Deployment tools have changed in the past 20 years
geshan
2
34k
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 ご清聴ありがとうございました!