0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ADB框架介绍与体验

麦辣鸡腿堡 来源:嵌入式Linux系统开发 作者:嵌入式Linux系统开 2023-07-13 10:55 次阅读

1. ADB 框架

图片

ADB 全称为"Android Debug Bridge",Android 调试桥。在纯 Linux 系统中也可以使用。它是 client-server 架构,由三部分组成:

  • adbclient:我们运行的 adb 命令就属于 adbclient,比如我们运行以下命令adb push d:1.txt /root时,它就是一个 adbclient,它通过 adbserver 把windows 下的文件 "d:1.txt" 推送到开发板的 /root 目录
  • adbserver:作为一个后台程序运行运行于 PC,它负责管理 PC 和开发板之间的通信,完成 adbclient 的请求
  • adbd:运行于开发板的守护进程,它通过底下的 Gadget 跟 adbserver 通信

实际上,adbclient 和 adbserver 都是同一个应用程序:比如 Windows 下的 adb.exe,使用不同的参数来启动时就可以作为 adbclient 或者 adbserver。我们第 1 次执行 adb 命令时,它会帮我们启动一个 adb 程序作为 adbserver。

2. 体验ADB

2.1 在 Windows 安装软件

解压 GIT 仓库如下文件:

图片

确认里面的 adb.exe 所在目录,把这个目录添加进 Windows 的 Path 环境变量里。

2.2 在 STM32MP157 上实验

STM32MP157 的出厂系统已经安装好了 adbd,可以直接连接 USB 线进行测试。

比如在 Windows 上执行命令:

adb  devices  # 列出adb设备
adb  push  d:1.txt  /root  # 上传文件到开发板/root目录
adb  shell   # 启动adb命令行

IMX6ULL 的出厂系统还没安装 adbd,等移植 ADB 时再进行实验。

3. functionfs

我们关注的是 Gadget 部分:

使用 legacy 的方法时,我们需要在驱动程序里指定设备信息(比如设备描述符、配置描述符等等),还需要在驱动程序里实现数据的传输功能,这都在驱动程序里限定死了。

使用 configfs 时,我们可以灵活地指定设备信息、灵活地选择各种 function。但是,还不够灵活:你必须选择某个 function,这个 function 里已经实现实现了数据的传输功能,你无法更改。

我们能否把 Gadget 设备的端点暴露给用户程序?让用户程序自己操作端点来传输数据?可以!这就是 functionfs。

functionfs 是一种文件系统,它的使用分为两步:

  • 内核态:注册 functionfs
  • 用户态:挂载 functionfs

抓住这两点来分析代码。

3.1 注册 functionfs

以 legacy 的方式来分析,只要安装 g_ffs.ko 驱动程序:

insmod g_ffs.ko

就会触发以下调用过程:

# driversusbgadgetlegacyg_ffs.c
gfs_init
 usb_get_function_instance("ffs");
  try_get_usb_function_instance
   fi = fd- >alloc_inst();
    # driversusbgadgetfunctionf_fs.c
    ffs_alloc_inst
     dev = _ffs_alloc_dev();
      ret = functionfs_init();
       ret = register_filesystem(&ffs_fs_type);

使用 configfs 方式的话,需要执行以下命令:

modprobe libcomposite
mount -t configfs none /sys/kernel/config

mkdir -p /sys/kernel/config/usb_gadget/g1
mkdir  -p /sys/kernel/config/usb_gadget/g1/functions/ffs.adb

可以看到提示信息:

图片

执行命令cat /proc/filesystems可以看到 functionfs。

3.2 挂载 functionfs

这时就可以挂载 functionfs 了,执行如下命令:

# mkdir -p /dev/usb-ffs/adb
# mount -t functionfs adb /dev/usb-ffs/adb  # 上面创建了 functions/ffs.adb, 挂载时 dev 就要指定为 adb
# ls /dev/usb-ffs/adb/
ep0

有了 ep0 端点后,用户态程序就可以通过它跟主机通信了。

3.3 ep0 的驱动程序

ep0 对应的驱动程序,分析如下:

  • 挂载 functionfs 时,会导致一个函数被调用:

图片

  • ffs_sb_fill 中,会在 functionfs 的根目录下创建名为 ep0 的文件,并给它提供file_operations 结构体:

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5082

    文章

    19111

    浏览量

    304878
  • Linux
    +关注

    关注

    87

    文章

    11296

    浏览量

    209364
  • adb
    adb
    +关注

    关注

    1

    文章

    35

    浏览量

    10421
收藏 人收藏

    评论

    相关推荐

    【DragonBoard 410c试用体验】ADB与无线ADB教程

    输入CMD打开命令行,里面输入如下命令查看设备连接情况cd /cd adbadb devices显示如上面的设备名称则成功,下面介绍不连接手机数据线的情况下进行无线ADB的方法首先在开发板背面的启动开关
    发表于 08-20 11:09

    ADB驱动

    电子发烧友网站提供《ADB驱动.zip》资料免费下载
    发表于 11-14 14:02 16次下载

    android fastboot/adb 驱动调试工具

    android fastboot/adb 驱动调试工具,用于fastboot烧录和adb调试android
    发表于 11-04 16:01 12次下载

    android框架与应用开发介绍

    android框架与应用开发介绍
    发表于 10-24 09:35 7次下载
    android<b class='flag-5'>框架</b>与应用开发<b class='flag-5'>介绍</b>

    adb是什么意思_adb的组成及主要功能

    adb是什么意思? adb的全称为AndroidDebugBridge,译为android调试桥,就是在android系统中起到调试桥的作用。通过adb我们可以在Eclipse中方便通过DDMS来
    发表于 11-15 09:03 8.3w次阅读

    adb工作方式及常用命令

    adb的全称为AndroidDebugBridge,译为android调试桥,就是在android系统中起到调试桥的作用。通过adb我们可以在Eclipse中方便通过DDMS来调试Android程序
    发表于 11-15 09:33 3.8w次阅读

    adb的使用方法

    ,说白了就是debug工具。 adb是一个客户端-服务器端程序,其中客户端是你用来操作的电脑,服务器端是android设备。 下面详细介绍adb的使用方法 在您的设备上启用adb调试
    发表于 11-15 10:22 1.6w次阅读

    为什么现在推ADBADB在美国被禁原因是什么?

    欧洲和日本的汽车厂商、一线供应商和光源技术供应商已经开始涌入新兴的自适应远光灯(ADB)市场。“前车灯”听起来也许像是一种比较“古老”的技术,但其实如果没有配备先进驾驶辅助系统(ADAS)汽车的迅速走红,ADB就不会出现。
    发表于 05-03 13:00 1.2w次阅读

    Firefly-RK3288ADB主板介绍

    ADB 使用 前言 adb,全称 Android Debug Bridge,是 Android 的命令行调试工具,可以完成多种功能,如跟踪系统日志,上传下载文件,安装应用等。 准备连接
    的头像 发表于 10-28 19:22 2293次阅读
    Firefly-RK3288<b class='flag-5'>ADB</b>主板<b class='flag-5'>介绍</b>

    fireflyAIO-3288C主板ADB调试工具介绍

    adb,全称 Android Debug Bridge,是 Android 的命令行调试工具,可以完成多种功能,如跟踪系统日志,上传下载文件,安装应用等。
    的头像 发表于 12-16 14:58 1794次阅读
    fireflyAIO-3288C主板<b class='flag-5'>ADB</b>调试工具<b class='flag-5'>介绍</b>

    fireflyAIO-3399J主板ADB使用介绍

    adb,全称 Android Debug Bridge,是 Android 的命令行调试工具,可以完成多种功能,如跟踪系统日志,上传下载文件,安装应用等。
    的头像 发表于 12-24 10:59 1422次阅读

    fireflyAIO-3288J主板ADB使用介绍

    adb,全称 Android Debug Bridge,是 Android 的命令行调试工具,可以完成多种功能,如跟踪系统日志,上传下载文件,安装应用等。
    的头像 发表于 12-26 14:48 1763次阅读

    adb常用命令的工作原理及使用介绍

    adb命令是调试控制手机过程中用的比较多工具。adb是一个C/S架构的应用程序
    的头像 发表于 07-24 16:44 8165次阅读
    <b class='flag-5'>adb</b>常用命令的工作原理及使用<b class='flag-5'>介绍</b>

    Google系列Android手机使用adb命令解决无法联网问题

    手机通过USB线连接上电脑,如果电脑没有安装adb驱动,此时可以安装"驱动人生"或"驱动精灵",然后在"驱动人生"或"驱动精灵
    的头像 发表于 09-21 09:32 8924次阅读
    Google系列Android手机使用<b class='flag-5'>adb</b>命令解决无法联网问题

    adb是什么软件 adb调试干什么用的

    ADB是Android Debug Bridge的缩写,是一种用于与安卓设备通信的命令行工具。它的作用非常广泛,可以在计算机上操作和控制连接的设备,该工具由Android SDK提供。 ADB调试
    的头像 发表于 02-02 11:03 3722次阅读