解决Ubuntu下adb 显示insufficient permissions for device的问题

用USB线连接设备后抓取log时,在命令行输入:adb root后出现了
error:insufficient permissions for device 这显然是不正常的
我们再在命令行上输入
adb device 出现了:

List of devices attached 
????????????    no permissions

这就可以知道了,出问题了,从上面给出的提示翻译成中文是”设备权限不足“,adb devices给出的提示 ”No permission“,所以我们要解决非标设备默认无法被识别的问题。
来看我操作一波:

  • 1、打开文件路径,到/etc/udev/rules.d 下:
    cd /etc/udev/rules.d
  • 2、来到之后在这里创建一个51-android.rules文件:
    sudo vim 51-android.rules
  • 3、然后在文件中添加如下配置:
    SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0666"
  • 4、保存退出
    这时候就只差最后一步
  • 5、再为51-android.rules加上权限
    sudo chmod a+x 51-android.rules
  • 6、最后
    将设备拔下来再连接上就可以了,记得回到主目录下再进行 adb root
    如果不放心就adb devices一下看看

以下是扩展部分:
问题是解决了,但跟着这种傻瓜操作我们又能得到什么呢。作为一个热衷学习的人我们应该了解我们为什么这么做。为什么要在这个路径上添加这么个文件;为什么要在这个文件上加上这么一段命令呢;接下来就来探讨以下。

1、为什么在这个路径下 /etc/udev/rules.d
答:/etc/udev/rules.d这个目录存储的是以.rules结束的文件。下面可能有好几个udev规则文件,每一个文件处理一系列规则来帮助udev分配名字给设备文件以保证能被内核识别。
2、为什么输入以上文本
答:规则文件里的规则有一系列的键/值对组成,键/值对之间用逗号(,)分割。每一个键或者是用户匹配键,或者是一个赋值键。匹配键确定规则是否被应用,而赋 值键表示分配某值给该键。这些值将影响udev创建的设备文件。赋值键可以处理一个多值列表。匹配键和赋值键操作符解释见下表:

udev 键/值对操作符

操作符

匹配或赋值

解释

==

匹配

相等比较

!=

匹配

不等比较

=

赋值

分配一个特定的值给该键,他可以覆盖之前的赋值。

+=

赋值

追加特定的值给已经存在的键

:=

赋值

分配一个特定的值给该键,后面的规则不可能覆盖它。

这有点类似我们常见的编程语言,比如C语言。只是这里的键一次可以处理多个值。有一些键在udev规则文件里经常出现,这些键的值可以使用通配符(*,?,甚至范围,比如[0-9]),这些常用键列举如下:

常用udev键


含义

ACTION

一个时间活动的名字,比如add,当设备增加的时候

KERNEL

在内核里看到的设备名字,比如sd*表示任意SCSI磁盘设备

DEVPATH

内核设备录进,比如/devices/*

SUBSYSTEM

子系统名字,比如sound,net

BUS

总线的名字,比如IDE,USB

DRIVER

设备驱动的名字,比如ide-cdrom

ID

独立于内核名字的设备名字

SYSFS{ value}

sysfs属性值,他可以表示任意

ENV{ key}

环境变量,可以表示任意

PROGRAM

可执行的外部程序,如果程序返回0值,该键则认为为真(true)

RESULT

上一个PROGRAM调用返回的标准输出。

NAME

根据这个规则创建的设备文件的文件名。注意:仅仅第一行的NAME描述是有效的,后面的均忽略。 如果你想使用使用两个以上的名字来访问一个设备的话,可以考虑SYMLINK键。

SYMLINK

根据规则创建的字符连接名

OWNER

设备文件的属组

GROUP

设备文件所在的组。

MODE

设备文件的权限,采用8进制

RUN

为设备而执行的程序列表

LABEL

在配置文件里为内部控制而采用的名字标签(下下面的GOTO服务)

GOTO

跳到匹配的规则(通过LABEL来标识),有点类似程序语言中的GOTO

IMPORT{ type}

导入一个文件或者一个程序执行后而生成的规则集到当前文件

WAIT_FOR_SYSFS

等待一个特定的设备文件的创建。主要是用作时序和依赖问题。

PTIONS

特定的选项: last_rule 对这类设备终端规则执行; ignore_device 忽略当前规则; ignore_remove 忽略接下来的并移走请求。all_partitions 为所有的磁盘分区创建设备文件。

我们输入的文本是:SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0666" 所以我们可以知道:子系统名字为”USB“,环境变量为”usb_device“,设备权限为”0666“