2021-12-04 19:33:31 +09:00
|
|
|
|
---
|
|
|
|
|
title: USB Ethernet Gadget
|
|
|
|
|
tags:
|
|
|
|
|
- Linux
|
|
|
|
|
- USB
|
|
|
|
|
- 周辺機器
|
2021-12-07 18:15:23 +09:00
|
|
|
|
excerpt: PC と USB ケーブル1本で接続できる便利な仕組みとその導入方法
|
2021-12-04 19:33:31 +09:00
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# USB Gadget とは?
|
|
|
|
|
|
2022-01-12 03:27:52 +09:00
|
|
|
|
コンピュータがあたかも USB デバイスであるかのように振る舞うしくみです。
|
2021-12-04 19:33:31 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Why USB Gadget?
|
|
|
|
|
|
2022-01-12 03:27:52 +09:00
|
|
|
|
インターネットに接続可能なPCと Brain を接続するだけで Brain からインターネットに出たり、PCと Brain で双方向に SSH したりできます。電池切れの心配もありません。
|
2021-12-04 19:33:31 +09:00
|
|
|
|
|
|
|
|
|
|
2022-01-12 03:27:52 +09:00
|
|
|
|
# USB コントローラの動作モードを変更する
|
2021-12-04 19:33:31 +09:00
|
|
|
|
|
2022-01-12 03:27:52 +09:00
|
|
|
|
初期状態では Brain の USB コントローラはホストとして動作するため、このままではデバイスになることができません。
|
2023-07-04 19:12:19 +09:00
|
|
|
|
コントローラの動作モードを切り替えるには brain-config というツールを使います。
|
2023-07-04 17:34:42 +09:00
|
|
|
|
詳しい使い方は[brain-config](/linux/brain-config)のページで確認してください。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 手動での変更
|
2021-12-04 19:33:31 +09:00
|
|
|
|
|
2022-01-08 16:10:18 +09:00
|
|
|
|
手動で変更するには、以下の手順に従ってください。
|
2021-12-04 19:33:31 +09:00
|
|
|
|
|
2022-01-08 16:10:18 +09:00
|
|
|
|
1. SDカードの第1パーティションを`/boot`にマウントします
|
|
|
|
|
|
2022-01-12 02:54:15 +09:00
|
|
|
|
```sh
|
2022-01-08 16:10:18 +09:00
|
|
|
|
sudo mount /dev/mmcblk1p1 /boot
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
2. 元のdtsをバックアップします
|
|
|
|
|
|
|
|
|
|
{機種名の数字}は適宜置き換えてください。(例:PW-SH5→imx28-pwsh5.dtb)
|
2022-01-12 02:54:15 +09:00
|
|
|
|
|
|
|
|
|
```sh
|
2022-01-08 16:10:18 +09:00
|
|
|
|
sudo cp /boot/imx28-pwsh{機種名の数字}.dtb /boot/imx28-pwsh{機種名の数字}.dtb.orig
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
3. dtbファイルをテキスト形式に変換します
|
|
|
|
|
|
2022-01-12 02:54:15 +09:00
|
|
|
|
```sh
|
2022-01-08 16:10:18 +09:00
|
|
|
|
dtc -I dtb -O dts /boot/imx28-pwsh{機種名の数字}.dtb > dts 2> /dev/null
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
4. 設定を書き換えます
|
|
|
|
|
|
2022-01-12 02:54:15 +09:00
|
|
|
|
```sh
|
2022-01-08 16:10:18 +09:00
|
|
|
|
nano dts
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
`usb@80080000`ノードの中から`dr_mode = "host"`の箇所を探し、`dr_mode = "peripheral"`に書き換えます。スペルに注意しましょう。
|
|
|
|
|
|
|
|
|
|
書き換え後は以下のようになります。
|
|
|
|
|
|
|
|
|
|
```diff
|
|
|
|
|
ahb@80080000 {
|
2022-01-12 02:54:15 +09:00
|
|
|
|
usb0: usb@80080000 {
|
|
|
|
|
pinctrl-names = "default";
|
|
|
|
|
pinctrl-0 = <&usb0_id_pins_a>;
|
|
|
|
|
vbus-supply = <®_usb0_vbus>;
|
|
|
|
|
- dr_mode = "host";
|
|
|
|
|
+ dr_mode = "peripheral";
|
|
|
|
|
status = "okay";
|
|
|
|
|
};
|
2022-01-08 16:10:18 +09:00
|
|
|
|
};
|
|
|
|
|
```
|
2022-01-12 02:54:15 +09:00
|
|
|
|
|
2022-01-08 16:10:18 +09:00
|
|
|
|
書き換えられたら保存してエディタを終了します。`Ctrl+O`の次に`Enter`を押して保存して、`Ctrl+X`で終了します。
|
|
|
|
|
|
|
|
|
|
5. 編集したものをバイナリ形式に変換します
|
|
|
|
|
|
2022-01-12 02:54:15 +09:00
|
|
|
|
```sh
|
2022-01-08 16:10:18 +09:00
|
|
|
|
dtc -I dts -O dtb dts > dtb 2> /dev/null
|
|
|
|
|
```
|
|
|
|
|
|
2022-01-12 02:54:15 +09:00
|
|
|
|
```sh
|
2022-01-08 16:10:18 +09:00
|
|
|
|
sudo mv dtb /boot/imx28-pwsh{機種名の数字}.dtb
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
6. SDカードの第1パーティションアンマウントします
|
|
|
|
|
|
2022-01-12 02:54:15 +09:00
|
|
|
|
```sh
|
2022-01-08 16:10:18 +09:00
|
|
|
|
sudo umount /boot
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
7. 再起動します
|
|
|
|
|
|
2022-01-12 02:54:15 +09:00
|
|
|
|
```sh
|
2022-01-08 16:10:18 +09:00
|
|
|
|
sudo reboot
|
|
|
|
|
```
|
|
|
|
|
|
2022-01-12 02:54:15 +09:00
|
|
|
|
|
2022-01-08 16:10:18 +09:00
|
|
|
|
## コピペ用
|
|
|
|
|
|
2022-01-12 02:54:15 +09:00
|
|
|
|
1〜3の手順をまとめると以下のようになります。
|
2022-01-08 16:10:18 +09:00
|
|
|
|
|
2022-01-12 02:54:15 +09:00
|
|
|
|
```sh
|
|
|
|
|
sudo mount /dev/mmcblk1p1 /boot
|
|
|
|
|
sudo cp /boot/imx28-pwsh{機種名の数字}.dtb /boot/imx28-pwsh{機種名の数字}.dtb.orig
|
|
|
|
|
dtc -I dtb -O dts /boot/imx28-pwsh{機種名の数字}.dtb > dts 2> /dev/null
|
2022-01-08 16:10:18 +09:00
|
|
|
|
```
|
2022-01-12 02:54:15 +09:00
|
|
|
|
|
|
|
|
|
5〜7の手順をまとめると以下のようになります。
|
|
|
|
|
|
|
|
|
|
```sh
|
2022-01-08 16:10:18 +09:00
|
|
|
|
dtc -I dts -O dtb dts > dtb 2> /dev/null
|
|
|
|
|
sudo mv dtb /boot/imx28-pwsh{機種名の数字}.dtb
|
|
|
|
|
sudo umount /boot
|
|
|
|
|
sudo reboot
|
|
|
|
|
```
|
2021-12-04 19:33:31 +09:00
|
|
|
|
|
2022-01-12 02:54:15 +09:00
|
|
|
|
|
2021-12-04 19:33:31 +09:00
|
|
|
|
# Brain に Ethernet Gadget を喋らせる
|
|
|
|
|
|
|
|
|
|
1. 以下のスクリプトを vi や nano でホームディレクトリに保存します
|
|
|
|
|
|
2022-01-12 02:54:15 +09:00
|
|
|
|
```sh
|
2021-12-04 19:33:31 +09:00
|
|
|
|
#!/bin/sh
|
|
|
|
|
|
2022-01-12 02:54:15 +09:00
|
|
|
|
g=/sys/kernel/config/usb_gadget/eth
|
2021-12-04 19:33:31 +09:00
|
|
|
|
|
2022-01-12 02:54:15 +09:00
|
|
|
|
mkdir ${g}
|
2021-12-04 19:33:31 +09:00
|
|
|
|
|
2022-01-12 02:54:15 +09:00
|
|
|
|
mkdir ${g}/functions/rndis.rn0
|
|
|
|
|
echo "8a:15:8b:44:3a:02" > ${g}/functions/rndis.rn0/dev_addr
|
|
|
|
|
echo "8a:15:8b:44:3a:01" > ${g}/functions/rndis.rn0/host_addr
|
2021-12-04 19:33:31 +09:00
|
|
|
|
|
2022-01-12 02:54:15 +09:00
|
|
|
|
mkdir ${g}/configs/c.1
|
|
|
|
|
ln -s ${g}/functions/rndis.rn0 ${g}/configs/c.1/
|
2021-12-04 19:33:31 +09:00
|
|
|
|
|
2022-01-12 02:54:15 +09:00
|
|
|
|
echo "ci_hdrc.0" > ${g}/UDC
|
2021-12-04 19:33:31 +09:00
|
|
|
|
|
|
|
|
|
sleep 1
|
2022-01-12 02:54:15 +09:00
|
|
|
|
ifconfig usb0 up
|
|
|
|
|
sleep 1
|
|
|
|
|
dhclient
|
|
|
|
|
```
|
2021-12-04 19:33:31 +09:00
|
|
|
|
|
|
|
|
|
2. スクリプトに実行属性を付けます
|
|
|
|
|
|
|
|
|
|
ここではスクリプト名を `gadget.sh` としています。1. で保存した名前に置き換えてください。
|
|
|
|
|
|
2022-01-12 02:54:15 +09:00
|
|
|
|
```sh
|
|
|
|
|
chmod +x gadget.sh
|
2021-12-04 19:33:31 +09:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
3. 実行します
|
|
|
|
|
|
|
|
|
|
次回起動時からはこのスクリプトを都度実行します。
|
|
|
|
|
|
2022-01-12 02:54:15 +09:00
|
|
|
|
```sh
|
|
|
|
|
./gadget.sh
|
2021-12-04 19:33:31 +09:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
2022-01-12 03:27:52 +09:00
|
|
|
|
# PC側の対応作業
|
2021-12-04 19:33:31 +09:00
|
|
|
|
|
|
|
|
|
Windows / Mac / Linux すべてで利用可能です。(注: 2021年2月23日現在、上記スクリプトでは Windows と macOS で認識しないことを確認しており、修正予定です)
|
|
|
|
|
|
2022-01-12 03:27:52 +09:00
|
|
|
|
PCを通してインターネットへ出るために、ネットワーク接続の共有設定が必要になります。OS ごとに設定方法は異なりますので、別途設定してください。
|
2021-12-04 19:33:31 +09:00
|
|
|
|
|