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
0
630
AHCIに対応したい
自作OSもくもく会オンライン
https://osdev-jp.connpass.com/event/175433/
で発表した内容です。
Totsugekitai
May 10, 2020
Tweet
Share
More Decks by Totsugekitai
See All by Totsugekitai
自作OSへの排他制御の実装
totsugekitai
0
570
x86_64での自作OS - サイボウズ・ラボユース 成果発表会
totsugekitai
0
720
フルスクラッチOS格闘記 〜タイマ割り込みをメインに〜
totsugekitai
0
810
自作OSのその手前 UEFI OSローダの作成
totsugekitai
0
170
Other Decks in Programming
See All in Programming
プロパティベーステストによるUIテスト: LLMによるプロパティ定義生成でエッジケースを捉える
tetta_pdnt
0
320
🔨 小さなビルドシステムを作る
momeemt
4
680
開発チーム・開発組織の設計改善スキルの向上
masuda220
PRO
20
11k
AWS発のAIエディタKiroを使ってみた
iriikeita
1
180
ソフトウェアテスト徹底指南書の紹介
goyoki
1
150
奥深くて厄介な「改行」と仲良くなる20分
oguemon
1
520
個人軟體時代
ethanhuang13
0
320
Compose Multiplatform × AI で作る、次世代アプリ開発支援ツールの設計と実装
thagikura
0
150
複雑なドメインに挑む.pdf
yukisakai1225
5
1.1k
Zendeskのチケットを Amazon Bedrockで 解析した
ryokosuge
3
300
250830 IaCの選定~AWS SAMのLambdaをECSに乗り換えたときの備忘録~
east_takumi
0
390
Processing Gem ベースの、2D レトロゲームエンジンの開発
tokujiros
2
130
Featured
See All Featured
[RailsConf 2023] Rails as a piece of cake
palkan
57
5.8k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Reflections from 52 weeks, 52 projects
jeffersonlam
352
21k
The Language of Interfaces
destraynor
161
25k
We Have a Design System, Now What?
morganepeng
53
7.8k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
920
How to train your dragon (web standard)
notwaldorf
96
6.2k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.5k
Code Reviewing Like a Champion
maltzj
525
40k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.6k
Mobile First: as difficult as doing things right
swwweet
224
9.9k
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 ご清聴ありがとうございました!