SlideShare a Scribd company logo
1 of 24
USB3.0ドライバ開発の道
USBホストコントローラドライバの難所紹介
2020/11/13 ラボ勉強会
@uchan_nos
MikanOSのUSBドライバ開発の罠たち
この資料はMikanOSのUSBホストコントローラドライバを開発す
るにあたり,遭遇した罠ポイントを集めたもの
MikanOS: @uchan_nosが開発している教育用OS
ソースコード https://github.com/uchan-nos/mikanos/
罠ポイントは思い付いた主なものを載せた
これがすべてではない
みんなもレッツUSBドライバ開発!
罠リスト
QEMUのCRCRのバグ
No Opコマンドがエラー
送信イベントが来ない
USBデバイスの初期化エラー
xHCを始動するとフリーズ
一部機種でデバイス不可視
罠リスト
QEMUのCRCRのバグ
No Opコマンドがエラー
送信イベントが来ない
USBデバイスの初期化エラー
xHCを始動するとフリーズ
一部機種でデバイス不可視
Command Ring
xHCにコマンドを送るためのキュー
OSがpush,xHCがpop
要素はTRBという16バイトの構造体
TRB最終ワードのビット0がcycle bit
OSは末尾にLink TRBを配置し,コマン
ドリングを1周させる
周回するたびにcycle bitを反転
CRCRがcommand ringの先頭を指す
TRB
TRB
TRB
…
xHCが消費者
OSが生産者
Command Ring
Link TRB
1
1
1
0
CRCR
CRCR: Command Ring Control Register
Command Ring PointerにCRの先頭アドレスを設定
CRR (Command Ring Running) はCR動作中に1になるはず
他のフィールドは0が読み出されることになっている
RCS: Reading this flag always returns ‘0’.
CS: Reading this bit shall always return ‘0’.
CA: Reading this bit always returns ‘0’.
Command Ring Pointer: Reading this field always returns ‘0’.
xHCI for USB Requirement Specificationより
CRCR.CRRで動作チェック
Command ringにTRBをpushし,ドアベルレジスタに書き込む
→xHCがcommand ringから取得開始する(CRR=1になる)
当時の僕「上手くコマンドが認識されないなあ…
そうだ,CRCR.CRRをチェックしてみよう」
QEMUで実験
まったくCRR=1にならない
QEMUのバグ
static uint64_t xhci_oper_read(void *ptr, hwaddr reg, unsigned size) {
XHCIState *xhci = ptr;
uint32_t ret;
switch (reg) {
…
case 0x18: /* CRCR low */
ret = xhci->crcr_low & ~0xe;
break;
case 0x1c: /* CRCR high */
ret = xhci->crcr_high;
break;
…
https://github.com/qemu/qemu/blob/3c8c36c9087da957f580a9bb5ebf7814a753d1c6/hw/usb/hcd-xhci.c#L2867-L2872
1 1 0 0 0 11~0xe =
QEMUではCRCR.CRRをマスクしてしまっている!
加えて,0になるべきフィールドをマスクしてない
罠リスト
QEMUのCRCRのバグ
No Opコマンドがエラー
送信イベントが来ない
USBデバイスの初期化エラー
xHCを始動するとフリーズ
一部機種でデバイス不可視
No Opコマンドがエラーになる
No Opコマンド:Command ringの動作確認用コマンド
このコマンドがうまく動く
→ Command ringが正しくセットアップされている
No Opコマンドを送るとTRB Errorが返ってくる
仕様を読んでも辻褄が合わないぞ?
QEMUにNo Opコマンドが無い
QEMUにNo Opコマンドが実装されていないだけだった
hikaliumさんがその後パッチ投稿
 https://github.com/qemu/qemu/commit/dc2c037fd23ea3dcf2e13afda22c1c64ab56f96b
罠リスト
QEMUのCRCRのバグ
No Opコマンドがエラー
送信イベントが来ない
USBデバイスの初期化エラー
xHCを始動するとフリーズ
一部機種でデバイス不可視
xHC
スロット
USBデバイスとエンドポイント
エンドポイント=通信チャネル
USBデバイスは最大16個のEPを持つ
必ずEP0=Default Control Pipeを持つ
EP0を使ってその他のEPの構成情報を得る
xHC側にTransfer Ringを用意し,EPと接続
EPは4種類
USBデバイス
EP EP EP
スロット
TR TR TR
転送種別 転送方向 転送の特徴
Control Bidirectional 各種ディスクリプタを読むなど
Isochronous Out/In 時間当たりの転送量を保証
Bulk Out/In 記憶装置などの大容量転送
Interrupt Out/In 小容量の定期的な転送
Transfer Ring
USBデバイスに対する送受信のキュー
構造はcommand ringと同じ
エンドポイント毎に1つのTR
No Op TRBを送信しても送信完了イベ
ントが返ってこない
TRBのIOC (Interrupt on Completion)
を1にしなければならないのだった
TRB
TRB
TRB
…
xHCが消費者
OSが生産者
Transfer Ring
Link TRB
1
1
1
0
Endpoint
Context
罠リスト
QEMUのCRCRのバグ
No Opコマンドがエラー
送信イベントが来ない
USBデバイスの初期化エラー
xHCを始動するとフリーズ
一部機種でデバイス不可視
USBデバイスの初期化フロー
1. デバイス接続を検知(PORTSC.CCS=1)
2. ポートをリセット
3. スロットを割り当て(Enable Slotコマンド)
スロット:xHCが利用するメモリ上の構造体
4. アドレスを割り当て(Address Deviceコマンド)
アドレス幅は7ビット
0~127
Address Deviceコマンド:デバイスにアドレスを割り当てる
どんな設定をしてもUSB Transaction Errorになる…
Address Deviceコマンドのエラー原因
ポートリセット後,デバイスはデフォルトアドレス0を持つ
同一アドレスを持つ複数のデバイスが存在するとダメ
1. 複数のデバイスを接続して並行に初期化しようとする
初期化が終わらないとデバイス種別を判定できないため,
USBキーボードに限定するとしても全デバイスの初期化が必要
2. アドレス0を持つデバイスが複数発生する
3. Address Deviceコマンドがエラー
ポートリセット~Address Deviceコマンドまでは
直列に実行する必要がある!
罠リスト
QEMUのCRCRのバグ
No Opコマンドがエラー
送信イベントが来ない
USBデバイスの初期化エラー
xHCを始動するとフリーズ
一部機種でデバイス不可視
xHCを始動させるとシステムフリーズ
1. xHCをリセット
2. メモリ構造を生成し初期化
3. xHCのレジスタを設定
メモリ構造のアドレスを設定したり
4. xHCの動作を開始
USBCMDのRun/Stopビットに1を書く
Run/Stopに1を書いた少し後に,システム全体がフリーズ
例外ハンドラで文字を書いている途中で止まる(上図)
シャットダウンではなく,止まる
forループの途中なのでプログラムのミスは疑いにくい
(同じロジックを繰り返し実行している)
HC BIOS Owned Semaphore
システムがフリーズする=バスロック系?
プログラム外に原因がありそう。BIOS?
仕様書をふと眺めているとUSB Legacy Support Capabilityに
HC BIOS Owned Semaphoreなるビットを発見
“The BIOS sets this bit to establish ownership of the xHC.”
調べてみると,このビットが1になっていた
隣にHC OS Owned Semaphoreというビットもある
“System software sets this bit to request ownership of the xHC.”
これらを適切に設定したらフリーズしなくなった!
罠リスト
QEMUのCRCRのバグ
No Opコマンドがエラー
送信イベントが来ない
USBデバイスの初期化エラー
xHCを始動するとフリーズ
一部機種でデバイス不可視
一部の機種でUSBデバイスが検出されない
osdev-jpメンバーからUSBマウス,キーボードが使えない報告
報告があった機種の1つはAcer Aspire E1-572-A54D
発売日は2013年6月
CPU: i5-4200U (Haswell)
搭載されているxHCのデバイスコードは0x9c31
#define PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI 0x9c31
https://github.com/torvalds/linux/blob/3650b228f83adda7e5ee532e2b90429c03f7b9ec/drivers/usb/host/xhci-pci.c#L37
Lynx Point-LPはUSB3.0が普及し始めた頃のチップセット
Linuxにusb_enable_intel_xhci_ports()という関数がある
Intel製チップセットの場合だけ呼ばれる
USB3_PSSENやXUSB2PRという謎のレジスタへ書き込み
USB3_PSSENとXUSB2PR
Intel 9あたりの時代のチップセットに載ってるレジスタ
USB3_PSSEN: USB 3.0 Port SuperSpeed Enable Register
XUSB2PR: xHC USB 2.0 Port Routing Register
USB3_PSSENのビットに1を書くと,SuperSpeedが有効に
XUSB2PRのビットに1を書くと,EHC→xHCに制御権が移動
EHCIにしか対応しないOSに配慮した過渡期の仕様
EHC xHC
USBポート群
XUSB2PR
xHCI仕様書には載っていない
xHCI仕様書に”5.2 PCI Configuration Registers (USB)”という節が
一応は存在する
でもUSB3_PSSEN/XUSB2PRに関する記述は無い
チップセット固有の,しかも過渡期の仕様だから?
2つのレジスタをLinuxと同様に設定したらうまく動いた!
PCIコンフィグレー
ション空間
USB3_PSSEN
XUSB2PR
BAR
xHCレジスタ
空間 メモリ上の
データ構造群
xHCI仕様の範疇

More Related Content

What's hot

こわくない Git
こわくない Gitこわくない Git
こわくない GitKota Saito
 
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Masahito Zembutsu
 
Lxc で始めるケチケチ仮想化生活?!
Lxc で始めるケチケチ仮想化生活?!Lxc で始めるケチケチ仮想化生活?!
Lxc で始めるケチケチ仮想化生活?!Etsuji Nakai
 
Linuxのsemaphoreとmutexを見る 
Linuxのsemaphoreとmutexを見る Linuxのsemaphoreとmutexを見る 
Linuxのsemaphoreとmutexを見る wata2ki
 
ARM LinuxのMMUはわかりにくい
ARM LinuxのMMUはわかりにくいARM LinuxのMMUはわかりにくい
ARM LinuxのMMUはわかりにくいwata2ki
 
Yocto bspを作ってみた
Yocto bspを作ってみたYocto bspを作ってみた
Yocto bspを作ってみたwata2ki
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較Akihiro Suda
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線Motonori Shindo
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Akihiro Suda
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Masahito Zembutsu
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールMITSUNARI Shigeo
 
Parser combinatorってなんなのさ
Parser combinatorってなんなのさParser combinatorってなんなのさ
Parser combinatorってなんなのさcct-inc
 
rsyncのちょっとイイ話
rsyncのちょっとイイ話rsyncのちょっとイイ話
rsyncのちょっとイイ話Kazuhiro Oinuma
 
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例Fixstars Corporation
 
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみようドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう増田 亨
 
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜UnityTechnologiesJapan002
 
やさしいGitの内部構造 - yapcasia2013
やさしいGitの内部構造 - yapcasia2013やさしいGitの内部構造 - yapcasia2013
やさしいGitの内部構造 - yapcasia2013DQNEO
 

What's hot (20)

こわくない Git
こわくない Gitこわくない Git
こわくない Git
 
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
 
レシピの作り方入門
レシピの作り方入門レシピの作り方入門
レシピの作り方入門
 
Lxc で始めるケチケチ仮想化生活?!
Lxc で始めるケチケチ仮想化生活?!Lxc で始めるケチケチ仮想化生活?!
Lxc で始めるケチケチ仮想化生活?!
 
Linuxのsemaphoreとmutexを見る 
Linuxのsemaphoreとmutexを見る Linuxのsemaphoreとmutexを見る 
Linuxのsemaphoreとmutexを見る 
 
ARM LinuxのMMUはわかりにくい
ARM LinuxのMMUはわかりにくいARM LinuxのMMUはわかりにくい
ARM LinuxのMMUはわかりにくい
 
Glibc malloc internal
Glibc malloc internalGlibc malloc internal
Glibc malloc internal
 
Yocto bspを作ってみた
Yocto bspを作ってみたYocto bspを作ってみた
Yocto bspを作ってみた
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
 
Parser combinatorってなんなのさ
Parser combinatorってなんなのさParser combinatorってなんなのさ
Parser combinatorってなんなのさ
 
rsyncのちょっとイイ話
rsyncのちょっとイイ話rsyncのちょっとイイ話
rsyncのちょっとイイ話
 
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例
 
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみようドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
 
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
 
やさしいGitの内部構造 - yapcasia2013
やさしいGitの内部構造 - yapcasia2013やさしいGitの内部構造 - yapcasia2013
やさしいGitの内部構造 - yapcasia2013
 
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。 【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
 

Similar to USB3.0ドライバ開発の道

Bash on ubuntu on windows
Bash on ubuntu on windowsBash on ubuntu on windows
Bash on ubuntu on windowsKentaro Inomata
 
20110715 osc2011 kyoto
20110715 osc2011 kyoto20110715 osc2011 kyoto
20110715 osc2011 kyotoYamauchi isamu
 
Windows10タブレットにUbuntu16.04を色々入れてみた 2016年度版 Install Ubuntu16.04 on Windows10 T...
Windows10タブレットにUbuntu16.04を色々入れてみた 2016年度版 Install Ubuntu16.04 on Windows10 T...Windows10タブレットにUbuntu16.04を色々入れてみた 2016年度版 Install Ubuntu16.04 on Windows10 T...
Windows10タブレットにUbuntu16.04を色々入れてみた 2016年度版 Install Ubuntu16.04 on Windows10 T...Netwalker lab kapper
 
ET2016 Smart Japan Alliance Llilum 161118
ET2016 Smart Japan Alliance Llilum 161118ET2016 Smart Japan Alliance Llilum 161118
ET2016 Smart Japan Alliance Llilum 161118Atomu Hidaka
 
Yocto Project ハンズオン / 参加者用資料
Yocto Project ハンズオン / 参加者用資料Yocto Project ハンズオン / 参加者用資料
Yocto Project ハンズオン / 参加者用資料Nobuhiro Iwamatsu
 
【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門sandai
 
Squarantine 〜Kuroboxを使ったUSBメモリセキュリティソリューション〜
Squarantine 〜Kuroboxを使ったUSBメモリセキュリティソリューション〜Squarantine 〜Kuroboxを使ったUSBメモリセキュリティソリューション〜
Squarantine 〜Kuroboxを使ったUSBメモリセキュリティソリューション〜Yoshimasa Kawano
 
Monomeeting 20081022
Monomeeting 20081022Monomeeting 20081022
Monomeeting 20081022Atsushi Eno
 
Secret of Firefox
Secret of FirefoxSecret of Firefox
Secret of Firefoxdynamis
 
Drone.io のご紹介
Drone.io のご紹介Drone.io のご紹介
Drone.io のご紹介Uchio Kondo
 
はじめてのSSD,MicroSD,USBメモリ延命方法 in Linux Beginner for Linux long-lifetime in USB...
はじめてのSSD,MicroSD,USBメモリ延命方法 in Linux  Beginner for Linux long-lifetime in USB...はじめてのSSD,MicroSD,USBメモリ延命方法 in Linux  Beginner for Linux long-lifetime in USB...
はじめてのSSD,MicroSD,USBメモリ延命方法 in Linux Beginner for Linux long-lifetime in USB...Netwalker lab kapper
 
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成Izumi Tsutsui
 
iPodTouch で UNIX ぽく遊ぶ
iPodTouch で UNIX ぽく遊ぶiPodTouch で UNIX ぽく遊ぶ
iPodTouch で UNIX ぽく遊ぶKenichiro MATOHARA
 
SONiCインストールしてみた
SONiCインストールしてみたSONiCインストールしてみた
SONiCインストールしてみたwataken44
 
The Basic of How to build LibreOffice / LibreOffice開発版ビルドの基礎 for Windows
The Basic of How to build LibreOffice / LibreOffice開発版ビルドの基礎 for WindowsThe Basic of How to build LibreOffice / LibreOffice開発版ビルドの基礎 for Windows
The Basic of How to build LibreOffice / LibreOffice開発版ビルドの基礎 for WindowsNaruhiko Ogasawara
 
Building libc++ for toy OS
Building libc++ for toy OSBuilding libc++ for toy OS
Building libc++ for toy OSuchan_nos
 

Similar to USB3.0ドライバ開発の道 (20)

Bash on ubuntu on windows
Bash on ubuntu on windowsBash on ubuntu on windows
Bash on ubuntu on windows
 
20110715 osc2011 kyoto
20110715 osc2011 kyoto20110715 osc2011 kyoto
20110715 osc2011 kyoto
 
Windows10タブレットにUbuntu16.04を色々入れてみた 2016年度版 Install Ubuntu16.04 on Windows10 T...
Windows10タブレットにUbuntu16.04を色々入れてみた 2016年度版 Install Ubuntu16.04 on Windows10 T...Windows10タブレットにUbuntu16.04を色々入れてみた 2016年度版 Install Ubuntu16.04 on Windows10 T...
Windows10タブレットにUbuntu16.04を色々入れてみた 2016年度版 Install Ubuntu16.04 on Windows10 T...
 
OS入門
OS入門OS入門
OS入門
 
ET2016 Smart Japan Alliance Llilum 161118
ET2016 Smart Japan Alliance Llilum 161118ET2016 Smart Japan Alliance Llilum 161118
ET2016 Smart Japan Alliance Llilum 161118
 
最小セット
最小セット最小セット
最小セット
 
Yocto Project ハンズオン / 参加者用資料
Yocto Project ハンズオン / 参加者用資料Yocto Project ハンズオン / 参加者用資料
Yocto Project ハンズオン / 参加者用資料
 
【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門
 
Squarantine 〜Kuroboxを使ったUSBメモリセキュリティソリューション〜
Squarantine 〜Kuroboxを使ったUSBメモリセキュリティソリューション〜Squarantine 〜Kuroboxを使ったUSBメモリセキュリティソリューション〜
Squarantine 〜Kuroboxを使ったUSBメモリセキュリティソリューション〜
 
Monomeeting 20081022
Monomeeting 20081022Monomeeting 20081022
Monomeeting 20081022
 
Secret of Firefox
Secret of FirefoxSecret of Firefox
Secret of Firefox
 
Drone.io のご紹介
Drone.io のご紹介Drone.io のご紹介
Drone.io のご紹介
 
はじめてのSSD,MicroSD,USBメモリ延命方法 in Linux Beginner for Linux long-lifetime in USB...
はじめてのSSD,MicroSD,USBメモリ延命方法 in Linux  Beginner for Linux long-lifetime in USB...はじめてのSSD,MicroSD,USBメモリ延命方法 in Linux  Beginner for Linux long-lifetime in USB...
はじめてのSSD,MicroSD,USBメモリ延命方法 in Linux Beginner for Linux long-lifetime in USB...
 
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
 
Debian emdebian 20100817
Debian emdebian 20100817Debian emdebian 20100817
Debian emdebian 20100817
 
iPodTouch で UNIX ぽく遊ぶ
iPodTouch で UNIX ぽく遊ぶiPodTouch で UNIX ぽく遊ぶ
iPodTouch で UNIX ぽく遊ぶ
 
SONiCインストールしてみた
SONiCインストールしてみたSONiCインストールしてみた
SONiCインストールしてみた
 
Ide env
Ide envIde env
Ide env
 
The Basic of How to build LibreOffice / LibreOffice開発版ビルドの基礎 for Windows
The Basic of How to build LibreOffice / LibreOffice開発版ビルドの基礎 for WindowsThe Basic of How to build LibreOffice / LibreOffice開発版ビルドの基礎 for Windows
The Basic of How to build LibreOffice / LibreOffice開発版ビルドの基礎 for Windows
 
Building libc++ for toy OS
Building libc++ for toy OSBuilding libc++ for toy OS
Building libc++ for toy OS
 

More from uchan_nos

小型安価なFPGAボードの紹介と任意波形発生器
小型安価なFPGAボードの紹介と任意波形発生器小型安価なFPGAボードの紹介と任意波形発生器
小型安価なFPGAボードの紹介と任意波形発生器uchan_nos
 
トランジスタ回路:エミッタ接地増幅回路
トランジスタ回路:エミッタ接地増幅回路トランジスタ回路:エミッタ接地増幅回路
トランジスタ回路:エミッタ接地増幅回路uchan_nos
 
OpeLa: セルフホストなOSと言語処理系を作るプロジェクト
OpeLa: セルフホストなOSと言語処理系を作るプロジェクトOpeLa: セルフホストなOSと言語処理系を作るプロジェクト
OpeLa: セルフホストなOSと言語処理系を作るプロジェクトuchan_nos
 
自作言語でお絵描き
自作言語でお絵描き自作言語でお絵描き
自作言語でお絵描きuchan_nos
 
OpeLa 進捗報告 at 第23回自作OSもくもく会
OpeLa 進捗報告 at 第23回自作OSもくもく会OpeLa 進捗報告 at 第23回自作OSもくもく会
OpeLa 進捗報告 at 第23回自作OSもくもく会uchan_nos
 
サイボウズ・ラボへ転籍して1年を振り返る
サイボウズ・ラボへ転籍して1年を振り返るサイボウズ・ラボへ転籍して1年を振り返る
サイボウズ・ラボへ転籍して1年を振り返るuchan_nos
 
Security Nextcamp remote mob programming
Security Nextcamp remote mob programmingSecurity Nextcamp remote mob programming
Security Nextcamp remote mob programminguchan_nos
 
Langsmith OpeLa handmade self-hosted OS and LPS
Langsmith OpeLa handmade self-hosted OS and LPSLangsmith OpeLa handmade self-hosted OS and LPS
Langsmith OpeLa handmade self-hosted OS and LPSuchan_nos
 
OpeLa セルフホストなOSと言語処理系の自作
OpeLa セルフホストなOSと言語処理系の自作OpeLa セルフホストなOSと言語処理系の自作
OpeLa セルフホストなOSと言語処理系の自作uchan_nos
 
自動でバグを見つける!プログラム解析と動的バイナリ計装
自動でバグを見つける!プログラム解析と動的バイナリ計装自動でバグを見つける!プログラム解析と動的バイナリ計装
自動でバグを見つける!プログラム解析と動的バイナリ計装uchan_nos
 
1を書いても0が読める!?隠れた重要命令INVLPG
1を書いても0が読める!?隠れた重要命令INVLPG1を書いても0が読める!?隠れた重要命令INVLPG
1を書いても0が読める!?隠れた重要命令INVLPGuchan_nos
 
レガシーフリーOSに必要な要素技術 legacy free os
レガシーフリーOSに必要な要素技術 legacy free osレガシーフリーOSに必要な要素技術 legacy free os
レガシーフリーOSに必要な要素技術 legacy free osuchan_nos
 
プランクトンサミットの歴史2019
プランクトンサミットの歴史2019プランクトンサミットの歴史2019
プランクトンサミットの歴史2019uchan_nos
 
Introduction of security camp 2019
Introduction of security camp 2019Introduction of security camp 2019
Introduction of security camp 2019uchan_nos
 
30分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.230分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.2uchan_nos
 
USB3 host driver program structure
USB3 host driver program structureUSB3 host driver program structure
USB3 host driver program structureuchan_nos
 
業務時間で書いたパッチは誰のもの?OSS活動にまつわる罠 (builderscon tokyo 2018)
業務時間で書いたパッチは誰のもの?OSS活動にまつわる罠 (builderscon tokyo 2018)業務時間で書いたパッチは誰のもの?OSS活動にまつわる罠 (builderscon tokyo 2018)
業務時間で書いたパッチは誰のもの?OSS活動にまつわる罠 (builderscon tokyo 2018)uchan_nos
 
30分で分かる!OSの作り方
30分で分かる!OSの作り方30分で分かる!OSの作り方
30分で分かる!OSの作り方uchan_nos
 
1TB/dayのログを収集・蓄積する技術
1TB/dayのログを収集・蓄積する技術1TB/dayのログを収集・蓄積する技術
1TB/dayのログを収集・蓄積する技術uchan_nos
 

More from uchan_nos (20)

小型安価なFPGAボードの紹介と任意波形発生器
小型安価なFPGAボードの紹介と任意波形発生器小型安価なFPGAボードの紹介と任意波形発生器
小型安価なFPGAボードの紹介と任意波形発生器
 
トランジスタ回路:エミッタ接地増幅回路
トランジスタ回路:エミッタ接地増幅回路トランジスタ回路:エミッタ接地増幅回路
トランジスタ回路:エミッタ接地増幅回路
 
OpeLa: セルフホストなOSと言語処理系を作るプロジェクト
OpeLa: セルフホストなOSと言語処理系を作るプロジェクトOpeLa: セルフホストなOSと言語処理系を作るプロジェクト
OpeLa: セルフホストなOSと言語処理系を作るプロジェクト
 
自作言語でお絵描き
自作言語でお絵描き自作言語でお絵描き
自作言語でお絵描き
 
OpeLa 進捗報告 at 第23回自作OSもくもく会
OpeLa 進捗報告 at 第23回自作OSもくもく会OpeLa 進捗報告 at 第23回自作OSもくもく会
OpeLa 進捗報告 at 第23回自作OSもくもく会
 
サイボウズ・ラボへ転籍して1年を振り返る
サイボウズ・ラボへ転籍して1年を振り返るサイボウズ・ラボへ転籍して1年を振り返る
サイボウズ・ラボへ転籍して1年を振り返る
 
Security Nextcamp remote mob programming
Security Nextcamp remote mob programmingSecurity Nextcamp remote mob programming
Security Nextcamp remote mob programming
 
Langsmith OpeLa handmade self-hosted OS and LPS
Langsmith OpeLa handmade self-hosted OS and LPSLangsmith OpeLa handmade self-hosted OS and LPS
Langsmith OpeLa handmade self-hosted OS and LPS
 
OpeLa セルフホストなOSと言語処理系の自作
OpeLa セルフホストなOSと言語処理系の自作OpeLa セルフホストなOSと言語処理系の自作
OpeLa セルフホストなOSと言語処理系の自作
 
自動でバグを見つける!プログラム解析と動的バイナリ計装
自動でバグを見つける!プログラム解析と動的バイナリ計装自動でバグを見つける!プログラム解析と動的バイナリ計装
自動でバグを見つける!プログラム解析と動的バイナリ計装
 
1を書いても0が読める!?隠れた重要命令INVLPG
1を書いても0が読める!?隠れた重要命令INVLPG1を書いても0が読める!?隠れた重要命令INVLPG
1を書いても0が読める!?隠れた重要命令INVLPG
 
レガシーフリーOSに必要な要素技術 legacy free os
レガシーフリーOSに必要な要素技術 legacy free osレガシーフリーOSに必要な要素技術 legacy free os
レガシーフリーOSに必要な要素技術 legacy free os
 
プランクトンサミットの歴史2019
プランクトンサミットの歴史2019プランクトンサミットの歴史2019
プランクトンサミットの歴史2019
 
Introduction of security camp 2019
Introduction of security camp 2019Introduction of security camp 2019
Introduction of security camp 2019
 
30分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.230分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.2
 
Timers
TimersTimers
Timers
 
USB3 host driver program structure
USB3 host driver program structureUSB3 host driver program structure
USB3 host driver program structure
 
業務時間で書いたパッチは誰のもの?OSS活動にまつわる罠 (builderscon tokyo 2018)
業務時間で書いたパッチは誰のもの?OSS活動にまつわる罠 (builderscon tokyo 2018)業務時間で書いたパッチは誰のもの?OSS活動にまつわる罠 (builderscon tokyo 2018)
業務時間で書いたパッチは誰のもの?OSS活動にまつわる罠 (builderscon tokyo 2018)
 
30分で分かる!OSの作り方
30分で分かる!OSの作り方30分で分かる!OSの作り方
30分で分かる!OSの作り方
 
1TB/dayのログを収集・蓄積する技術
1TB/dayのログを収集・蓄積する技術1TB/dayのログを収集・蓄積する技術
1TB/dayのログを収集・蓄積する技術
 

USB3.0ドライバ開発の道