$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
デバイスドライバ
Search
Satoru Takeuchi
PRO
May 06, 2025
Technology
0
120
デバイスドライバ
以下動画のテキストです
https://youtu.be/rIbvTC3p-ZI
Satoru Takeuchi
PRO
May 06, 2025
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
eBPF
sat
PRO
1
93
waruiBPF
sat
PRO
0
87
eBPFとwaruiBPF
sat
PRO
4
2.6k
Pythonのコードの気になる行でスタックトレースを出す
sat
PRO
0
87
ソースコードを読むときの思考プロセスの例 ~markdownのレンダリング方法を知りたかった2 markdownパッケージ~
sat
PRO
0
170
様々なファイルシステム
sat
PRO
0
320
ソースを読む時の思考プロセスの例-MkDocs
sat
PRO
1
410
ソースを読むプロセスの例
sat
PRO
22
17k
メモリマップトファイル
sat
PRO
1
170
Other Decks in Technology
See All in Technology
プロンプトやエージェントを自動的に作る方法
shibuiwilliam
15
15k
1人1サービス開発しているチームでのClaudeCodeの使い方
noayaoshiro
2
510
AlmaLinux + KVM + Cockpit で始めるお手軽仮想化基盤 ~ 開発環境などでの利用を想定して ~
koedoyoshida
0
120
IAMユーザーゼロの運用は果たして可能なのか
yama3133
2
510
Amazon Connect アップデート! AIエージェントにMCPツールを設定してみた!
ysuzuki
0
110
.NET 10の概要
tomokusaba
0
120
普段使ってるClaude Skillsの紹介(by Notebooklm)
zerebom
1
390
モダンデータスタックの理想と現実の間で~1.3億人Vポイントデータ基盤の現在地とこれから~
taromatsui_cccmkhd
1
100
Identity Management for Agentic AI 解説
fujie
0
250
JEDAI認定プログラム JEDAI Order 2026 エントリーのご案内 / JEDAI Order 2026 Entry
databricksjapan
0
150
20251219 OpenIDファウンデーション・ジャパン紹介 / OpenID Foundation Japan Intro
oidfj
0
310
AIBuildersDay_track_A_iidaxs
iidaxs
3
460
Featured
See All Featured
Context Engineering - Making Every Token Count
addyosmani
9
540
Mind Mapping
helmedeiros
PRO
0
36
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Building the Perfect Custom Keyboard
takai
1
660
Building a Scalable Design System with Sketch
lauravandoore
463
34k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
60
37k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.3k
Balancing Empowerment & Direction
lara
5
810
The Power of CSS Pseudo Elements
geoffreycrofte
80
6.1k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.3k
Getting science done with accelerated Python computing platforms
jacobtomlinson
0
73
Mobile First: as difficult as doing things right
swwweet
225
10k
Transcript
デバイスドライバ May. 6th, 2025 Satoru Takeuchi X: satoru_takeuchi 1
デバイスドライバとは • デバイスの操作を担当するカーネル内のコンポーネント • おおざっぱにいうとデバイスの種類だけ存在する ◦ 📝 Linuxのコード数千万行のうち、ほとんどはデバイスドライバのコード 2
デバイスの操作方法 • デバイスには1つ以上のレジスタという領域が存在 • どのレジスタにどうアクセスすればデバイスをどんなふうに操作できるかが仕様に書かれている • デバイスドライバはユーザからの要求に応じて仕様通りにレジスタにアクセス 3 デバイス カーネル空間
物理世界 レジスタ デバイスドライバ アクセス
デバイスのレジスタにアクセスする方法 • メモリマップトI/O ◦ デバイスのレジスタをカーネルの仮想アドレス空間にマップしてアクセス ◦ メモリと同じようにアクセスできる ◦ 主流の方法。本動画でもこちらについて説明 •
ポートマップトI/O ◦ デバイスのレジスタを portと呼ばれるメモリとは別のインタフェースを介してアクセス ◦ 専用の機械語命令を発行する必要がある (例: x86だとin,out命令) 4
メモリマップトI/O • デバイスアクセス時はデバイスのレジスタをカーネルの仮想アドレス空間にマップし てアクセス ◦ 📝 実はカーネルがデバイスを認識した段階でデバイスのレジスタは物理アドレス空間にマップされ ている ◦ 📝
物理アドレスのどこに存在するかは OSではなくUEFIやACPIから得る 5 メモリ デバイスAの レジスタ(群) カーネルの 仮想アドレス空間 デバイスBの レジスタ(群) …
デバイスドライバのサンプル • 簡単な仕様の仮想的なディスクデバイスを使ってデバイスドライバがどんなことをし ているかを学ぶ 6 レジスタのオフセット 役割 0 読み書きに使うメモリ領域の開始アドレス 10
読み書きに使うディスク内のデータの開始オフセット 20 読み書きサイズ 30 ここに書き込むと処理を要求。 0なら読み出し、1なら書き込み 40 要求された処理が終わったかどうかを示す。処理を開始した時点で 0 になり、完了したら1になる。
初期状態 • カーネル仮想アドレス空間のアドレス500にディスクのレジスタがマップされている 7 メモリ 0 500 510 520 530
540 ??? ??? ??? ??? ??? 仮想アドレス空間 ディスクデバイス 2222 3333 1111 10 0 20
やりたいこと • メモリ領域0~100にディスクのオフセット100~200のデータを読み出す 8 メモリ 0 500 510 520 530
540 ??? ??? ??? ??? ??? ディスクデバイス 2222 3333 1111 100 0 200 ??? 100 仮想アドレス空間
デバイスドライバの読み出し処理はこんなかんじ func read(mem_addr, dev_offset, size) { regs[] = {500, 510,
520, 530, 540} regs[0] = mem_addr regs[1] = dev_offset regs[2] = size regs[3] = 0 } 9
読み書きするアドレス、オフセットの設定 • アドレス500,510,520にマップされたレジスタを設定 10 メモリ 0 500 510 520 530
540 0 100 100 ??? ??? ディスクデバイス 2222 3333 1111 100 0 200 ??? 100 仮想アドレス空間 メモリアドレス データサイズ ディスク上のオフセット
ディスクデバイスに処理を依頼 • アドレス530にマップしたレジスタに0を書き込む(読み出しを意味する) 11 メモリ 0 500 510 520 530
540 0 100 100 0 0 ディスクデバイス 2222 3333 1111 100 0 200 ??? 100 仮想アドレス空間
ディスクデバイスがデータを転送 12 メモリ 0 500 510 520 530 540 0
100 100 0 0 ディスクデバイス 2222 3333 1111 100 0 200 2222 100 仮想アドレス空間
ディスクデバイスが読み出し完了を示す • 📝 デバイスドライバが読み出し完了を検出する方法は次の動画で説明 13 メモリ 0 500 510 520
530 540 0 100 100 0 1 ディスク 2222 3333 1111 100 0 200 2222 100 仮想アドレス空間
まとめ • デバイスはデバイス内のレジスタ領域へのアクセスによって操作 • 何をしたいときにどうレジスタにアクセスすべきかは仕様に書いている • デバイスドライバはユーザからの要求に応じて仕様通りレジスタにアクセス • メモリマップトI/Oの場合アセンブリコード無しでメモリアクセスの感覚でデバイスの レジスタにアクセスできる
14