adbd源码位于system/core/adb/目录下,可执行文件位于/sbin/adbd。通过adb执行ps命令,结果如下:
USER PID PPID VSIZE RSS WCHAN PC NAME
root 1 0 296 212 c00b0124 0000d9ec S /init
... ...
shell 2183 1 3372 184 ffffffff 0000eca4 S /sbin/adbd
root 2204 1859 832 336 00000000 afe0c7dc R ps
看一下倒数第二行,adbd所在进程的父进程是root,本身的user是shell。对于一个发布状态的产品,这个是最正常不过了。但现在开发中遇到这样一个需求,产品已经处在发布状态(编译模式已经改成user)的情况下,因为BSP需要处理一些内核上的东西,需要在PC上执行adb shell后具有root权限。也就是这种效果:
USER PID PPID VSIZE RSS WCHAN PC NAME
root 1 0 296 212 c00b0124 0000d9ec S /init
... ...
root 1911 1 3376 184 ffffffff 0000eca4 S /sbin/adbd
root 2198 2197 828 332 00000000 afe0c7dc R ps
要达到这个效果,就是要在启动adbd时,以root用户启动。那么,先看一下在Android中怎么启动adbd。