====== VIM3/3L USB Gadget ======
===== Introduction =====
This document mainly introduces USB gadget. You will learn how to configure and enable USB gadget Usage.
From version **1.7.5**, USB gadget is enabled by default, no need any setup, you can just skip the overlay and service setup.
===== System Configuration =====
==== Upgrade System ====
Follow [[/products/sbc/common/configurations/upgrade-system|Upgrade System]] to upgrade system.
==== Configure DTS Overlays ====
Take VIM3 as an example.
Open ''/boot/env.txt'':
```shell
sudo vim /boot/env.txt
```
Add ''otg-device'' to overlays node to make USB OTG Device enable:
```
overlays=uart3 pwm_f i2c3 os08a10 --> overlays=uart3 pwm_f i2c3 os08a10 otg-device
```
If you have issues, please try the extra steps below:
```shell
wget https://dl.khadas.com/.fixup/libcutils.so -O /tmp/libcutils.so
sudo cp /tmp/libcutils.so /usr/lib
```
Take VIM3 as an example.
Open ''/boot/dtb/amlogic/kvim3.dtb.overlay.env'':
```shell
sudo vim /boot/dtb/amlogic/kvim3.dtb.overlay.env
```
Add ''otg-device'' to overlays node to make USB OTG Device enable:
```
fdt_overlays=otg-device
```
==== Enable Service ====
```shell
sudo systemctl enable usb-gadget-khadas.service
```
Reboot to effect.
```shell
sync
sudo reboot
```
===== RNDIS Setup IP Address =====
Setup IP address manyally, e.g. setup IP address as ''192.168.35.100''
```shell
sudo ifconfig usb0 192.168.35.100 up
```
Also need to setup the IP address on your PC, e.g. ''192.168.35.110''
Check network connection:
```shell
khadas@Khadas:~$ ping -I usb0 192.168.35.110
PING 192.168.35.1 (192.168.35.1) from 192.168.35.100 usb0: 56(84) bytes of data.
64 bytes from 192.168.35.110: icmp_seq=1 ttl=64 time=0.218 ms
64 bytes from 192.168.35.110: icmp_seq=2 ttl=64 time=0.308 ms
```
===== Usage of ADB =====
Try to access the devices via adb.
```shell
$ adb kill-server
$ adb devices
* daemon not running; starting now at tcp:5037
* daemon started successfully
List of devices attached
363233573350 device
$ adb shell
root@Khadas:/#
root@Khadas:/#
root@Khadas:/#
root@Khadas:/#
root@Khadas:/# ls
bin dtb.img lib proc srv
bin.usr-is-merged etc lib.usr-is-merged root sys
boot home media run tmp
dev Image mnt sbin usr
dtb initrd.img opt sbin.usr-is-merged var
```
===== Troubleshooting =====
If adb not work on windows, you can edit ''/usr/local/bin/usb-gadget'' to comment ''ln -s $F_RNDIS $GADGET/configs/c.1/'' and reboot.
```diff
diff --git a/archives/filesystem/special/VIM-COMMON/usr/local/bin/usb-gadget b/archives/filesystem/special/VIM-COMMON/usr/local/bin/usb-gadget
index 520a9b9a..299569f0 100755
--- a/usr/local/bin/usb-gadget
+++ b/usr/local/bin/usb-gadget
@@ -57,7 +57,7 @@ echo "RNDIS" > $F_RNDIS/os_desc/interface.rndis/compatible_id
echo "5162001" > $F_RNDIS/os_desc/interface.rndis/sub_compatible_id
# Bind function to configuration
-ln -s $F_RNDIS $GADGET/configs/c.1/
+#ln -s $F_RNDIS $GADGET/configs/c.1/
ln -s $GADGET/configs/c.1/ $GADGET/os_desc
# Enable the Gadget
```