介绍

adb一般是给Android开发用的,但是换个思路也能做嵌入式Linux开发

安装

以Ubuntu20.04为例

1
sudo apt install android-tools-adb android-tools-fastboot

安装成功可以查看adb版本号

image-20250407094105396

命令

查看adb设备

img

登录shell

img

上传文件到设备指定目录

img

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

img

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

img

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

image-20250414140940072

移除所有ADB端口转发

image-20250421102111217

进阶

利用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命令查看到

image-20250421104248721

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命令
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端口转发了

image-20250421104736494

日志监控

1
2
touch /tmp/adb_forward.log
tail -f /tmp/adb_forward.log

总结

生命在于折腾!没有网口的情形下可以用ADB转发模拟网络通信,这样gdbserver、ssh、smb、nfs、tftp等网络服务就可以使用了


© 2025 hywing 使用 Stellar 创建
总访问 113701 次 | 本页访问 326