介绍
adb一般是给Android开发用的,但是换个思路也能做嵌入式Linux开发
安装
以Ubuntu20.04为例
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
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
脚本写法参考
#!/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命令
ADB_CMD=$(which adb)
if [ -z "$ADB_CMD" ]; then
echo "ERROR: adb not found!" >> "$LOG_FILE"
exit 1
fi
# 启动adb服务
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端口转发了
日志监控
touch /tmp/adb_forward.log
tail -f /tmp/adb_forward.log
总结
生命在于折腾!没有网口的情形下可以用ADB转发模拟网络通信,这样gdbserver、ssh、smb、nfs、tftp等网络服务就可以使用了