介绍
adb一般是给Android开发用的,但是换个思路也能做嵌入式Linux开发
安装
以Ubuntu20.04为例
1
| sudo apt install android-tools-adb android-tools-fastboot
|
安装成功可以查看adb版本号

命令
查看adb设备

登录shell

上传文件到设备指定目录

拉取设备上的文件到本地指定目录

端口转发:转发22端口用于QtCreator远程调试

然后配置Devices参数,记得多转发几个端口:10000-10005,Host name
处填写localhost

移除所有ADB端口转发

进阶
利用udev机制在ADB驱动装载之后执行自定义脚本:sudo vim /etc/udev/rules.d/99-adb-forward.rules
1 2 3
| ACTION=="add", SUBSYSTEM=="usb", ENV{PRODUCT}=="2717/ff08/*", \ RUN+="/bin/bash -c 'echo UDEV_CALLED >> /tmp/udev_test.log && \ /bin/su asensing -c \"/usr/local/bin/adb_forward.sh\"'"
|
其中,ENV{PRODUCT}
参数可以通过sudo udevadm monitor --property
命令查看到

adb_forward.sh
脚本写法参考
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| #!/bin/bash export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
LOG_FILE="/tmp/adb_forward.log" exec >> "$LOG_FILE" 2>&1
echo "=== $(date) ===" echo "UDEV ENV:" printenv | grep -E 'ACTION|DEVPATH|PRODUCT|INTERFACE' >> "$LOG_FILE"
sleep 3
ADB_CMD=$(which adb) if [ -z "$ADB_CMD" ]; then echo "ERROR: adb not found!" >> "$LOG_FILE" exit 1 fi
echo "Starting ADB server..." $ADB_CMD start-server
echo "Executing: adb forward tcp:8022 tcp:22" >> "$LOG_FILE" $ADB_CMD forward tcp:8022 tcp:22
if [ $? -eq 0 ]; then echo "SUCCESS: Port forwarding established" >> "$LOG_FILE" else echo "ERROR: Port forwarding failed" >> "$LOG_FILE" $ADB_CMD devices -l >> "$LOG_FILE" exit 3 fi
|
这样你的Linux设备一旦连接到虚拟机,Ubuntu就可以默认开启adb端口转发了

日志监控
1 2
| touch /tmp/adb_forward.log tail -f /tmp/adb_forward.log
|
总结
生命在于折腾!没有网口的情形下可以用ADB转发模拟网络通信,这样gdbserver、ssh、smb、nfs、tftp等网络服务就可以使用了