SlideShare a Scribd company logo
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 (20)

本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
Kumazaki Hiroki
 
ARM LinuxのMMUはわかりにくい
ARM LinuxのMMUはわかりにくいARM LinuxのMMUはわかりにくい
ARM LinuxのMMUはわかりにくい
wata2ki
 
Ansible 2.10 と Collection
Ansible 2.10 と CollectionAnsible 2.10 と Collection
Ansible 2.10 と Collection
akira6592
 
地理分散DBについて
地理分散DBについて地理分散DBについて
地理分散DBについて
Kumazaki Hiroki
 
BGP Unnumbered で遊んでみた
BGP Unnumbered で遊んでみたBGP Unnumbered で遊んでみた
BGP Unnumbered で遊んでみた
akira6592
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
Kumazaki Hiroki
 
これで怖くない!?大規模環境で体験するDB負荷対策~垂直から水平の彼方へ~
これで怖くない!?大規模環境で体験するDB負荷対策~垂直から水平の彼方へ~これで怖くない!?大規模環境で体験するDB負荷対策~垂直から水平の彼方へ~
これで怖くない!?大規模環境で体験するDB負荷対策~垂直から水平の彼方へ~
hideakikabuto
 
分散ストレージ技術Cephの最新情報
分散ストレージ技術Cephの最新情報分散ストレージ技術Cephの最新情報
分散ストレージ技術Cephの最新情報
Emma Haruka Iwao
 
RDF Semantic Graph「RDF 超入門」
RDF Semantic Graph「RDF 超入門」RDF Semantic Graph「RDF 超入門」
RDF Semantic Graph「RDF 超入門」
オラクルエンジニア通信
 
Ansible2.9 ネットワーク対応のアップデート #ansiblejp
Ansible2.9 ネットワーク対応のアップデート #ansiblejpAnsible2.9 ネットワーク対応のアップデート #ansiblejp
Ansible2.9 ネットワーク対応のアップデート #ansiblejp
akira6592
 
OSC2011 Tokyo/Spring 自宅SAN友の会(前半)
OSC2011 Tokyo/Spring 自宅SAN友の会(前半)OSC2011 Tokyo/Spring 自宅SAN友の会(前半)
OSC2011 Tokyo/Spring 自宅SAN友の会(前半)
Satoshi Shimazaki
 
コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話
Yuta Shimada
 
Fluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターンFluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターン
Kentaro Yoshida
 
jcmd をさわってみよう
jcmd をさわってみようjcmd をさわってみよう
jcmd をさわってみよう
Tsunenaga Hanyuda
 
Memcachedの仕組みと設定
Memcachedの仕組みと設定Memcachedの仕組みと設定
Memcachedの仕組みと設定
Tatsuya Akashi
 
負荷試験ツールlocustを使おう
負荷試験ツールlocustを使おう負荷試験ツールlocustを使おう
負荷試験ツールlocustを使おう
iRidge, Inc.
 
Practical migration from JSP to Thymeleaf
Practical migration from JSP to Thymeleaf Practical migration from JSP to Thymeleaf
Practical migration from JSP to Thymeleaf
Toshiki Iga
 
AS45679 on FreeBSD
AS45679 on FreeBSDAS45679 on FreeBSD
AS45679 on FreeBSD
Tomocha Potter
 
FCスイッチゾーニング設定ガイド
FCスイッチゾーニング設定ガイドFCスイッチゾーニング設定ガイド
FCスイッチゾーニング設定ガイド
Brocade
 
その ionice、ほんとに効いてますか?
その ionice、ほんとに効いてますか?その ionice、ほんとに効いてますか?
その ionice、ほんとに効いてますか?
Narimichi Takamura
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
Kumazaki Hiroki
 
ARM LinuxのMMUはわかりにくい
ARM LinuxのMMUはわかりにくいARM LinuxのMMUはわかりにくい
ARM LinuxのMMUはわかりにくい
wata2ki
 
Ansible 2.10 と Collection
Ansible 2.10 と CollectionAnsible 2.10 と Collection
Ansible 2.10 と Collection
akira6592
 
地理分散DBについて
地理分散DBについて地理分散DBについて
地理分散DBについて
Kumazaki Hiroki
 
BGP Unnumbered で遊んでみた
BGP Unnumbered で遊んでみたBGP Unnumbered で遊んでみた
BGP Unnumbered で遊んでみた
akira6592
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
Kumazaki Hiroki
 
これで怖くない!?大規模環境で体験するDB負荷対策~垂直から水平の彼方へ~
これで怖くない!?大規模環境で体験するDB負荷対策~垂直から水平の彼方へ~これで怖くない!?大規模環境で体験するDB負荷対策~垂直から水平の彼方へ~
これで怖くない!?大規模環境で体験するDB負荷対策~垂直から水平の彼方へ~
hideakikabuto
 
分散ストレージ技術Cephの最新情報
分散ストレージ技術Cephの最新情報分散ストレージ技術Cephの最新情報
分散ストレージ技術Cephの最新情報
Emma Haruka Iwao
 
Ansible2.9 ネットワーク対応のアップデート #ansiblejp
Ansible2.9 ネットワーク対応のアップデート #ansiblejpAnsible2.9 ネットワーク対応のアップデート #ansiblejp
Ansible2.9 ネットワーク対応のアップデート #ansiblejp
akira6592
 
OSC2011 Tokyo/Spring 自宅SAN友の会(前半)
OSC2011 Tokyo/Spring 自宅SAN友の会(前半)OSC2011 Tokyo/Spring 自宅SAN友の会(前半)
OSC2011 Tokyo/Spring 自宅SAN友の会(前半)
Satoshi Shimazaki
 
コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話
Yuta Shimada
 
Fluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターンFluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターン
Kentaro Yoshida
 
jcmd をさわってみよう
jcmd をさわってみようjcmd をさわってみよう
jcmd をさわってみよう
Tsunenaga Hanyuda
 
Memcachedの仕組みと設定
Memcachedの仕組みと設定Memcachedの仕組みと設定
Memcachedの仕組みと設定
Tatsuya Akashi
 
負荷試験ツールlocustを使おう
負荷試験ツールlocustを使おう負荷試験ツールlocustを使おう
負荷試験ツールlocustを使おう
iRidge, Inc.
 
Practical migration from JSP to Thymeleaf
Practical migration from JSP to Thymeleaf Practical migration from JSP to Thymeleaf
Practical migration from JSP to Thymeleaf
Toshiki Iga
 
FCスイッチゾーニング設定ガイド
FCスイッチゾーニング設定ガイドFCスイッチゾーニング設定ガイド
FCスイッチゾーニング設定ガイド
Brocade
 
その ionice、ほんとに効いてますか?
その ionice、ほんとに効いてますか?その ionice、ほんとに効いてますか?
その ionice、ほんとに効いてますか?
Narimichi Takamura
 

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

Bash on ubuntu on windows
Bash on ubuntu on windowsBash on ubuntu on windows
Bash on ubuntu on windows
Kentaro Inomata
 
20110715 osc2011 kyoto
20110715 osc2011 kyoto20110715 osc2011 kyoto
20110715 osc2011 kyoto
Yamauchi 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
 
OS入門
OS入門OS入門
OS入門
Shuntaro Saiba
 
ET2016 Smart Japan Alliance Llilum 161118
ET2016 Smart Japan Alliance Llilum 161118ET2016 Smart Japan Alliance Llilum 161118
ET2016 Smart Japan Alliance Llilum 161118
Atomu Hidaka
 
最小セット
最小セット最小セット
最小セット
Kiyoshi Ogawa
 
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 20081022
Atsushi Eno
 
Explains how to use USBView, which is useful for analyzing Windows USB problems
Explains how to use USBView, which is useful for analyzing Windows USB problemsExplains how to use USBView, which is useful for analyzing Windows USB problems
Explains how to use USBView, which is useful for analyzing Windows USB problems
Atomu Hidaka
 
Secret of Firefox
Secret of FirefoxSecret of Firefox
Secret of Firefox
dynamis
 
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
 
Debian emdebian 20100817
Debian emdebian 20100817Debian emdebian 20100817
Debian emdebian 20100817
Toshihisa Tanaka
 
iPodTouch で UNIX ぽく遊ぶ
iPodTouch で UNIX ぽく遊ぶiPodTouch で UNIX ぽく遊ぶ
iPodTouch で UNIX ぽく遊ぶ
Kenichiro MATOHARA
 
SONiCインストールしてみた
SONiCインストールしてみたSONiCインストールしてみた
SONiCインストールしてみた
wataken44
 
Ide env
Ide envIde env
Ide env
Shuichi Jinushi
 
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
Naruhiko Ogasawara
 
Bash on ubuntu on windows
Bash on ubuntu on windowsBash on ubuntu on windows
Bash on ubuntu on windows
Kentaro Inomata
 
20110715 osc2011 kyoto
20110715 osc2011 kyoto20110715 osc2011 kyoto
20110715 osc2011 kyoto
Yamauchi 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 161118
Atomu 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 20081022
Atsushi Eno
 
Explains how to use USBView, which is useful for analyzing Windows USB problems
Explains how to use USBView, which is useful for analyzing Windows USB problemsExplains how to use USBView, which is useful for analyzing Windows USB problems
Explains how to use USBView, which is useful for analyzing Windows USB problems
Atomu Hidaka
 
Secret of Firefox
Secret of FirefoxSecret of Firefox
Secret of Firefox
dynamis
 
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 Windows
Naruhiko Ogasawara
 

More from uchan_nos (20)

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
 
Security Nextcamp remote mob programming
Security Nextcamp remote mob programmingSecurity Nextcamp remote mob programming
Security Nextcamp remote mob programming
uchan_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 LPS
uchan_nos
 
OpeLa セルフホストなOSと言語処理系の自作
OpeLa セルフホストなOSと言語処理系の自作OpeLa セルフホストなOSと言語処理系の自作
OpeLa セルフホストなOSと言語処理系の自作
uchan_nos
 
自動でバグを見つける!プログラム解析と動的バイナリ計装
自動でバグを見つける!プログラム解析と動的バイナリ計装自動でバグを見つける!プログラム解析と動的バイナリ計装
自動でバグを見つける!プログラム解析と動的バイナリ計装
uchan_nos
 
1を書いても0が読める!?隠れた重要命令INVLPG
1を書いても0が読める!?隠れた重要命令INVLPG1を書いても0が読める!?隠れた重要命令INVLPG
1を書いても0が読める!?隠れた重要命令INVLPG
uchan_nos
 
レガシーフリーOSに必要な要素技術 legacy free os
レガシーフリーOSに必要な要素技術 legacy free osレガシーフリーOSに必要な要素技術 legacy free os
レガシーフリーOSに必要な要素技術 legacy free os
uchan_nos
 
Building libc++ for toy OS
Building libc++ for toy OSBuilding libc++ for toy OS
Building libc++ for toy OS
uchan_nos
 
プランクトンサミットの歴史2019
プランクトンサミットの歴史2019プランクトンサミットの歴史2019
プランクトンサミットの歴史2019
uchan_nos
 
Introduction of security camp 2019
Introduction of security camp 2019Introduction of security camp 2019
Introduction of security camp 2019
uchan_nos
 
30分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.230分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.2
uchan_nos
 
Timers
TimersTimers
Timers
uchan_nos
 
USB3 host driver program structure
USB3 host driver program structureUSB3 host driver program structure
USB3 host driver program structure
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
 
Security Nextcamp remote mob programming
Security Nextcamp remote mob programmingSecurity Nextcamp remote mob programming
Security Nextcamp remote mob programming
uchan_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 LPS
uchan_nos
 
OpeLa セルフホストなOSと言語処理系の自作
OpeLa セルフホストなOSと言語処理系の自作OpeLa セルフホストなOSと言語処理系の自作
OpeLa セルフホストなOSと言語処理系の自作
uchan_nos
 
自動でバグを見つける!プログラム解析と動的バイナリ計装
自動でバグを見つける!プログラム解析と動的バイナリ計装自動でバグを見つける!プログラム解析と動的バイナリ計装
自動でバグを見つける!プログラム解析と動的バイナリ計装
uchan_nos
 
1を書いても0が読める!?隠れた重要命令INVLPG
1を書いても0が読める!?隠れた重要命令INVLPG1を書いても0が読める!?隠れた重要命令INVLPG
1を書いても0が読める!?隠れた重要命令INVLPG
uchan_nos
 
レガシーフリーOSに必要な要素技術 legacy free os
レガシーフリーOSに必要な要素技術 legacy free osレガシーフリーOSに必要な要素技術 legacy free os
レガシーフリーOSに必要な要素技術 legacy free os
uchan_nos
 
Building libc++ for toy OS
Building libc++ for toy OSBuilding libc++ for toy OS
Building libc++ for toy OS
uchan_nos
 
プランクトンサミットの歴史2019
プランクトンサミットの歴史2019プランクトンサミットの歴史2019
プランクトンサミットの歴史2019
uchan_nos
 
Introduction of security camp 2019
Introduction of security camp 2019Introduction of security camp 2019
Introduction of security camp 2019
uchan_nos
 
30分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.230分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.2
uchan_nos
 
USB3 host driver program structure
USB3 host driver program structureUSB3 host driver program structure
USB3 host driver program structure
uchan_nos
 

USB3.0ドライバ開発の道