当前位置: 首页 > article >正文

小米手机USB调试实战:OrangePi上adb devices不显示的5种修复方法

小米手机USB调试实战OrangePi上adb devices不显示的5种修复方法你是否也曾在深夜调试时对着OrangePi终端里那行孤零零的“List of devices attached”感到无比沮丧手机明明连着开发者选项和USB调试都已打开但adb devices就是不给面子设备列表空空如也。这几乎是每一位在Linux单板机尤其是OrangePi这类Armbian系统上进行Android开发的工程师都会遇到的“入门礼”。今天我们不谈空洞的理论直接从实战出发结合我多次在OrangePi Zero 2、OrangePi 5 Plus等设备上连接小米13 Pro、Redmi K60等机型的踩坑经验为你梳理出五种行之有效的修复路径。这些方法不仅针对OrangePi其背后的原理同样适用于其他Linux开发环境帮你从根本上理解问题而不仅仅是复制命令。1. 环境诊断从物理连接到系统权限的全面排查在开始任何“高级”操作之前我们必须确保基础环境是健康的。很多看似复杂的问题根源往往是最简单的物理连接或系统配置。这一步的细致程度直接决定了后续排查的效率。首先请抛弃“线材都差不多”的想法。在USB调试领域线材是第一个“玄学”因素。我遇到过不止一次使用手机原装充电线无法识别换了一根标注支持数据传输的线后立刻成功的情况。这是因为有些线缆内部只连接了电源正负极省略了数据传输所需的D和D-线路。一个快速的验证方法是将手机通过此USB线连接到一台常规的Windows或macOS电脑看是否能正常弹出文件传输对话框。如果不行请立即更换线材。其次检查OrangePi的USB端口。OrangePi的USB端口供电能力有时不足尤其是当使用HUB扩展或连接了其他高功耗设备时。尝试将手机直接连接到板载的USB端口最好是USB 3.0的蓝色端口如果板子有的话并确保你的电源适配器能提供足够稳定的5V/2A以上电流。供电不稳会导致手机反复连接断开在adb devices列表中一闪而过。在软件层面第一步是确认adb服务本身的状态。在OrangePi的终端中执行以下命令adb kill-server adb start-server adb devices这个“重启大法”能解决超过30%的临时性连接问题。如果无效我们需要深入查看USB设备的系统级识别情况。使用lsusb命令lsusb你会看到一个设备列表类似这样Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 002: ID 2717:ff80 Xiaomi Inc. Mi/Redmi series (RNDIS) Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub关键是要找到带有“Xiaomi”字样的行。如果根本没有出现小米设备那问题100%出在物理连接、供电或手机端的USB配置上。如果出现了但adb devices不显示那问题很可能在于权限或驱动。注意不同MIUI版本下手机在lsusb中显示的ID和模式名称可能不同。例如在“文件传输”模式下可能显示为ID 2717:ff40而在“仅充电”模式下可能完全不作为网络设备出现。这是正常的我们下一步会处理模式问题。2. 权限修复解决“Permission denied”的核心步骤在Linux系统中普通用户默认无权直接访问USB设备。当你看到lsusb里有设备但adb devices为空并且执行adb devices时可能有类似no permissions的提示有时提示不明显这就是典型的权限问题。方法一临时解决方案每次重启后需重新执行使用sudo命令以root权限运行adbsudo adb devices如果这样能显示出设备那么恭喜问题定位了。但长期使用sudo并非好习惯且可能影响一些自动化脚本。方法二永久解决方案——配置udev规则推荐这是最规范的一劳永逸的方法。udev是Linux的设备管理器我们可以通过规则文件让系统在检测到特定小米手机时自动赋予当前用户组读写权限。获取设备的USB Vendor ID和Product ID。 再次运行lsusb找到小米设备那一行。例如ID 2717:ff80。这里的2717就是Vendor ID厂商IDff80就是Product ID产品ID。请记下你的实际ID。创建udev规则文件。 在终端中输入sudo nano /etc/udev/rules.d/51-android.rules如果你习惯用vim将nano替换即可。写入规则内容。 在打开的文件中添加以下行请将2717和ff80替换为你刚才记下的实际IDSUBSYSTEMusb, ATTR{idVendor}2717, ATTR{idProduct}ff80, MODE0666, GROUPplugdevMODE0666赋予所有用户读写权限。GROUPplugdev将设备归属于plugdev组。请确保你的用户在这个组里通常默认在。保存并退出编辑器在nano中按CtrlX然后按Y最后回车。重新加载udev规则并重启adb服务sudo udevadm control --reload-rules sudo udevadm trigger adb kill-server adb start-server重新插拔手机USB线然后再次运行adb devices。为了应对不同模式文件传输、PTP、RNDIS等下Product ID可能不同的情况你可以为同一个Vendor ID设置多个规则或者使用更宽泛的匹配。例如针对小米设备一个更通用的规则可以是SUBSYSTEMusb, ATTR{idVendor}2717, MODE0666, GROUPplugdev这条规则会对所有Vendor ID为2717小米的USB设备生效。3. USB配置模式MIUI的“隐藏关卡”与切换策略这是小米手机MIUI系统连接Linux时最常见、也最令人困惑的环节。MIUI的USB偏好设置比原生Android更复杂且不同版本差异很大。lsusb里看到了设备权限也配置对了但adb还是找不到十有八九是卡在这里。关键认知MIUI的“USB调试”和“USB配置”是两个独立开关。打开了“USB调试”只是允许adb通信而“USB配置”决定了手机以何种协议与电脑通信。对于adb来说它期望手机处于一种特定的“接口”模式。操作步骤在手机端进入“设置”-“我的设备”-“全部参数”连续点击“MIUI版本”7次开启开发者选项。返回“设置”-“更多设置”-“开发者选项”。确保“USB调试”开关是打开的。找到“USB配置”或“默认USB配置”在MIUI 14及以后版本可能在“开发者选项”底部或“连接与共享”里。点击它。你会看到一个类似这样的选择菜单仅充电文件传输 (MTP)照片传输 (PTP)音频来源MIDI无线显示网络共享 (RNDIS)核心要点在OrangePi等Linux系统上通常选择“文件传输(MTP)”或“照片传输(PTP)”是无效的这两个模式是给文件管理器用的adb无法在此模式下通信。正确的选择是“网络共享 (RNDIS)”或“MIDI”。RNDIS模式这是最通用、成功率最高的选择。在此模式下手机会被识别为一个网络设备这就是为什么lsusb显示为“RNDIS”adb可以通过这个虚拟网络接口与手机通信。请优先尝试此模式。MIDI模式在某些旧版MIUI或特定机型上RNDIS可能不稳定MIDI模式反而能成功。切换后必须重新插拔USB线更改USB配置模式后系统不会立即用新模式重新协商连接物理重连是最可靠的触发方式。为了更清晰地理解不同模式下的系统识别差异可以参考下表USB配置模式lsusb典型显示adb devices识别成功率备注仅充电可能无特殊标识或显示为充电器极低仅提供电力不开放数据接口。文件传输 (MTP)ID 2717:ff40(示例)低系统挂载为存储设备adb端口未激活。照片传输 (PTP)ID 2717:ff50(示例)低同MTP用于图片传输协议。网络共享 (RNDIS)ID 2717:ff80 附带“RNDIS”描述高推荐首选。创建虚拟网卡adb通过它通信。MIDIID 2717:ff90(示例)中高音频设备协议某些场景下可作为备选。如果在“开发者选项”里找不到“网络共享(RNDIS)”别慌。在较新的MIUI中它可能被隐藏或整合。尝试以下方法连接USB线后从手机屏幕顶部下拉通知栏在“USB用于...”的提示中点击可能会弹出模式选择菜单看看是否有“USB网络共享”或类似选项。在“设置”-“连接与共享”中寻找“USB网络共享”开关打开它。4. 软件栈更新adb版本、驱动与系统组件的匹配环境在变手机系统在升级OrangePi的Linux发行版也在更新。使用过旧或版本不匹配的adb工具链是导致连接失败的另一个隐形杀手。检查并更新adb版本在OrangePi终端运行adb version查看输出。如果你是通过apt安装的如sudo apt install adb版本可能比较旧。小米的新机型和新版MIUI往往需要较新版本的adb才能正确识别。推荐安装Android SDK Platform-Tools中的adb 这是Google官方维护的最新版本兼容性最好。访问 Android开发者网站 查看最新版本链接。在OrangePi上使用wget下载Linux版本的压缩包以当前最新版为例wget https://dl.google.com/android/repository/platform-tools-latest-linux.zip解压并添加到系统路径unzip platform-tools-latest-linux.zip -d ~/ echo export PATH$PATH:~/platform-tools ~/.bashrc source ~/.bashrc验证新版本which adb adb version确保指向的是你刚解压的~/platform-tools/adb。检查并安装必要的USB库某些精简的Armbian/Ubuntu系统镜像可能缺少完整的USB支持库。安装它们sudo apt update sudo apt install usbutils android-sdk-platform-tools-common -yusbutils提供了lsusb等工具而android-sdk-platform-tools-common包含了一些通用的配置和规则。处理潜在的进程冲突极少数情况下可能有陈旧的adb进程或冲突服务占用了端口。进行一个深度清理sudo pkill -9 adb sudo rm -rf /tmp/.adb* rm -rf ~/.android adb kill-server然后重新连接手机并启动服务。5. 高级排查与备选方案当常规方法全部失效如果以上四步走完问题依旧那么我们需要一些更深入的排查手段和备选方案。方案A使用adb tcpip进行无线调试绕过USB问题既然USB连接有问题何不试试网络前提是手机和OrangePi在同一个局域网内。先用USB线完成初始设置仅一次。在确保USB能短暂识别的情况下哪怕只有一瞬间在OrangePi上执行adb tcpip 5555这个命令会重启手机的adb守护进程并监听TCP端口5555。拔掉USB线。在OrangePi上获取手机的IP地址可以在手机Wi-Fi设置中查看假设为192.168.1.100然后连接adb connect 192.168.1.100:5555连接成功后就可以像使用USB一样使用adb devices、adb shell等命令了。以后只要手机和OrangePi在同一网络开机后就可以直接通过网络连接无需再插线。方案B详细日志分析打开adb的详细输出捕捉连接过程的每一个细节adb kill-server ADB_TRACEall adb devices观察终端输出的大量日志。重点关注是否有found new device、checking permissions、device offline、insufficient permissions for device等关键字。这些日志是定位深层问题的金钥匙。方案C检查特定机型/MIUI版本的已知问题社区是宝贵的资源。用你的手机型号如“Xiaomi 13 Pro”和“adb Linux”作为关键词搜索。你可能会发现特定MIUI版本例如MIUI 14.0.xx存在需要关闭“USB调试安全设置”或“禁止权限监控”等特殊操作。这些设置同样位于“开发者选项”中可以尝试开关它们。方案D终极验证——在另一台电脑上测试将你的小米手机用同一根USB线连接到另一台运行Linux如Ubuntu的电脑上进行同样的adb测试。如果那台电脑可以识别那么问题就缩小到你的OrangePi系统环境本身如果也不能识别那问题很可能出在手机某个特定的设置或硬件接口上。最后分享一个我个人的习惯在OrangePi上我为常用的调试命令写了简单的别名脚本。例如在~/.bashrc里添加alias adb-restartadb kill-server sudo udevadm trigger adb start-server alias adb-listadb devices -ladb-restart一键完成服务重启和udev规则触发adb-list能显示更详细的设备信息包括连接模式在排查时非常有用。调试本身就是一个不断假设、验证、修正的过程每一次连接失败的解决都是对系统理解加深的一步。希望这五种方法能帮你把“List of devices attached”后面的空白变成期待已久的设备序列号。

相关文章:

小米手机USB调试实战:OrangePi上adb devices不显示的5种修复方法

小米手机USB调试实战:OrangePi上adb devices不显示的5种修复方法 你是否也曾在深夜调试时,对着OrangePi终端里那行孤零零的“List of devices attached”感到无比沮丧?手机明明连着,开发者选项和USB调试都已打开,但ad…...

快速上手:5步在Ubuntu部署丹青幻境,开启AI艺术创作之旅

快速上手:5步在Ubuntu部署丹青幻境,开启AI艺术创作之旅 想在自己的电脑上体验AI绘画的魅力,亲手生成那些充满想象力的二次元或写实画作吗?今天,我们就来聊聊怎么在Ubuntu系统上,用最简单的方式&#xff0c…...

QT平台下基于QCustomPlot实现实时动态波形图绘制与交互

1. 从零开始:搭建你的实时波形图开发环境 大家好,我是老张,一个在工业自动化领域摸爬滚打了十多年的软件工程师。这些年,我经手过无数个需要实时数据可视化的项目,从简单的传感器数据显示到复杂的多通道高速波形监控&a…...

GLM-OCR进阶使用:批量处理图片、集成REST API、自定义模型

GLM-OCR进阶使用:批量处理图片、集成REST API、自定义模型 1. 从基础到进阶:解锁GLM-OCR的更多可能 如果你已经用上了GLM-OCR,体验过它一键识别文字、表格和公式的便利,可能会想:这个工具还能做什么?能不…...

ROS坐标系实战解析:从基础定义到多机器人协同

1. ROS坐标系:不只是X、Y、Z,更是机器人的“空间认知” 刚接触ROS做机器人开发时,我踩的第一个大坑就是坐标系。那时候我以为,坐标系嘛,不就是数学课上学的那套,定个原点,画个X、Y、Z轴就完事了…...

Ubuntu20.04深度学习环境搭建:显卡驱动、CUDA与cuDNN版本匹配全攻略

1. 为什么版本匹配是深度学习环境搭建的“生死线” 朋友们,如果你正准备在Ubuntu 20.04上搭建深度学习环境,或者正在为“CUDA版本不兼容”、“驱动装不上”这类问题焦头烂额,那这篇文章就是为你准备的。我在这条路上踩过的坑,可能…...

从零到一:基于STM32F103C8T6的红外巡迹避障小车实战指南

1. 项目开篇:为什么选择STM32F103C8T6来做你的第一辆智能小车? 嘿,朋友们,如果你对单片机有点兴趣,又一直想亲手做点能跑能跳的玩意儿,那这辆基于STM32F103C8T6的红外巡迹避障小车,绝对是你的“…...

Bootstrap 5 快速环境搭建指南:从零到部署

1. 为什么你需要 Bootstrap 5? 如果你刚开始接触前端开发,或者已经是个老手但厌倦了每次项目都要从零开始写一堆重置样式和响应式布局,那你肯定听说过 Bootstrap。简单来说,它就是一个前端开发的“瑞士军刀”,里面装满…...

实战演练:利用Burp Suite绕过DVWA文件上传限制实现PHP木马植入

1. 环境准备与工具介绍 大家好,我是老张,在安全圈摸爬滚打十来年了,今天咱们不聊那些虚头巴脑的理论,直接上手干。很多刚入门的朋友一听到“文件上传漏洞”、“一句话木马”就觉得头大,感觉是黑客大神才能玩的东西。其…...

GELU激活函数在Transformer架构中的实践与优化

1. 从ReLU到GELU:为什么Transformer选择了它? 如果你玩过深度学习,肯定对ReLU(Rectified Linear Unit)不陌生。它简单粗暴,效果不错,一度是激活函数界的“万金油”。我自己在早期做图像分类项目…...

代码生成器优化策略

1、非修改序列算法这些算法不会改变它们所操作的容器中的元素。1.1 find 和 find_iffind(begin, end, value):查找第一个等于 value 的元素,返回迭代器(未找到返回 end)。find_if(begin, end, predicate):查找第一个满…...

从下载代码到生成方案:快马AI如何为社区团购小程序实战赋能

最近在做一个社区团购小程序的项目,刚好用到了快马平台,整个过程体验下来,感觉它把“下载代码”这件事彻底升级了。以前我们找开源项目,是去GitHub上搜索、筛选、克隆,代码拿过来还得花大量时间理解、修改、适配自己的…...

IndexTTS2 V23版新功能体验:情感强度自由调节,语音合成更逼真

IndexTTS2 V23版新功能体验:情感强度自由调节,语音合成更逼真 1. 引言:从“能说话”到“会说话”的进化 你是否曾觉得,很多AI语音听起来像机器人?语调平平,没有感情,听久了容易让人走神。这正…...

利用.NET6与Aspose.Words实现高效Word模板导出与PDF转换

1. 为什么选择.NET6和Aspose.Words来处理文档? 如果你正在开发一个需要生成报告、合同、通知函这类正式文档的.NET应用,那你肯定遇到过这个头疼的问题:怎么才能又快又好地生成格式规范的Word文档,并且还能一键转换成PDF&#xff1…...

C++与GPU计算(CUDA)

1、非修改序列算法这些算法不会改变它们所操作的容器中的元素。1.1 find 和 find_iffind(begin, end, value):查找第一个等于 value 的元素,返回迭代器(未找到返回 end)。find_if(begin, end, predicate):查找第一个满…...

全网首份「龙虾」安全部署指南来了!360出品

近日,开源AI智能体OpenClaw(网友戏称为“赛博龙虾”)迅速走红网络。随着应用热度持续攀升,多地政府相继出台专项扶持政策,从企业到个人开发者,部署OpenClaw正成为新的趋势。该工具通过整合通信软件与大语言…...

深入解析ConvLoRA:如何通过卷积增强LoRA在SAM模型中的微调效率

1. 为什么SAM模型微调需要ConvLoRA? 如果你玩过Meta开源的Segment Anything Model(SAM),大概率会有这样的体验:这个模型在“分割一切”的通用能力上确实惊艳,但当你把它拿到自己的具体任务上,比…...

保姆级教程:用Docker一键部署CloudBeaver并完美解决中文乱码问题

从零到精通:在Docker中部署CloudBeaver并彻底驯服中文环境 如果你正在寻找一个能通过浏览器管理多种数据库的利器,CloudBeaver绝对是一个令人兴奋的选择。作为DBeaver的Web版本,它继承了强大的多数据库支持能力,却将使用场景从桌面…...

为什么你的CentOS 8网卡绑定失败了?nmcli配置mode 1 vs mode 4的性能对比与选择指南

为什么你的CentOS 8网卡绑定失败了?nmcli配置mode 1 vs mode 4的性能对比与选择指南 最近在几个生产环境迁移到CentOS 8的项目里,我遇到了不止一次网卡绑定配置后“看起来成功,用起来别扭”的情况。明明nmcli命令执行得顺风顺水,b…...

LeagueAkari智能辅助工具:英雄联盟效率提升指南

LeagueAkari智能辅助工具:英雄联盟效率提升指南 【免费下载链接】LeagueAkari ✨兴趣使然的,功能全面的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/LeagueAkari 在快节奏的英雄…...

C语言基础:编写简易SDK调用水墨江南模型本地服务

C语言基础:编写简易SDK调用水墨江南模型本地服务 如果你是一名嵌入式或者系统级的C语言开发者,习惯了和硬件、内存、指针打交道,现在想在自己的C项目里接入一个本地部署的AI模型服务,可能会觉得有点无从下手。那些Python、Java的…...

阿里 Qwen 郁博文加入字节 + Qwen 新管理架构出炉

前段时间,阿里 Qwen 技术负责人林俊旸离职,同时还有多位高 P 核心成员离开,本文汇总 2 个后续消息。①3 月 12 日,多家科技媒体消息,原阿里通义实验室 Qwen 大模型后训练负责人郁博文,已正式加入字节跳动 S…...

从零构建51单片机电子秤:10kg量程HX711传感器与Proteus仿真全解析

1. 项目开篇:为什么选择51单片机做电子秤? 很多刚接触单片机的小伙伴,可能都听说过STM32、ESP32这些更“时髦”的芯片,心里可能会犯嘀咕:现在还用老掉牙的51单片机做项目,是不是有点过时了?作为…...

ECS架构实战:从理论到2D游戏开发的完整实现

1. 为什么你的游戏代码总是一团乱麻?试试ECS吧! 如果你写过游戏,尤其是那种有很多角色、怪物、道具在屏幕上跑来跑去的2D游戏,你肯定有过这种体验:一开始代码结构还挺清晰,但随着功能越加越多,比…...

示波器时间调节与读取的实战技巧:从基础到高级应用

1. 时间调节:从“看个大概”到“精准捕捉” 刚接触示波器那会儿,我最头疼的就是屏幕上的波形要么挤成一团麻花,要么稀稀拉拉就几个点,根本看不出个所以然。后来才明白,问题的核心几乎都出在**时间基准(Time…...

鸿蒙(HarmonyOS)应用开发实战:从零构建登录页UI

1. 环境准备与项目创建:迈出第一步 嘿,朋友们,我是老张,一个在移动开发领域摸爬滚打了十来年的老码农。最近几年,我花了大量时间在鸿蒙生态上,看着它从无到有,感觉就像当年看着安卓和iOS成长一样…...

GlobalMapper20实战:三步法智能修复地形数据空洞与异常值

1. 引言:当你的地形数据“破了个洞” 搞GIS的朋友,尤其是经常和数字高程模型(DEM)打交道的人,估计都遇到过这种让人头疼的情况:好不容易拿到手的地形数据,一加载到软件里,要么是地图…...

Chip-seq上游分析实战:从数据下载到质控全流程解析

1. 环境准备与软件安装:别在第一步就卡住 大家好,我是老张,在生信分析这个坑里摸爬滚打十来年了,今天咱们来聊聊Chip-seq上游分析这个事儿。很多刚入门的朋友,尤其是学生物的同学,一看到命令行就头疼&#…...

STM32F103_Bootloader开发实战:Keil工程输出路径与文件名的自动化配置与bin文件一键生成

1. 为什么你需要关心Keil的输出路径和文件名? 如果你正在做STM32F103的Bootloader开发,也就是我们常说的IAP功能,那你肯定遇到过这样的场景:每次编译完工程,Keil都会在项目根目录下生成一堆.axf、.map、.lst文件&#…...

基于Python的代驾管理系统毕设源码

博主介绍:✌ 专注于Java,python,✌关注✌私信我✌具体的问题,我会尽力帮助你。一、研究目的本研究旨在开发一套基于Python的代驾管理系统,以满足现代城市交通中代驾服务的需求。具体研究目的如下: 首先,通过构建一套完…...