Skip to content

Instantly share code, notes, and snippets.

@tenpoku1000
Last active April 19, 2024 10:04
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tenpoku1000/5e0a4ca12964895ddaf45851e022342d to your computer and use it in GitHub Desktop.
Save tenpoku1000/5e0a4ca12964895ddaf45851e022342d to your computer and use it in GitHub Desktop.
自作 OS で USB デバイスに対応するための調査メモ

自作 OS で USB デバイスに対応するための調査メモ

2024/04/19 更新

USB-UART 変換ケーブル

EDK2 にある FTDI 用のドライバが使えそうです。FTDI 製チップ搭載製品は、以下のような製品があります。

USBシリアル変換ケーブル|株式会社バッファロー BUFFALO
https://www.buffalo.jp/product/series/BSUSRC06

USB-LAN アダプタ

USB-LAN アダプタですが、USB 標準仕様の CDC-ECM や CDC-NCM か、ASIX 製のベンダ独自仕様のものが使えそうです。TCP/IP プロトコル・スタックは、lwIP を移植するか、自作する必要があります。CDC-ECM 対応製品は、以下のような製品があります。

USB-LAN100R|PLANEX
https://www.planex.co.jp/products/usb-lan100r/

USB-LAN1000R|PLANEX
https://www.planex.co.jp/products/usb-lan1000r/

CDC-NCM 対応製品は、以下のような製品があります。

USB-LAN2500R
https://www.planex.co.jp/products/usb-lan2500r/

以前に調べた時には、EDK2 に ASIX AX88772 と ASIX AX88772B のドライバがありました。ASIX 製チップ搭載製品は、以下のような製品があります。

ETX3-US2 | LANアダプター | IODATA アイ・オー・データ機器
https://www.iodata.jp/product/lan/lanadapter/etx3-us2/

LAN-TXU2C - ロジテック株式会社
https://www.logitec.co.jp/products/lan/lantxu2c/

AirPrint 対応プリンタ

USB-LAN アダプタが動作し、LAN が使えるようになったら、Apple の AirPrint に対応することで、プリンタから印刷出来るようになります。Wi-Fi 経由の印刷のイメージが強いですが、少なくともブラザー製のプリンタは有線 LAN 経由でも印刷が可能です。以下のような製品があります。

HL-L2360DN | レーザープリンター・複合機 | ブラザー
https://www.brother.co.jp/product/printer/laserprinter/hll2360dn/index.aspx

MFC-J960DWN-B/W | インクジェットプリンター・複合機 | ブラザー
https://www.brother.co.jp/product/printer/inkjet/mfcj960dn/index.aspx

AirPrint の仕様は、おそらく以下の文書だと思われます。

Bonjour Printing Specification Version 1.2.1
https://developer.apple.com/bonjour/printing-specification/bonjourprinting-1.2.1.pdf

Wi-Fi

USB-LAN アダプタが動作し、LAN が使えるようになったら、Raspberry Pi などを利用して、Wi-Fi と有線 LAN のブリッジを構築することで、Wi-Fi が使えるようになります。

Raspberry Pi3を無線LANコンバータにする -blog SkyofFantasy- https://web.archive.org/web/20170810023657/http://rufas.manyoldmoon.com/blog/20160909080644.html

Raspberry Piでイーサネットコンバータを作る
https://web.archive.org/web/20221130063948/http://www.soramimi.jp/raspberrypi/etherconv/

Raspberry Piで無線LAN
https://web.archive.org/web/20220624221044/http://www.soramimi.jp/raspberrypi/wifi/index.html

2017 年 9 月現在に流通している技適取得済み Wi-Fi 対応 USB ドングルは独自仕様で仕様非公開の製品ばかりで、この分野に精通している人なら、プロトコルを解析してドライバを作ってしまうことも可能なのかもしれませんが、本稿では上述の Raspberry Pi を利用した簡易な方法を提示しています。

Bluetooth デバイスの対応プロファイルの確認方法

iPhone 6 Plus(モデルA1524)の場合を例に説明します。

iPhone 6 Plus - 技術仕様 - Apple サポート (日本)
https://support.apple.com/ja-jp/111940

  1. Bluetooth SIG の Web サイトの「製品を探す」をクリックします。

Bluetooth®テクノロジーウェブサイト
https://www.bluetooth.com/ja-jp/

  1. Listings Search 画面に遷移するので Advanced Search をクリックして以下のように入力し、Search ボタンを押下します。

Launch Studio - Listing Search
https://launchstudio.bluetooth.com/Listings/Search

  • Company 欄に、Apple Inc. を入力します。
  • Search By Project Type 欄の、Qualifications With Required Testing をチェックします。
  • Search By Project Type 欄の、Qualifications With No Required Testing をチェックします。
  • Search By Project Type 欄の、End Product Listings (EPLs < 2/1/2014)をチェックします。
  • Search By Project Type 欄の、Qualified Product Listings (PRD 1.0)をチェックします。
  1. 検索ボックスに A1524 を入力して検索ボタンを押下します。

  2. 検索結果の A1524 が表示された行の D021076 をクリックします。

  3. 以下の画面に遷移するので、各 Supported Layers をクリックすると、プロファイルの一覧が表示されます。

Launch Studio - Listing Details
https://launchstudio.bluetooth.com/ListingDetails/857

Bluetooth Classic

Bluetooth 対応 USB ドングルや(USB 接続の)PC 内蔵 I/F で HCI を利用することで使えそうです。Bluetooth Classic のプロトコル・スタックを移植するか、自作する必要があります。

HCIプロトコル
https://web.archive.org/web/20150707154817/http://phys.sci.hokudai.ac.jp:80/LABS/yts/pic/GB002/hcip.html

  1. HIDP(Human Interface Device Profile)

HIDP ‐ 通信用語の基礎知識
https://www.wdic.org/w/WDIC/HIDP

マウスなどに対応する場合に実装が必要です。

  1. A2DP(Advanced Audio Distribution Profile)

A2DP ‐ 通信用語の基礎知識
https://www.wdic.org/w/WDIC/A2DP

ヘッドフォンやスピーカーなどに対応する場合に実装が必要です。

  1. PAN(Personal Area Networking Profile)

PAN (Bluetooth) ‐ 通信用語の基礎知識
https://www.wdic.org/w/WDIC/PAN%20%28Bluetooth%29

BNEP ‐ 通信用語の基礎知識
https://www.wdic.org/w/WDIC/BNEP

L2CAP ‐ 通信用語の基礎知識
https://www.wdic.org/w/WDIC/L2CAP

PAN は速度は遅いものの、Bluetooth テザリングに対応する場合に実装が必要です。L2CAP 上の BNEP で実装します。IPv4 や IPv6 をカプセル化し、Bluetooth 上で伝送します。

Bluetooth Low Energy

Bluetooth Low Energy のプロトコル・スタックを移植するか、自作する必要があります。

  1. HOGP(HID over GATT Profile)

HOGP ‐ 通信用語の基礎知識
https://www.wdic.org/w/WDIC/HOGP

マウスなどに対応する場合に実装が必要です。

  1. Battery Service

Bluetooth Low Energy デバイスのバッテリー残量確認に対応する場合に実装が必要です。

  1. 6LoWPAN

IPv6 しか使えないので、IoT ではない通常の利用シーンでは実用的ではないので、本稿では対象外とします。

IPv6 over Bluetooth のはなし|Wireless・のおと|サイレックス・テクノロジー株式会社 https://web.archive.org/web/20230605161752/http://www.silex.jp/blog/wireless/2016/08/ipv6-over-bluetooth.html

iPhone の USB テザリング

iPhone の USB テザリングですが、専用のドライバが Linux にあるということは、おそらくベンダ独自仕様のプロトコルだと思われます。iPhone を有線 LAN で PC と繋いで、iPhone 上の Proxy アプリで中継出来れば、代替手段として機能しそうですが、使えそうなアプリの評価は未作業です。

Diego Giagio :: Personal Website - iPhoneEthernetDriver
https://web.archive.org/web/20120202011551/http://giagio.com/wiki/moin.cgi/iPhoneEthernetDriver

iPhone/iPadを有線LAN(Ethernet)で接続しよう | 毛流麦花
https://www.marbacka.net/blog/iphone_ipad_ethernet_connection/

FreeBSD にも専用のドライバが用意されているので、Linux のドライバが使えない場合に採用を検討してみるのも良さそうです。

if_ipheth(4)
https://www.freebsd.org/cgi/man.cgi?query=if_ipheth&apropos=0&sektion=4&manpath=FreeBSD+11.1-stable&arch=default&format=html

Android の USB テザリング

Android の USB テザリングのプロトコルは RNDIS(Remote NDIS)です。仕様は、以下でダウンロード可能な文書に含まれていると思われます。

[MS-WINPROTLP]: Archive Documents | Microsoft Learn
https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-WINPROTLP/df36f95e-6a6b-48d6-a3ae-35a17674f546

LTE 対応 USB ドングル

LTE 対応 USB ドングルでも、RNDIS に対応している製品があるようです。

LTE対応USBドングル PIX-MT100 | 株式会社ピクセラ
https://www.pixela.co.jp/products/network/pix_mt100/

PIX-MT100を接続するとWindowsの反応が悪くなる - ぷろじぇくと、みすじら。 - Misuzilla.org
https://www.misuzilla.org/Blog/2016/11/19/PixMt100CausesSlowdown

モデルチェンジで、CDC-ECM に対応するようになったようです。

LTE対応 USBドングル(PIX-MT110) | 株式会社ピクセラ
https://www.pixela.co.jp/products/network/pix_mt110/

WiMAX 2+ 対応 USB ドングルとルータ

WiMAX 2+ 対応 USB ドングルの場合、RNDIS・CDC-ECM・CDC-EEM に対応している場合があるようです。ルータの場合でも、USB 接続出来る製品があるようです。

URoad-Stick |UQWiMAX|超高速モバイルインターネットWiMAX2+
https://www.uqwimax.jp/wimax/products/uroad-stick/

URoad-Stick Linux環境にてご利⽤される⽅へ参考情報 Rev.1.0
https://wimax.shinseicorp.com/wimax2plus/info/stick_linux_info_v1.0.pdf

Huawei WiMAX 2+モデムをLinuxで使う
https://blog.kawauso.com/?p=748

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment