2245人阅读
android(1058)
首先您要确认您是想开启adbd 的root 权限,还是让app 也可以拿到root 权限。
(1). adbd 的root 权限
我们通常在debug user 版本问题时, 或者进行user 版本的monkey test 时都会这个工作,以便debug.
如果你想user 版本adb root 权限默认关闭, 而在想开启时, 可以通过工程模式中的设置项开启, 那么请USER2ROOT 功能。
此功能默认关闭, 如果开启, 需要在ProjectConfig.mk 中设置: MTK_USER_ROOT_SWITCH = yes
(2). app 的root 权限
app 的root 权限通常是通过执行su 命令来获取。注意的是KK 上, 因为多种限制, 普通的su 难以直接拿到root 权限, 需要做针对性的改动.
通常我们会内置具有控制端的第三方su, 下面以内置SuperSU, 以及使用Google default su 为例进行说明。
(3). 如何内置第三方SuperSU
该方式可以绕过zygote 和 adbd 对Root Capabilities BoundSet 的限制.
3.1. 下载SuperSU
&SuperSU: http://forum./showthread.php?t=1538053
3.2. 内置Superuser.apk 到 system/app
& &将su 复制并改名成: daemonsu
& &内置su 到 system/xbin
& &内置daemonsu 到 system/xbin
& &内置chattr 到 system/xbin
& &内置chattr.pie 到 /system/xbin
3.3. 内置install-recovery.sh 到system/etc
更新alps/system/core/inlcude/private/android_filesystem_config.h
在android_files 数组的最开始新增.
{ 00755, AID_ROOT, & & &AID_ROOT, & & &0, &system/etc/install-recovery.sh& },
(4). 如何内置Google default su
4.1 放开Google default su 只准shell/root 用户使用的限制.
& & system/extras/su/su.c 中删除下面3行代码
& & if (myuid != AID_ROOT && myuid != AID_SHELL) {
& & & & fprintf(stderr,&su: uid %d not allowed to su\n&, myuid);
& & & & return 1;
4.2 首先将此编译出的su 内置到system/bin, 然后修改su 的内置权限,启用sbit 位.
更新alps/system/core/inlcude/private/android_filesystem_config.h
在android_files 数组中
{ 06755, AID_ROOT, & & &AID_ROOT, & & &0, &system/bin/su& },
注意这行要放在
{ 00755, AID_ROOT, & & &AID_SHELL, & & 0, &system/bin/*& },
4.3 如果是KK 以及以后版本, 需要强行解除zygote 和 adbd 对Root Capabilities BoundSet 的限制
更新kernel/security/commoncap.c 中 cap_prctl_drop 函数为:
static long cap_prctl_drop(struct cred *new, unsigned long cap)
& //begin: Let 'zygote' and 'adbd' drop Root Capabilities BoundSet ineffectively
& & & & if (!strncmp(current-&comm, &zygote&, 16)) {
& & & & & & & & return -EINVAL;
& & & & if (!strncmp(current-&comm, &adbd&, 16)) {
& & & & & & & & return -EINVAL;
& & & & // add end
& & & & if (!capable(CAP_SETPCAP))
& & & & & & & & return -EPERM;
& & & & if (!cap_valid(cap))
& & & & & & & & return -EINVAL;
& & & & cap_lower(new-&cap_bset, cap);
& & & & return 0;
重新编译系统, 重新download 后, adb shell 进入后再输入su 看看是否命令行由$切换到#, 如果切换即成功。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1800169次
积分:33179
积分:33179
排名:第142名
原创:1330篇
转载:590篇
译文:83篇
评论:269条
文章:117篇
阅读:35243
(4)(22)(16)(6)(8)(12)(25)(139)(24)(10)(7)(3)(5)(2)(3)(6)(5)(5)(2)(4)(3)(6)(4)(6)(6)(4)(6)(6)(17)(12)(57)(74)(17)(10)(3)(1)(1)(2)(6)(43)(74)(63)(21)(1)(125)(627)(60)(6)(1)(2)(1)(4)(2)(11)(3)(8)(1)(14)(2)(5)(18)(4)(5)(7)(6)(6)(7)(15)(108)(74)(28)(15)(11)(19)(24)(2)(2)(29)25490人阅读
Linux编程技巧(11)
int prctl&( int option,unsigned long arg2,unsigned long arg3,unsigned long arg4,unsigned long arg5 )
这个系统调用指令是为进程制定而设计的,明确的选择取决于option:
PR_GET_PDEATHSIG :返回处理器信号;
PR_SET_PDEATHSIG :arg2作为处理器信号pdeath被输入,正如其名,如果父进程不能再用,进程接受这个信号。
PR_GET_DUMPABLE :返回处理器标志
PR_SET_DUMPABLE :arg2作为处理器标志dumpable被输入。
PR_GET_NAME :返回调用进程的进程名字给参数arg2; (Since Linux2.6.9)
PR_SET_NAME :把参数arg2作为调用进程的经常名字。(SinceLinux 2.6.11)
PR_GET_TIMING :
PR_SET_TIMING :判定和修改进程计时模式,用于启用传统进程计时模式的
PR_TIMING_STATISTICAL,或用于启用基于时间戳的进程计时模式的
PR_TIMING_TIMESTAMP。
CAP_CHOWN功能:
在一个_POSIX_CHOWN_RESTRICTED功能定义的系统。这会越过改变系统文件所有者和组所有的权限
CAP_DAC_OVERRIED功能:
如果_POSIX_ACL定义,就会越过所有的DAC访问,包括ACL执行访问,用CAP_LINUX_IMMUTABLE功能来排除
CAP_DAC_READ_SEARCH功能:
如果_POSIX_ACL定义,就会越过所有的DAC的读限制,
&并在所有的文件和目录里搜索,包括ACL限制。用CAP_LINUX_IMMUTABLE来限制DAC访问
CAP_FOWNER功能:
&越过文件说有的允许限制,如文件的所有者ID必须和用户ID一样,除了CAP_FSETID可用。它不会越过MAC和DAC限制
CAP_FSETID功能:
越过当设置文件的S_ISUID和S_ISGID位的时候,用户的ID必须和所有者ID匹配的限制,设置S-ISGID位的时候,组ID
必须和所有者ID匹配的限制,用chown来设置S_ISUID和S_ISGID为的功能限制
CAP_FS_MASK功能:
用来回应suser()或是fsuser()。
CAP_KILL功能:
一个有有效用户ID的进程发送信号时必须匹配有效用户ID的功能会越过
CAP_SETGID功能:
允许setgid() 功能, 允许setgroups()
允许在socket里伪造gid
CAP_SETUID功能:
允许set*uid()功能 允许伪造pid在socket
CAP_SETPCAP 功能:
把所有的许可给所有的pid。或是把所有的许可删除
CAP_LINUX_IMMUTABLE功能:
允许更改S_IMMUTABLE和S_APPEND文件属性
CAP_NET_BIND_SERVICE功能:
允许绑定1024下的TCP/UDP套接字
CAP_NET_BROADCAST功能:
允许广播,监听多点传送
CAP_NET_ADMIN功能:
&允许配置接口
允许管理IP防火墙IP伪装和帐户
允许配置socket调试选项
允许修改路由表
允许配置socket上的进程的组属性
允许绑定所有地址的透明代理
允许配置TOS(服务类型)
允许配置混杂模式
允许清除驱动状态
允许多点传送
允许读或写系统记录
CAP_NET_RAW功能:
允许用RAW套接字
允许用PACKET套接字
CAP_IPC_LOCK功能:
允许琐定共享内存段
允许mlock和mlockall
CAP_IPC_OWNER功能:
越过IPC所有权检查
CAP_SYS_MODULE功能:
&插入或删除内核模块
CAP_SYS_RAWIO功能:
允许ioperm/iopl和/dev/prot的访问
允许/dev/mem和/dev/kmem访问
允许块设备访问(/dev/[sh]d??)
CAP_SYS_CHROOT功能:
允许chroot()
CAP_SYS_PTRACE功能:
允许ptrace()任何进程
CAP_SYS_PACCT功能:
允许配置进程帐号
CAP_SYS_ADMIN功能:
允许配置安全钥匙
允许管理随机设备
允许设备管理
允许检查和配置磁盘限额
允许配置内核日志
允许配置域名
允许配置主机名
允许调用bdflush()命令
允许mount()和umount()命令
允许配置smb连接
允许root的ioctls
允许nfsservctl
允许VM86_REQUEST_IRQ
允许在alpha上读写pci配置
允许在mips上的irix_prctl
允许刷新所有的m68k缓存
&允许删除semaphores
用CAP_CHOWN去代替&chown&IPC消息队列,标志和共享内存
允许锁定或是解锁共享内存段
允许开关swap
允许在socket伪装pids
允许设置块设备的缓存刷新
允许设置软盘驱动器
允许开关DMA开关
允许管理md设备
允许管理ide驱动
允许访问nvram设备
允许管理apm_bios,串口或是bttv电视设备
允许在isdn CAPI的驱动下生成命令
允许读取pci的非标准配置
允许DDI调试ioctl
允许发送qic-117命令
允许启动或禁止SCSI的控制和发送SCSI命令 允许配置加密口令在回路文件系统上
CAP_SYS_BOOT功能:
允许用reboot() 命令
CAP_SYS_NICE功能:
允许提高或设置其他进程的优先权
允许在自己的进程用FISO和实时的安排和配置
CAP_SYS_RESOURCE功能:
越过资源限制,设置资源限制
越过配额限制
越过保留的ext2文件系统
允许大于64hz的实时时钟中断
越过最大数目的控制终端
越过最大数目的键
CAP_SYS_TIME功能:
允许处理系统时钟
允许_stime
允许设置实时时钟
CAP_SYS_TTY_CONFIG功能:
&允许配置终端设备
允许vhangup()终端
返回值
PR_GET_DUMPABLE 和 PR_GET_KEEPCAPS 成功时返回0或者1。其他的option值都是成功时返回0。
错误时返回 -1,并设置相应的错误号。
EINVAL————option的值不正确,或者当它是PR_SET_PDEATHSIG时,参数arg2的值不是0或者信号数字。
EBADF————无效的描述符
实例:于多线程应用程序,如果能够给每个线程命名,那么调试起来的便利是不言而喻的。
#include&stdio.h&
#include&pthread.h&
#include&sys/prctl.h&
void* tmain(void*arg)
char name[32];
prctl(PR_SET_NAME,(unsignedlong)&xx&);
prctl(PR_GET_NAME,(unsignedlong)name);
printf(&%s/n&, name);
int main(void)
pthread_create(&tid,NULL, tmain,NULL);
pthread_join(tid,NULL);
编 译并运行:
xiaosuo@gentux test $ gcc t_threadname.c -lpthread
xiaosuo@gentux test $ ./a.out
在 另一个终端,通过ps找到a.out的pid:
xiaosuo@gentux test $ ps aux | grep a.out
&xiaosuo 2 &0.0 14144 & 544 pts/6 & &Sl+ 16:23 & 0:00 ./a.out
看命名是否奏效:
xiaosuo@gentux test $ cd /proc/29882/task/
xiaosuo@gentux task $ ls
xiaosuo@gentux task $ cd 29883/
xiaosuo@gentux 29883 $ cat cmdline
./a.outxiaosuo@gentux 29883 $
有点儿郁闷,cmdline显示的竟然还是./a.out。通过 运行时打印的xx和strace检查prctl的返回值确认prctl确实成功运行。怀疑这个名字只能通过prctl获得,有点儿失落,可心仍不甘。查看 ps的man,并实验,终于找到了&xx&:
xiaosuo@gentux 29883 $ ps -L -p 29882
& PID & LWP TTY & & & & &TIME CMD
& pts/6 & &00:00:00 a.out
& pts/6 & &00:00:00 xx
Linux下进程重命名的方法:
使用系统函数prctl(),声明如下:
#include &sys/prctl.h&
int prctl(int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5);
具体用法请参考http://www.kernel.org/doc/man-pages/online/pages/man2/prctl.2.html
&进程重命名代码:
prctl(PR_SET_NAME, “process_name”, NULL, NULL, NULL);
第一个参数是操作类型,指定PR_SET_NAME,即设置进程名
第二个参数是进程名字符串,长度至多16字节
from:&http://blog.csdn.net/zuokong/article/details/7318154
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:767992次
积分:7846
积分:7846
排名:第2577名
原创:12篇
转载:581篇
评论:44条
(3)(1)(3)(1)(1)(2)(22)(14)(2)(1)(3)(8)(4)(7)(23)(2)(36)(24)(4)(4)(2)(1)(3)(7)(5)(20)(2)(8)(3)(4)(5)(2)(19)(6)(2)(1)(2)(3)(12)(32)(56)(44)(11)(36)(10)(22)(26)(2)(46)(29)(7)9065人阅读
C/C++编程(9)
今天在看项目代码时,发现了一个以前没有用过的函数:prctl()。查阅相关资料有所得,现总结如下
&&&&&&&&&&&&&&&&&&&&&不求面面俱到,但求言简意赅&&&&&&&&&&&&&&&&&&&&&&&&
1 》》函数原型《《
#include &sys/prctl.h&
int prctl(int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5);
2&》》功 & & & &能《《
prctl(PR_SET_NAME, “process_name”)
第一个参数是操作类型,指定PR_SET_NAME,即设置进程名
第二个参数是进程名字符串,长度至多16字节
OK,很简单吧!
3&》》实 & & & &例《《
void setPthreadName(char *name)
if(name != NULL)
(void)prct(15, (unsigned long)name);//lname 最多16个字符
详细用法参考:http://www.kernel.org/doc/man-pages/online/pages/man2/prctl.2.html
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:160267次
积分:1925
积分:1925
排名:千里之外
原创:37篇
转载:13篇
(6)(13)(7)(7)(2)(3)(12)下次自动登录
现在的位置:
& 综合 & 正文
prctl()函数应用
int prctl(int option,unsigned longarg2,unsigned long arg3,unsigned long arg4,unsigned long arg5)
这个系统调用指令是为进程制定而设计的,明确的选择取决于option:
PR_GET_PDEATHSIG :返回处理器信号;
PR_SET_PDEATHSIG :arg2作为处理器信号pdeath被输入,正如其名,如果父进程不能再用,进程接受这个信号。
PR_GET_DUMPABLE :返回处理器标志
PR_SET_DUMPABLE :arg2作为处理器标志dumpable被输入。
PR_GET_NAME :返回调用进程的进程名字给参数arg2; (Since Linux2.6.9)
PR_SET_NAME :把参数arg2作为调用进程的经常名字。(SinceLinux 2.6.11)
PR_GET_TIMING :
PR_SET_TIMING :判定和修改进程计时模式,用于启用传统进程计时模式的
PR_TIMING_STATISTICAL,或用于启用基于时间戳的进程计时模式的
PR_TIMING_TIMESTAMP。
CAP_CHOWN功能:
在一个_POSIX_CHOWN_RESTRICTED功能定义的系统。这会越过改变系统文件所有者和组所有的权限
CAP_DAC_OVERRIED功能:
如果_POSIX_ACL定义,就会越过所有的DAC访问,包括ACL执行访问,用CAP_LINUX_IMMUTABLE功能来排除
CAP_DAC_READ_SEARCH功能:
如果_POSIX_ACL定义,就会越过所有的DAC的读限制,
并在所有的文件和目录里搜索,包括ACL限制。用CAP_LINUX_IMMUTABLE来限制DAC访问
CAP_FOWNER功能:
越过文件说有的允许限制,如文件的所有者ID必须和用户ID一样,除了CAP_FSETID可用。它不会越过MAC和DAC限制
CAP_FSETID功能:
越过当设置文件的S_ISUID和S_ISGID位的时候,用户的ID必须和所有者ID匹配的限制,设置S-ISGID位的时候,组ID
必须和所有者ID匹配的限制,用chown来设置S_ISUID和S_ISGID为的功能限制
CAP_FS_MASK功能:
用来回应suser()或是fsuser()。
CAP_KILL功能:
一个有有效用户ID的进程发送信号时必须匹配有效用户ID的功能会越过
CAP_SETGID功能:
允许setgid() 功能, 允许setgroups()
允许在socket里伪造gid
CAP_SETUID功能:
允许set*uid()功能 允许伪造pid在socket
CAP_SETPCAP 功能:
把所有的许可给所有的pid。或是把所有的许可删除
CAP_LINUX_IMMUTABLE功能:
允许更改S_IMMUTABLE和S_APPEND文件属性
CAP_NET_BIND_SERVICE功能:
允许绑定1024下的TCP/UDP套接字
CAP_NET_BROADCAST功能:
允许广播,监听多点传送
CAP_NET_ADMIN功能:
允许配置接口
允许管理IP防火墙IP伪装和帐户
允许配置socket调试选项
允许修改路由表
允许配置socket上的进程的组属性
允许绑定所有地址的透明代理
允许配置TOS(服务类型)
允许配置混杂模式
允许清除驱动状态
允许多点传送
允许读或写系统记录
CAP_NET_RAW功能:
允许用RAW套接字
允许用PACKET套接字
CAP_IPC_LOCK功能:
允许琐定共享内存段
允许mlock和mlockall
CAP_IPC_OWNER功能:
越过IPC所有权检查
CAP_SYS_MODULE功能:
插入或删除内核模块
CAP_SYS_RAWIO功能:
允许ioperm/iopl和/dev/prot的访问
允许/dev/mem和/dev/kmem访问
允许块设备访问(/dev/[sh]d??)
CAP_SYS_CHROOT功能:
允许chroot()
CAP_SYS_PTRACE功能:
允许ptrace()任何进程
CAP_SYS_PACCT功能:
允许配置进程帐号
CAP_SYS_ADMIN功能:
允许配置安全钥匙
允许管理随机设备
允许设备管理
允许检查和配置磁盘限额
允许配置内核日志
允许配置域名
允许配置主机名
允许调用bdflush()命令
允许mount()和umount()命令
允许配置smb连接
允许root的ioctls
允许nfsservctl
允许VM86_REQUEST_IRQ
允许在alpha上读写pci配置
允许在mips上的irix_prctl
允许刷新所有的m68k缓存
允许删除semaphores
用CAP_CHOWN去代替"chown"IPC消息队列,标志和共享内存
允许锁定或是解锁共享内存段
允许开关swap
允许在socket伪装pids
允许设置块设备的缓存刷新
允许设置软盘驱动器
允许开关DMA开关
允许管理md设备
允许管理ide驱动
允许访问nvram设备
允许管理apm_bios,串口或是bttv电视设备
允许在isdn CAPI的驱动下生成命令
允许读取pci的非标准配置
允许DDI调试ioctl
允许发送qic-117命令
允许启动或禁止SCSI的控制和发送SCSI命令 允许配置加密口令在回路文件系统上
CAP_SYS_BOOT功能:
允许用reboot() 命令
CAP_SYS_NICE功能:
允许提高或设置其他进程的优先权
允许在自己的进程用FISO和实时的安排和配置
CAP_SYS_RESOURCE功能:
越过资源限制,设置资源限制
越过配额限制
越过保留的ext2文件系统
允许大于64hz的实时时钟中断
越过最大数目的控制终端
越过最大数目的键
CAP_SYS_TIME功能:
允许处理系统时钟
允许_stime
允许设置实时时钟
CAP_SYS_TTY_CONFIG功能:
允许配置终端设备
允许vhangup()终端
PR_GET_DUMPABLE 和 PR_GET_KEEPCAPS 成功时返回0或者1。其他的option值都是成功时返回0。
错误时返回 -1,并设置相应的错误号。
EINVAL————option的值不正确,或者当它是PR_SET_PDEATHSIG时,参数arg2的值不是0或者信号数字。
EBADF————无效的描述符
实例:于多线程应用,如果能够给每个线程命名,那么调试起来的便利是不言而喻的。
#include&stdio.h&#include&pthread.h&#include&sys/prctl.h&
void* tmain(void*arg){char name[32];prctl(PR_SET_NAME,(unsignedlong)"xx");prctl(PR_GET_NAME,(unsignedlong)name);printf("%s/n", name);while(1)sleep(1);}
int main(void){pthread_t tid;pthread_create(&tid,NULL, tmain,NULL);pthread_join(tid,NULL);
return 0;}
编 译并运行:
xiaosuo@gentux test $ gcc t_threadname.c -lpthread
xiaosuo@gentux test $ ./a.out
在 另一个终端,通过ps找到a.out的pid:
xiaosuo@gentux test $ ps aux | grep a.out
0:00 ./a.out
看命名是否奏效:
xiaosuo@gentux test $ cd /proc/29882/task/
xiaosuo@gentux task $ ls
xiaosuo@gentux task $ cd 29883/
xiaosuo@gentux 29883 $ cat cmdline
./a.outxiaosuo@gentux 29883 $
有点儿郁闷,cmdline显示的竟然还是./a.out。通过 运行时打印的xx和strace检查prctl的返回值确认prctl确实成功运行。怀疑这个名字只能通过prctl获得,有点儿失落,可心仍不甘。查看 ps的man,并实验,终于找到了"xx":
xiaosuo@gentux 29883 $ ps -L -p 29882
00:00:00 a.out
00:00:00 xx
strace 后知道这个“xx”竟然隐匿于stat和status:
xiaosuo@gentux 29883$ cat stat
&&&&推荐文章:
【上篇】【下篇】后使用快捷导航没有帐号?
查看: 733|回复: 7
请问一下6572机器出厂就获取到ROOT权限,请问要做什么修改?
请问一下6572机器出厂就获取到ROOT权限,请问要做什么修改? 哪位改过??
自己先顶一下! 国际惯例
如何永久性开启adb 的root权限
(出处: 手机开发联盟)
如何永久性开启adb 的root权限
/forum.php?mod=viewthread&tid=15052&fromuid=4
& && && && && &谢谢了!
[Description]
如何永久性开启adb 的root权限
user debug root adb adbd
[Solution]
adb 的root 权限是在system/core/adb/adb.c 中控制。主要根据ro.secure 以及 ro.debuggable 等system property 来控制。默认即档ro.secure 为0 时,即开启root 权限,为1时再根据ro.debuggable 等选项来确认是否可以用开启root 权限。为此如果要永久性开启adb 的root 权限,有两种修改的方式:
1. 修改system property ro.secure, 让ro.secure=0。
2. 修改adb.c 中开启root 权限的判断逻辑。
下面详细说明这两种修改方式:
第一种方法. 修改system property ro.secure, 让ro.secure=0。
(1)修改alps/build/core/main.mk
ifneq (,$(user_variant))
&&# Target is secure in user builds.
&&ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=1
将ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=1 改成 ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=0
(2)在android JB 版本(4.1) 以后,google 从编译上直接去除了adbd 的user 版本root 权限, 为此您要修改system/core/adb/Android.mk 中的编译选项ALLOW_ADBD_ROOT, 如果没有打开这个选项,那么adb.c 中将不会根据ro.secure 去选择root 还是shell 权限,直接返回shell 权限。因此您必须需要Android.mk 中的第126行:
& & ifneq (,$(filter userdebug eng,$(TARGET_BUILD_VARIANT)))
& & ===& ifneq (,$(filter userdebug user eng,$(TARGET_BUILD_VARIANT)))
第二种方法. 修改adb.c 中开启root 权限的判断逻辑。这里针对4.1 以后版本 和4.1以前版本有所区别。
(1).如果是JB 4.1 以后版本,直接修改函数should_drop_privileges() 函数, 清空这个函数,直接返回 0 即可。返回0 即开启root 权限。
(2).如果是JB 4.1 以前版本,直接修改函数adb_main 函数,在
& & /* don't listen on a port (default 5037) if running in secure mode */
& & /* don't run as root if we are running in secure mode */
& & if (secure) {
& && &&&struct __user_cap_header_
& && &&&struct __user_cap_data_
& && &&&if (prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0) != 0) {
& && && && &exit(1);
在这段代码前加一行:
& & secure = 0;&&//mtk71029 add for root forever.
& & /* don't listen on a port (default 5037) if running in secure mode */
& & /* don't run as root if we are running in secure mode */
& & if (secure) {
& && &&&struct __user_cap_header_
& && &&&struct __user_cap_data_
& && &&&if (prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0) != 0) {
& && && && &exit(1);
[测试与确认]
当修改完成后,只需要重新build bootimage ,然后download 即可,然后到setting 中开启debug 选项,adb 连接后,会显示 #, 即root 成功。
如果贵司没有拿到adb 的source, 而贵司又需要自己修改adb 的话, 那么就麻烦贵司提交eService。由我司进一步协助贵司处理。
JB 版本后user build + eng bootimage 无法开机
如何打开user debug选项
JB 4.2 user 版本的开发选项不见了,如何打开adb debug
Dear customer.
您可以按照FAQ 将adb 的root 权限打开。 也可以直接将su 内置到版本中,改法也很简单:
alps/system/extras/su/android.mk 修改其tags 变成optional, 然后将su.c 里面的49-52 行删除即可,即任意的人都可以使用root 权限
Yanghui Li
Dear customer.
您可以按照FAQ 将adb 的root 权限打开。 也可以直接将su 内置到版本中,改法也很简单: ...
你好,兄弟。
我现在不是要adb root的权限,是一键root那种apk的权限。
有没有做过
你好,兄弟。
我现在不是要adb root的权限,是一键root那种apk的权限。
有没有做过
楼上说的就是superuser的权限啊,你先试下啊
论坛资料为网友自由上传,与本论坛无关。
Powered by
关注一牛微信
获取手机验证码