联系管理员

开通文章发布权限

扫码 添加微信
微信图片
电话: QQ:1602036736

基于debian的deb包适配ubuntu22时ADB无法使用问题

Ubuntu 22.04 Rootfs ADB 问题排查与修复记录

平台信息

  • 硬件:LCKFB TaiShanPi V10 (RK3566)

  • 内核版本:6.1.141

  • ADB 连接方式:USB(RNDIS + ADB 复合设备)

  • 参考正常系统:Debian Bookworm(同一硬件,ADB 正常)

ubuntu22编译脚本来自:LaoGuaiGe/ubuntu22.04-rootfs: 适用于泰山派1-RK3566开发板的ubuntu22 文件系统镜像构建脚本

问题现象

烧录 Ubuntu 22.04 rootfs 后,PC 端无法通过 ADB 连接设备:

$ adb devices
List of devices attached
# 无设备列出

设备启动日志显示 adbd for ubuntu 服务启动,但 USB 设备在 PC 端无法识别为 ADB 设备。

根因分析

adbd.service 依赖 usbdevice 脚本

adbd.service 的启动命令为:

[Service]
Type=forking
ExecStart=/usr/bin/usbdevice start
ExecStop=/usr/bin/usbdevice stop
ExecReload=/usr/bin/usbdevice reload

usbdevice 是 Rockchip 平台的 USB gadget 管理脚本,负责:

  1. 挂载 configfs

  2. 创建 USB gadget 设备(设置 VID/PID、序列号等)

  3. 配置 ADB functionfs(/dev/usb-ffs/adb

  4. 启动 adbd 守护进程

  5. 绑定 UDC 控制器使能 USB gadget

Ubuntu overlay 缺少关键文件

对比 Debian 和 Ubuntu 的 overlay 目录,Ubuntu 缺少以下文件:

文件作用是否缺失
/usr/bin/usbdeviceUSB gadget 管理脚本,adbd.service 的核心依赖缺失
/etc/profile.d/adbd.sh设置 ADB shell 和端口环境变量缺失
/etc/profile.d/usbdevice.sh设置 USB 功能配置环境变量缺失

usbdevice 脚本不存在导致 adbd.serviceExecStart 直接失败,USB gadget 从未被配置,PC 端自然无法识别 ADB 设备。

adbd 二进制文件

mk-ubuntu-rootfs.sh 第99行已正确处理:

sudo cp -f overlay-debug/usr/local/share/adb/adbd-64 $TARGET_ROOTFS_DIR/usr/bin/adbd

adbd 二进制本身不缺失,问题完全在于 usbdevice 脚本。

修复方案

从 Debian overlay 复制缺失文件到 Ubuntu overlay

# 1. 复制 usbdevice 脚本
cp debian/overlay/usr/bin/usbdevice ubuntu22.04-rootfs/overlay/usr/bin/usbdevice

# 2. 复制 adbd 环境变量配置
cp debian/overlay/etc/profile.d/adbd.sh ubuntu22.04-rootfs/overlay/etc/profile.d/adbd.sh

# 3. 复制 USB 功能配置
cp debian/overlay/etc/profile.d/usbdevice.sh ubuntu22.04-rootfs/overlay/etc/profile.d/usbdevice.sh

各文件内容说明

/etc/profile.d/adbd.sh

[ -x /bin/bash ] && export ADBD_SHELL=/bin/bash
export ADB_TCP_PORT=5555

设置 ADB 使用 bash 作为 shell,并开启 TCP 端口 5555。

/etc/profile.d/usbdevice.sh

export USB_FUNCS="adb"
export UMS_FILE=/userdata/ums_shared.img
export UMS_SIZE=256M
export UMS_FSTYPE=vfat
export UMS_MOUNT=0
export UMS_MOUNTPOINT=/mnt/ums
export UMS_RO=0

配置 USB 功能为 ADB 模式(也可改为 rndis adb 启用 RNDIS 网络)。

/etc/usbdevice.d/rndis_adb.sh(Ubuntu overlay 中已存在)

USB_FUNCS="rndis adb"
ADB_INSTANCES="ffs.adb"

配置 RNDIS + ADB 复合设备模式。

usbdevice 工作流程

adbd.service 启动
  → 执行 /usr/bin/usbdevice start
  → 加载 /etc/profile 环境变量
  → 加载 /etc/usbdevice.d/*.sh 配置
  → 挂载 configfs (/sys/kernel/config)
  → 创建 USB gadget (rockchip)
    → 设置 VID=0x2207, 序列号从 /proc/cpuinfo 读取
  → 配置 ADB functionfs
    → 挂载 /dev/usb-ffs/adb
    → 启动 adbd 守护进程
  → 绑定 UDC 控制器
  → PC 端识别到 ADB 设备

验证方法

烧录后在 PC 端执行:

# 查看设备列表
adb devices
# 期望输出:
# List of devices attached
# 4c2ccb3588e59ea4    device

# 连接 shell
adb shell

# 查看 USB gadget 状态
adb shell "cat /sys/kernel/config/usb_gadget/rockchip/UDC"

# 查看 adbd 服务状态
adb shell "systemctl status adbd.service"

# 查看 USB 日志
adb shell "cat /tmp/usbdevice.log"

注意事项

  1. USB 线缆要求:必须使用支持数据传输的 USB 线,充电线不支持 ADB。

  2. PC 端驱动:Windows 需要安装 Rockchip ADB 驱动或通用 ADB 驱动。

  3. RNDIS 模式:如果同时需要 USB 网络(usb0 接口),将 USB_FUNCS 改为 rndis adb,并在 /etc/network/interfaces 中配置 usb0(mk-ubuntu-rootfs.sh 已自动添加):

    auto usb0
    iface usb0 inet dhcp

  4. TCP ADB:设备联网后也可通过 TCP 连接:

    adb connect <device-ip>:5555

日期

2026-05-20

评论

快捷导航

把好文章收藏到微信

打开微信,扫码查看

关闭

还没有账号?立即注册