android sdk 编译出有root权限的系统

来源:互联网 发布:mysql 事务实现原理 编辑:程序博客网 时间:2024/06/10 05:05

先简单说明一下状况:

1.使用硬件说明:

giec r1 电视盒

2.android sdk 来源:

厂商提供


到手杰科的电视盒,拆开来有串口可以输出信息,其有三个usb口,连接pc端,pc端adb无法发现设备(之前公司用mstar板子的时候,需要添加个一配置文件才能发现 ,这里不知道是否是这个情况),因其wifi可以使用同事推荐使用 adbwireless ,一个模拟adb的工具,在pc端可以跟正常情况一样使用。

安装adbwireless后,运行adbwireless 发现提示信息说必须要rooted phone (这应该就是传说中的root)。

本人对android如何root没有研究,在网上搜了一下,看到q5 root 工具,可以把该盒子root ,这是一个windows下的小工具,具体内容不在这里详细絮说,可以直接搜 q5 root

就能看到该工具,并且会有简单说明,用起来很白痴的工具....

adbwireless可以顺利运行,pc端连接也是没有问题的,一切就是这么顺利,直到....


使用厂商android sdk(有同步最新厂商修改代码),编译出新的img (主要是boot.img system.img recover.img),通过厂商提供的工具将img 烧写到板子上,成功烧写上,但还是有不少问题。在验证摄像头是否好用的过程中,发现pc端没法识别插入的设备(刚刷新了系统,上面的工作也要重新来一遍),使用q5 root工具 将系统root ....这个工具不好使了.....问题来了....


被逼无奈,只能研究一下这个android root 到底怎么回事....

root 在我看来是一中linux下的高级权限,为了保证系统的安全 android 系统当然不会把root权限放开。但作为研发人员,很多时候,没有root的权限...怎么搞??!!


看网上很多root 说明,其实就是把 su 这个程序替换一下,看到一些framework层的分析,说是一些应用程序就是使用这个程序进行提权运行的....好吧,在linux下,命令行下大家貌似也是这么干的么...看来都是一样的东西,把我的流水账,记录如下:


1.系统system 分区以及 / 分区 ,没有写权限,会让我很不舒服

    mount rootfs rootfs / ro remount   改成     mount rootfs rootfs / rw remount

    mount ext4 mtd@system /system wait noatime ro nodiratime noauto_da_alloc

改成      mount ext4 mtd@system /system wait noatime nodiratime noauto_da_alloc

2.更改系统登陆用户

系统默认登陆用户为 shell ,在init.rc中搜了一下,位置如下:

service console /system/bin/sh
    class core
    console
    disabled
    user shell
    group log

将登陆用户设定为root

service console /system/bin/sh
    class core
    console
    disabled
    user root
    group log




3.网上很多人让替换su ,我不了解这个用来替换程序怎么来的,也看到有人直接把busybox 链接成 su (感觉有点胡来的味道...)

4.没仔细搜,因此没有找别人的su 的源码,没办法,只能看sdk中su的源码,位置如下:

system/extras/su/su.c  改文件夹下还有个Android.mk 类似makefile 的控制编译的东西

su.c ,一共96 行,easy

5.su.c 的修改 :

就一个main函数,别的都没有,刚看,就看到不顺眼的

    myuid = getuid();
    if (myuid != AID_ROOT && myuid != AID_SHELL) {
        fprintf(stderr,"su: uid %d not allowed to su\n", myuid);
        return 1;
    }

这个if判断明显是限定只能 是 root shell 才能继续执行, 别的uid 都不行...果断把这个 if 判断注释掉。


重新编译android img ,烧写到盒子上,通过串口登陆,root用户登陆,安装adbwireless ,可以顺利安装,并且 可以启动



todo :

1.之前公司用mstar板子的时候,需要添加个一配置文件才能发现adb 设备 ,这里不知道是否是这个情况,待验证...

原创粉丝点击