SlideShare una empresa de Scribd logo
1 de 28
Descargar para leer sin conexión
USB3ホストドライバのクラス構成
2018/11/10
Kernel/VM 北陸 4
@uchan_nos
自己紹介
●
@uchan_nos
●
仕事1:サイボウズ SRE チーム
●
仕事2:東京工業大学 特任助教
●
趣味:osdev-jp コアメンバー
←執筆
校正→
モチベーション
●
最近のPCはレガシーサポートがない
→ PS/2エミュレーション機能がない
→ 自作OSでキーボードが扱えない!
●
ということで…
●
自作OSでUSBデバイスを使いたい
●
移植は大変だし,勉強を兼ねて自作してみよう
●
C++大好きだからC++っぽい書き方をしてみよう
参考資料
●
カーネル/VM探検隊@関西 8回目
– 3:05 – 3:25 @liva_jy
xHCI(USB3.0 HC)デバドラを自作してみよう
– https://www.youtube.com/watch?v=dKUSUv2cxhg
●
『USB3.0ホストドライバ自作入門』
– https://uchan.booth.pm/items/1056355
●
『eXtensible Host Controller Interface for Universal Serial Bus』
●
『Universal Serial Bus 3.1 Specification』
●
『Device Class Definition for Human Interface Devices (HID)』
デバイス制御までの道のり
xHCの初期化
デバイス検出
デバイス初期化
クラスドライバ
xHCリセット,Command Ring設定,
Primary Event Ring設定
ポートへの挿入検知,ポートリセット
スロット割り当て,
DEVICE&CONFIGディスクリプタ取得
エンドポイント有効化,
クラス特有の処理の開始
デバイス制御までの道のり
xHCの初期化
デバイス検出
デバイス初期化
クラスドライバ
xHCリセット,Command Ring設定,
Primary Event Ring設定
ポートへの挿入検知,ポートリセット
スロット割り当て,
DEVICE&CONFIGディスクリプタ取得
エンドポイント有効化,
クラス特有の処理の開始
今日のスコープ
USBホストドライバの構成
ホストコントローラドライバ
ホストコントローラ(xHC)
USBバスドライバ
クラスドライバ
特定のUSBクラス
のための処理
USB規格に従ったAPI
を上位層に提供
ホストコントローラの
詳細を隠蔽
xHCI規格に準拠した
ハードウェア実装
USBホストドライバ
USBホストドライバの構成
ホストコントローラドライバ
ホストコントローラ(xHC)
USBバスドライバ
クラスドライバ
特定のUSBクラス
のための処理
USB規格に従ったAPI
を上位層に提供
ホストコントローラの
詳細を隠蔽
xHCI規格に準拠した
ハードウェア実装
USBバスドライバ
●
例えばGET_DESCRIPTOR
●
USBデバイスの種類や機能を判別するために
デバイス自身が持っているディスクリプタを取得
●
DEVICE:デバイス全体の情報
– USBバージョン,EP0の最大パケット長,
CONFIGURATIONの数,など
●
CONFIGURATION:特定の機能構成
– インターフェース数,最大消費電力,など
USB規格に従ったAPIを上位層に提供
USB規格で規定されたAPI例
●
コントロール転送
– GET_DESCRIPTOR(D2H)
●
DEVICE, CONFIGURATIONディスクリプタ等
– SET_CONFIGURATION(H2D)
●
コンフィグレーションの選択
– GET_REPORT(D2H)
●
HIDデバイスからのデータ入力
●
インタラプト転送,バルク転送,アイソクロナス転送
USBホストドライバの構成
ホストコントローラドライバ
ホストコントローラ(xHC)
USBバスドライバ
クラスドライバ
特定のUSBクラス
のための処理
USB規格に従ったAPI
を上位層に提供
ホストコントローラの
詳細を隠蔽
xHCI規格に準拠した
ハードウェア実装
ホストコントローラドライバ
●
レジスタ構成,データ構造の詳
細などを隠蔽したい
ホストコントローラの詳細を隠蔽
DCBAAP
DCBA0
DCBA1
DCBAn
…
Slot Ctx
EP0 Ctx
EP1 OUT Ctx
EP15 IN Ctx
Transfer
Ring
xHCのレジスタ
メモリ上のデータ構造
バスドライバとxHCドライバの境界
●
例えばコントロール転送は3ステージからなる
●
具体的なデータフォーマットはUSB規格のスコープ
●
xHCI規格は3つのステージからなることだけを規定
Setup Stage Data Stage Setup Stage
USBバスドライバ
ホストコントローラドライバ
具体的なデータ形式,各ビットの意味
データ転送のハコ
USBホストドライバの構成
ホストコントローラドライバ
ホストコントローラ(xHC)
USBバスドライバ
クラスドライバ
特定のUSBクラス
のための処理
USB規格に従ったAPI
を上位層に提供
ホストコントローラの
詳細を隠蔽
xHCI規格に準拠した
ハードウェア実装
クラスドライバ
●
HIDクラス(クラス番号3)は2つの必須パイプと
1つのオプショナルなパイプを規定
特定のUSBクラスのための処理
Control パイプ
Interrupt In パイプ
Interrupt Out パイプ
必須
オプショナル
必須
HID
Human
Interface
Device
HIDキーボードからの受信
初期状態取得
Interrupt In 発行
Interrupt In 完了
キーの押下状態を取得する
キーの状態変化を検知するために,
Interrupt In を発行しておく
キーの状態が変化すると Interrup In
が完了してイベントが発行される
(通常は割り込みとして検知する)
キー push / release
クラスドライバとバスドライバの境界
●
バスドライバ
– コントロール転送,インタラプト転送などの
仕組み(USB規格のAPI)を提供
– デバイスを識別し,適切なクラスドライバを
生成,割り当てるのはバスドライバの役目
●
クラスドライバ
– バスドライバが提供するAPIを使って,
– クラスが規定するタイミングに従い,
– デバイスと具体的なデータ通信を主導する
クラス図
クラス図
クラス図(USBバス& xHCドライバ)
バスドライバ ホストコントローラドライバ
クラス図
クラス図(クラスドライバ)
シーケンス(前半)
シーケンス(後半)
まとめ
●
今の時代,自作OSでもUSBドライバが必須
●
USBホスト側のドライバは3層で組むと良さげ
– クラスドライバ
– バスドライバ
– ホストコントローラドライバ
●
HIDキーボードの受信方法を紹介
●
実際のクラス間相互作用を紹介
●
ソースコードはそのうち公開したい…
usb::Device
- buf_: uint8_t[256]
+ ControlIn(int, SetupData, void*, int)
+ ControlOut(int, SetupData, const void*, int)
+ InterruptIn(int, void*, int)
+ InterruptOut(int, const void*, int)
+ StartInitialize()
+ IsInitialized(): bool
+ OnEndpointsConfigured()
# OnControlInCompleted(SetupData, const void*, int)
# OnControlOutCompleted(SetupData, const void*, int)
# OnInterruptInCompleted(const void*, int)
# OnInterruptOutCompleted(const void*, int)
- InitializePhase1
- InitializePhase2
- InitializePhase3
usb::xhci::Device
- slot_id_: uint8_t
+ ControlIn(int, SetupData, void*, int)
+ ControlOut(int, SetupData, const void*, int)
+ InterruptIn(int, void*, int)
+ InterruptOut(int, const void*, int)
+ AllocTransferRing(DeviceContextIndex, size_t)
+ OnTransferEventReceived(const TransferEventTRB&)
usb::ClassDriver
+ SetEndpoint(const EndpointConfig&)
+ OnEndpointsConfigured()
+ OnControlInCompleted(SetupData, const void*, int)
+ OnControlOutCompleted(SetupData, const void*, int)
+ OnInterruptInCompleted(const void*, int)
+ OnInterruptOutCompleted(const void*, int)
16
dev_
usb::HIDKeyboardDriver
- ep_interrupt_in_: int
+ SetEndpoint(const EndpointConfig&)
+ OnEndpointsConfigured()
+ OnControlInCompleted(SetupData, const void*, int)
+ OnControlOutCompleted(SetupData, const void*, int)
+ OnInterruptInCompleted(const void*, int)
+ OnInterruptOutCompleted(const void*, int)
+ SubscribeKeyPush(std::function<void (uint8_t)>)
usb::xhci::Ring
- buf_: TRB*
- cycle_bit_: bool
- write_index_: size_t
+ Initialize(size_t)
+ Push(const TRB&): TRB*
31
transfer_rings_
class_drivers_
main usb::Device
InitializePhase1
StartInitialize
usb::xhci::Device
OnTransferEventReceived
ControlIn[GET_DESC, DEVICE]
return
return
xHC
Wait<br>CommandCompletionEvent
Push[Setup, Data, Status]
OnControlInCompleted
ControlIn[GET_DESC, CONFIG]
return
Push[Setup, Data, Status]
return
return
InitializePhase2
OnTransferEventReceived
OnControlInCompleted
ControlOut[SET_CONFIG]
return
Push[Setup, Status]
return
return
DEVICEディスクリプタの処理
CONFIGディスクリプタの処理
InitializePhase3
OnTransferEventReceived
OnControlOutCompleted
SetEndpoint
return
return
return
SET_CONFIG<br>完了後の処理
usb::<br>HIDKeyboardDriver
<span>new HIDKeyboardDriver</span>
IsInitialized
true
AllocTransferRing
Push[ConfigureEndpointCommand]
return
OnEndpointsConfigured
return
OnEndpointsConfigured
return
ControlIn[GET_REPORT, Input Report]
Push[Setup, Data, Stage]
OnTransferEventReceived
OnControlInCompleted
OnControlInCompleted
InterruptIn
Push[Normal]
NotifyKeyPush
OnTransferEventReceived
OnInterruptInCompleted
OnInterruptInCompleted
Key Pushed
キー入力の初期状態取得
エンドポイント有効化

Más contenido relacionado

La actualidad más candente

Chefについて数週間勉強してみた
Chefについて数週間勉強してみたChefについて数週間勉強してみた
Chefについて数週間勉強してみたAkira Kaneda
 
@nukokusa_botを支える技術
@nukokusa_botを支える技術@nukokusa_botを支える技術
@nukokusa_botを支える技術Joe_noh
 
やってよかったOS作り
やってよかったOS作りやってよかったOS作り
やってよかったOS作りHidemi Kawai
 
Azureでのプレゼン
AzureでのプレゼンAzureでのプレゼン
AzureでのプレゼンFukuda Takuro
 
Text editor anywhereでtextareaもsublime text 2
Text editor anywhereでtextareaもsublime text 2Text editor anywhereでtextareaもsublime text 2
Text editor anywhereでtextareaもsublime text 2Masayuki Maekawa
 
Xcodeでmrubyをステップ実行してみた
Xcodeでmrubyをステップ実行してみたXcodeでmrubyをステップ実行してみた
Xcodeでmrubyをステップ実行してみたfirewood
 
Microsoft Azure x EC-CUBE @西浦温泉
Microsoft Azure x EC-CUBE @西浦温泉Microsoft Azure x EC-CUBE @西浦温泉
Microsoft Azure x EC-CUBE @西浦温泉Kentaro Ohkouchi
 
メタプログラミングでExcel仕様書よさらば
メタプログラミングでExcel仕様書よさらばメタプログラミングでExcel仕様書よさらば
メタプログラミングでExcel仕様書よさらばKouji Matsui
 
SwiftのWebフレームワークVaporを触ってみる
SwiftのWebフレームワークVaporを触ってみるSwiftのWebフレームワークVaporを触ってみる
SwiftのWebフレームワークVaporを触ってみるYuya Oka
 
JJUG CCC 2013 Springの懇親会LT
JJUG CCC 2013 Springの懇親会LTJJUG CCC 2013 Springの懇親会LT
JJUG CCC 2013 Springの懇親会LTirof N
 
RpgツクールVX ace勉強会「はじめての操作編」 20151003
RpgツクールVX ace勉強会「はじめての操作編」 20151003RpgツクールVX ace勉強会「はじめての操作編」 20151003
RpgツクールVX ace勉強会「はじめての操作編」 20151003りんね ぐりっど
 
マルチタスクって奥が深い #mishimapm
マルチタスクって奥が深い #mishimapmマルチタスクって奥が深い #mishimapm
マルチタスクって奥が深い #mishimapm鉄次 尾形
 
WordPress on Movable Type
WordPress on Movable TypeWordPress on Movable Type
WordPress on Movable TypeHajime Fujimoto
 
剣と魔法のログレス(PC版)の自慢と課題
剣と魔法のログレス(PC版)の自慢と課題剣と魔法のログレス(PC版)の自慢と課題
剣と魔法のログレス(PC版)の自慢と課題AimingStudy
 
ゲームサーバ開発現場の考え方
ゲームサーバ開発現場の考え方ゲームサーバ開発現場の考え方
ゲームサーバ開発現場の考え方Daisaku Mochizuki
 
20200216 MacBook Proで姿勢検出
20200216 MacBook Proで姿勢検出20200216 MacBook Proで姿勢検出
20200216 MacBook Proで姿勢検出Kenichi Kinoshita
 
【Potatotips #23】手軽にHTTPでJSONにアクセスできる環境を用意する
【Potatotips #23】手軽にHTTPでJSONにアクセスできる環境を用意する【Potatotips #23】手軽にHTTPでJSONにアクセスできる環境を用意する
【Potatotips #23】手軽にHTTPでJSONにアクセスできる環境を用意するHiroyuki Kusu
 

La actualidad más candente (20)

Chefについて数週間勉強してみた
Chefについて数週間勉強してみたChefについて数週間勉強してみた
Chefについて数週間勉強してみた
 
@nukokusa_botを支える技術
@nukokusa_botを支える技術@nukokusa_botを支える技術
@nukokusa_botを支える技術
 
やってよかったOS作り
やってよかったOS作りやってよかったOS作り
やってよかったOS作り
 
Azureでのプレゼン
AzureでのプレゼンAzureでのプレゼン
Azureでのプレゼン
 
Text editor anywhereでtextareaもsublime text 2
Text editor anywhereでtextareaもsublime text 2Text editor anywhereでtextareaもsublime text 2
Text editor anywhereでtextareaもsublime text 2
 
IJKBの紹介
IJKBの紹介 IJKBの紹介
IJKBの紹介
 
Xcodeでmrubyをステップ実行してみた
Xcodeでmrubyをステップ実行してみたXcodeでmrubyをステップ実行してみた
Xcodeでmrubyをステップ実行してみた
 
OSSと私
OSSと私OSSと私
OSSと私
 
Microsoft Azure x EC-CUBE @西浦温泉
Microsoft Azure x EC-CUBE @西浦温泉Microsoft Azure x EC-CUBE @西浦温泉
Microsoft Azure x EC-CUBE @西浦温泉
 
メタプログラミングでExcel仕様書よさらば
メタプログラミングでExcel仕様書よさらばメタプログラミングでExcel仕様書よさらば
メタプログラミングでExcel仕様書よさらば
 
SwiftのWebフレームワークVaporを触ってみる
SwiftのWebフレームワークVaporを触ってみるSwiftのWebフレームワークVaporを触ってみる
SwiftのWebフレームワークVaporを触ってみる
 
JJUG CCC 2013 Springの懇親会LT
JJUG CCC 2013 Springの懇親会LTJJUG CCC 2013 Springの懇親会LT
JJUG CCC 2013 Springの懇親会LT
 
RpgツクールVX ace勉強会「はじめての操作編」 20151003
RpgツクールVX ace勉強会「はじめての操作編」 20151003RpgツクールVX ace勉強会「はじめての操作編」 20151003
RpgツクールVX ace勉強会「はじめての操作編」 20151003
 
マルチタスクって奥が深い #mishimapm
マルチタスクって奥が深い #mishimapmマルチタスクって奥が深い #mishimapm
マルチタスクって奥が深い #mishimapm
 
EC-CUBE はいいぞ
EC-CUBE はいいぞEC-CUBE はいいぞ
EC-CUBE はいいぞ
 
WordPress on Movable Type
WordPress on Movable TypeWordPress on Movable Type
WordPress on Movable Type
 
剣と魔法のログレス(PC版)の自慢と課題
剣と魔法のログレス(PC版)の自慢と課題剣と魔法のログレス(PC版)の自慢と課題
剣と魔法のログレス(PC版)の自慢と課題
 
ゲームサーバ開発現場の考え方
ゲームサーバ開発現場の考え方ゲームサーバ開発現場の考え方
ゲームサーバ開発現場の考え方
 
20200216 MacBook Proで姿勢検出
20200216 MacBook Proで姿勢検出20200216 MacBook Proで姿勢検出
20200216 MacBook Proで姿勢検出
 
【Potatotips #23】手軽にHTTPでJSONにアクセスできる環境を用意する
【Potatotips #23】手軽にHTTPでJSONにアクセスできる環境を用意する【Potatotips #23】手軽にHTTPでJSONにアクセスできる環境を用意する
【Potatotips #23】手軽にHTTPでJSONにアクセスできる環境を用意する
 

Similar a USB3 host driver program structure

初心者がOpenIndianaで自宅サーバを作ったよって話
初心者がOpenIndianaで自宅サーバを作ったよって話初心者がOpenIndianaで自宅サーバを作ったよって話
初心者がOpenIndianaで自宅サーバを作ったよって話Masataka Tsukamoto
 
EC-CUBE3系より新しい EC-CUBE2系の開発事例紹介
EC-CUBE3系より新しい EC-CUBE2系の開発事例紹介EC-CUBE3系より新しい EC-CUBE2系の開発事例紹介
EC-CUBE3系より新しい EC-CUBE2系の開発事例紹介Kentaro Ohkouchi
 
Linux desktop on_personalwork
Linux desktop on_personalworkLinux desktop on_personalwork
Linux desktop on_personalworkMasataka Kondo
 
RubyConfの話の続きのおはなし
RubyConfの話の続きのおはなしRubyConfの話の続きのおはなし
RubyConfの話の続きのおはなしyamanekko
 
ネットワークOS野郎 ~ インフラ野郎Night 20160414
ネットワークOS野郎 ~ インフラ野郎Night 20160414ネットワークOS野郎 ~ インフラ野郎Night 20160414
ネットワークOS野郎 ~ インフラ野郎Night 20160414Kentaro Ebisawa
 
CLR/H第54回勉強会 ライトニングトーク
CLR/H第54回勉強会 ライトニングトークCLR/H第54回勉強会 ライトニングトーク
CLR/H第54回勉強会 ライトニングトークJun-ichi Sakamoto
 
LightSwitchで遊んでみた
LightSwitchで遊んでみたLightSwitchで遊んでみた
LightSwitchで遊んでみたYoshitaka Seo
 
無印Pentium debian install memo
無印Pentium debian install memo無印Pentium debian install memo
無印Pentium debian install memoYukiyoshi Yoshimoto
 
Nodeにしましょう
NodeにしましょうNodeにしましょう
NodeにしましょうYuzo Hebishima
 
Getting started raspberry pi osc hamamatsu
Getting started raspberry pi osc hamamatsuGetting started raspberry pi osc hamamatsu
Getting started raspberry pi osc hamamatsuMasafumi Ohta
 
秘伝:クラウドに開発環境をえいっ!と構築する方法
秘伝:クラウドに開発環境をえいっ!と構築する方法秘伝:クラウドに開発環境をえいっ!と構築する方法
秘伝:クラウドに開発環境をえいっ!と構築する方法Masahiko Hashimoto
 
Androidの新ビルドシステム
Androidの新ビルドシステムAndroidの新ビルドシステム
Androidの新ビルドシステムl_b__
 
Squarantine 〜Kuroboxを使ったUSBメモリセキュリティソリューション〜
Squarantine 〜Kuroboxを使ったUSBメモリセキュリティソリューション〜Squarantine 〜Kuroboxを使ったUSBメモリセキュリティソリューション〜
Squarantine 〜Kuroboxを使ったUSBメモリセキュリティソリューション〜Yoshimasa Kawano
 
【初心者向け】EC-CUBE プラグイン作成 ハンズオンセミナー @ 名古屋
【初心者向け】EC-CUBE プラグイン作成 ハンズオンセミナー @ 名古屋【初心者向け】EC-CUBE プラグイン作成 ハンズオンセミナー @ 名古屋
【初心者向け】EC-CUBE プラグイン作成 ハンズオンセミナー @ 名古屋Kentaro Ohkouchi
 
達人出版会のご紹介(技術編)
達人出版会のご紹介(技術編)達人出版会のご紹介(技術編)
達人出版会のご紹介(技術編)masayoshi takahashi
 
Raspberry pi最新情報アップデート&いろいろ比較
Raspberry pi最新情報アップデート&いろいろ比較Raspberry pi最新情報アップデート&いろいろ比較
Raspberry pi最新情報アップデート&いろいろ比較Masafumi Ohta
 
PHPのキャッシュを使いこなせ!
PHPのキャッシュを使いこなせ!PHPのキャッシュを使いこなせ!
PHPのキャッシュを使いこなせ!Kentaro Ohkouchi
 
ML Studio / CNTK ハンズオン資料の紹介と開発環境の構築手順
ML Studio / CNTK ハンズオン資料の紹介と開発環境の構築手順ML Studio / CNTK ハンズオン資料の紹介と開発環境の構築手順
ML Studio / CNTK ハンズオン資料の紹介と開発環境の構築手順Yoshitaka Seo
 

Similar a USB3 host driver program structure (20)

Osoljp201204
Osoljp201204Osoljp201204
Osoljp201204
 
初心者がOpenIndianaで自宅サーバを作ったよって話
初心者がOpenIndianaで自宅サーバを作ったよって話初心者がOpenIndianaで自宅サーバを作ったよって話
初心者がOpenIndianaで自宅サーバを作ったよって話
 
EC-CUBE3系より新しい EC-CUBE2系の開発事例紹介
EC-CUBE3系より新しい EC-CUBE2系の開発事例紹介EC-CUBE3系より新しい EC-CUBE2系の開発事例紹介
EC-CUBE3系より新しい EC-CUBE2系の開発事例紹介
 
Linux desktop on_personalwork
Linux desktop on_personalworkLinux desktop on_personalwork
Linux desktop on_personalwork
 
SensorBeeのご紹介
SensorBeeのご紹介SensorBeeのご紹介
SensorBeeのご紹介
 
RubyConfの話の続きのおはなし
RubyConfの話の続きのおはなしRubyConfの話の続きのおはなし
RubyConfの話の続きのおはなし
 
ネットワークOS野郎 ~ インフラ野郎Night 20160414
ネットワークOS野郎 ~ インフラ野郎Night 20160414ネットワークOS野郎 ~ インフラ野郎Night 20160414
ネットワークOS野郎 ~ インフラ野郎Night 20160414
 
CLR/H第54回勉強会 ライトニングトーク
CLR/H第54回勉強会 ライトニングトークCLR/H第54回勉強会 ライトニングトーク
CLR/H第54回勉強会 ライトニングトーク
 
LightSwitchで遊んでみた
LightSwitchで遊んでみたLightSwitchで遊んでみた
LightSwitchで遊んでみた
 
無印Pentium debian install memo
無印Pentium debian install memo無印Pentium debian install memo
無印Pentium debian install memo
 
Nodeにしましょう
NodeにしましょうNodeにしましょう
Nodeにしましょう
 
Getting started raspberry pi osc hamamatsu
Getting started raspberry pi osc hamamatsuGetting started raspberry pi osc hamamatsu
Getting started raspberry pi osc hamamatsu
 
秘伝:クラウドに開発環境をえいっ!と構築する方法
秘伝:クラウドに開発環境をえいっ!と構築する方法秘伝:クラウドに開発環境をえいっ!と構築する方法
秘伝:クラウドに開発環境をえいっ!と構築する方法
 
Androidの新ビルドシステム
Androidの新ビルドシステムAndroidの新ビルドシステム
Androidの新ビルドシステム
 
Squarantine 〜Kuroboxを使ったUSBメモリセキュリティソリューション〜
Squarantine 〜Kuroboxを使ったUSBメモリセキュリティソリューション〜Squarantine 〜Kuroboxを使ったUSBメモリセキュリティソリューション〜
Squarantine 〜Kuroboxを使ったUSBメモリセキュリティソリューション〜
 
【初心者向け】EC-CUBE プラグイン作成 ハンズオンセミナー @ 名古屋
【初心者向け】EC-CUBE プラグイン作成 ハンズオンセミナー @ 名古屋【初心者向け】EC-CUBE プラグイン作成 ハンズオンセミナー @ 名古屋
【初心者向け】EC-CUBE プラグイン作成 ハンズオンセミナー @ 名古屋
 
達人出版会のご紹介(技術編)
達人出版会のご紹介(技術編)達人出版会のご紹介(技術編)
達人出版会のご紹介(技術編)
 
Raspberry pi最新情報アップデート&いろいろ比較
Raspberry pi最新情報アップデート&いろいろ比較Raspberry pi最新情報アップデート&いろいろ比較
Raspberry pi最新情報アップデート&いろいろ比較
 
PHPのキャッシュを使いこなせ!
PHPのキャッシュを使いこなせ!PHPのキャッシュを使いこなせ!
PHPのキャッシュを使いこなせ!
 
ML Studio / CNTK ハンズオン資料の紹介と開発環境の構築手順
ML Studio / CNTK ハンズオン資料の紹介と開発環境の構築手順ML Studio / CNTK ハンズオン資料の紹介と開発環境の構築手順
ML Studio / CNTK ハンズオン資料の紹介と開発環境の構築手順
 

Más de uchan_nos

MikanOSと自作CPUをUSBで接続する
MikanOSと自作CPUをUSBで接続するMikanOSと自作CPUをUSBで接続する
MikanOSと自作CPUをUSBで接続するuchan_nos
 
OSを手作りするという趣味と仕事
OSを手作りするという趣味と仕事OSを手作りするという趣味と仕事
OSを手作りするという趣味と仕事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
 
USB3.0ドライバ開発の道
USB3.0ドライバ開発の道USB3.0ドライバ開発の道
USB3.0ドライバ開発の道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
 
プランクトンサミットの歴史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
 
業務時間で書いたパッチは誰のもの?OSS活動にまつわる罠 (builderscon tokyo 2018)
業務時間で書いたパッチは誰のもの?OSS活動にまつわる罠 (builderscon tokyo 2018)業務時間で書いたパッチは誰のもの?OSS活動にまつわる罠 (builderscon tokyo 2018)
業務時間で書いたパッチは誰のもの?OSS活動にまつわる罠 (builderscon tokyo 2018)uchan_nos
 
1TB/dayのログを収集・蓄積する技術
1TB/dayのログを収集・蓄積する技術1TB/dayのログを収集・蓄積する技術
1TB/dayのログを収集・蓄積する技術uchan_nos
 
WalB: Real-time and Incremental Backup System for Block Devices
WalB: Real-time and Incremental Backup System for Block DevicesWalB: Real-time and Incremental Backup System for Block Devices
WalB: Real-time and Incremental Backup System for Block Devicesuchan_nos
 

Más de uchan_nos (20)

MikanOSと自作CPUをUSBで接続する
MikanOSと自作CPUをUSBで接続するMikanOSと自作CPUをUSBで接続する
MikanOSと自作CPUをUSBで接続する
 
OSを手作りするという趣味と仕事
OSを手作りするという趣味と仕事OSを手作りするという趣味と仕事
OSを手作りするという趣味と仕事
 
小型安価な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年を振り返る
 
USB3.0ドライバ開発の道
USB3.0ドライバ開発の道USB3.0ドライバ開発の道
USB3.0ドライバ開発の道
 
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
 
プランクトンサミットの歴史2019
プランクトンサミットの歴史2019プランクトンサミットの歴史2019
プランクトンサミットの歴史2019
 
Introduction of security camp 2019
Introduction of security camp 2019Introduction of security camp 2019
Introduction of security camp 2019
 
Timers
TimersTimers
Timers
 
業務時間で書いたパッチは誰のもの?OSS活動にまつわる罠 (builderscon tokyo 2018)
業務時間で書いたパッチは誰のもの?OSS活動にまつわる罠 (builderscon tokyo 2018)業務時間で書いたパッチは誰のもの?OSS活動にまつわる罠 (builderscon tokyo 2018)
業務時間で書いたパッチは誰のもの?OSS活動にまつわる罠 (builderscon tokyo 2018)
 
1TB/dayのログを収集・蓄積する技術
1TB/dayのログを収集・蓄積する技術1TB/dayのログを収集・蓄積する技術
1TB/dayのログを収集・蓄積する技術
 
WalB: Real-time and Incremental Backup System for Block Devices
WalB: Real-time and Incremental Backup System for Block DevicesWalB: Real-time and Incremental Backup System for Block Devices
WalB: Real-time and Incremental Backup System for Block Devices
 

USB3 host driver program structure