首页 > 系统相关 >在Linux下adb连接不上android手机的终极解决方案

在Linux下adb连接不上android手机的终极解决方案

时间:2023-01-05 12:01:12浏览次数:82  
标签:usb VID server adb Linux android 不上 设备


1、做android开发的过程,碰到了Linux下adb识别不了android设备的问题,刚开始在网上google下,发现都是针对ubuntu下的一些说明:如google提供的方法:​​http://developer.android.com/tools/device.html​​,但发现通过做这些还是有些android设备连接不上,于是通过阅读adb源码,得出了一些方法,和大家一起共勉下:


a、google提到的修改/etc/udev/rules.d/51-android.rules的方法:

​SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0666", GROUP="plugdev"​

其实这样做的目的无非是为了使adb对创建的usb节点有访问权限,其实只要使用root来启动adb server就不存在此问题。做法如下:在root终端上运行adb start-server ,如果已经有运行adb命令的则需要杀掉adb server,运行 ps aux | grep adb ,找到adb server的pid,然后kill掉,如我机器上:

root       2795  0.0      0.0         30556      1244          pts/2              sl          09:00  0:03           adb fork-server server

执行kill 2795杀掉adb server。


b、通过以上办法还是无法识别android设备的,则可能你的android的VID未能加入adb中,你需要手动添加。

添加的文件位置与你第一次启动adb server有关,如你在root上启动adb server,则其位置在

/root/.android/adb_usb.ini,否则其位置在$HOME/.android/adb_usb.ini下,如果$HOME为空,则在/tmp/.android/adb_usb.ini下。未有文件或目录的请手动添加。以下是一份adb_usb.ini的示例:

#for OKWAP C900

0x14b4

#for K-Touch W606

0x0525

#for lenovo speic

0x2006

其中#开头表注释,其它则表示android的VID,每个VID需要单独一行。

获取VID的方法:插上设备前运行lsusb,插上设备后,再次运行lsusb,多出的那个就是你的设备,而VID就在其中如:

Bus 001 Device 034: ID 2006:5010

其中的2006即为其VID。

在adb_usb.ini中添加好后,杀掉adb server,然后启动adb server,(参考a中提到的方法)。


c、如果按以上执行完以上两步还不行,那就碰到了令人头痛的问题了。

现在有些usb设备叫做“免CD”设备。具体点来说,目前一些新的USB 设备在内部含有windows驱动,当你第一次插入的时候,它作为一个闪存,并提示你安装驱动。在安装驱动之后,驱动会自动切换USB设备的模式,存储设备将会消失(大多数情况),新的设备将会产生(如USB类型的Modem)。这种特征被无线设备的制造商称其为“免CD”的设备。在Linux下是通过usb_modeswitch这个工具自动切换的。你读到这里说明你的设备肯定不在usb_modeswitch支持的列表中。此时你要么等其支持,要么就是自己动手支持了。

要自己手动支持,这是个复杂的过程,你可以参考:​​http://www.draisberghof.de/usb_modeswitch/​

简单的来讲,如果你要自己支持,也就是要抓取Windows下驱动做了哪些事情,让其进行了模式切换。然后你在/etc/usb_modeswitch.d/目录下参照已有的文件,创建自己的配置文件如:2006:5010,在其中添加你抓取到得信息。

备注:windows下没过多研究,一般装上驱动,识别到了adb接口就可以识别到。平板上和Linux下比较类似,不过其$HOME为空,所以添加的目录在/tmp/.android/adb_usb.ini里。

标签:usb,VID,server,adb,Linux,android,不上,设备
From: https://blog.51cto.com/u_15930680/5990129

相关文章

  • linux —— shell 编程(文本处理)
    1、基本文本处理sort :用于排序,常用参数-t指定一行的分隔符-k指定具体排序的规则-d按字典序排列 -f忽略大小写 -u(unique)丢弃相同指定字段的记录unique......
  • 1、app自动化的底层逻辑,adb及monkey
    app自动化的过程中,底层逻辑是计算机通过adb与移动设备进行沟通,告诉移动设备,进行什么操作;一、概念:Andriod调试桥(adb),是一种命令行工具,可以让我们与设备进行通讯。二、adb......
  • Linuxshell字符
    Shell字符串字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。单引号str='thisisast......
  • LNMP架构环境之PHP+Mariadb环境项目:部署博客wordpress项目
    1)配置nginx博客虚拟主机cat>/etc/nginx/conf.d/02_blog.etiantian.org.conf<server{server_nameblog.etiantian.org;listen80;root/data/blog;indexindex.php......
  • 《DFZU2EG_4EV MPSoC之嵌入式Linux开发指南》第三章 Linux C编程入门​
    LinuxC编程入门​在Windows下我们可以使用各种各样的IDE进行编程,比如强大的VisualStudio。但是在Ubuntu下如何进行编程呢?Ubuntu下也有一些可以进行编程的工具,但是大多都只......
  • 自学Linux,你需要get哪些点?
    近些年来,Linux操作系统越来越受欢迎,它的开源、免费是亮点也是优点,并且稳定性和安全性也得到认可,还有Linux有很多版本供大家选择,可以定制化。据我所知,现在很多公司的开发项目......
  • Linux LVM 磁盘扩容
    LVM的基本概念物理卷physicalVolume(PV):可以在上面建立组卷的媒介,可以是硬盘分区,也可以是硬盘本身或者回环文件(loopbackfile)。物理卷包括一个特殊的header,其余部分被切割为......
  • Linux 安装seata
    目的:seata是搭配nacos使用nacos配置了seata的命名空间:490f2023-5fvf-30cc-b1cd-e0f0363f0aa61、下载seata包地址:https://github.com/search?q=seata&type=本次安装版本......
  • Linux目录结构、查看目录命令
    ###一、Linux目录结构​      设计哲学:​            一切皆文件!!!!!```​      /   根目录​            /root​......
  • linux 中sed命令将指定列替换为特定的内容
     001、[root@pc1test]#lsa.txt[root@pc1test]#cata.txtdiy5fersd34d83fdgdgxej7[root@pc1test]......