service之class core和class main

摘要:
在解答这个问题前我们先区分一下classcore,classmain,classlate_start。这三个“class”,只是标识这个服务的类型是哪一个,然后通过调用class_start,class_reset,class_stop等命令的时候,来统一操作同一类的服务。此时是不能打电话的,因为ril-deamon没有启动classmain的服务如下:序号service名称所属文件命令bin文件位置1p2p_supplicantinit.manata.rc/system/bin/wpa_supplicant2wpa_supplicantinit.manata.rc/system/bin/wpa_supplicant3dhcpcd_wlan0init.manata.rc/system/bin/dhcpcd4dhcpcd_p2pinit.manata.rc/system/bin/dhcpcd5dhcpcd_eth0init.manata.rc/system/bin/dhcpcd6dhcpcd_bt-paninit.manata.rc/system/bin/dhcpcd7dhcpcd_bt-paninit.manata.rc/system/bin/dhcpcd8iprenew_p2pinit.manata.rc/system/bin/dhcpcd9iprenew_eth0init.manata.rc/system/bin/dhcpcd10iprenew_bt-paninit.manata.rc/system/bin/dhcpcd11gpsdinit.manata.rc/system/vendor/bin/gpsd12mobicoreinit.manata.rc/system/bin/mcDriverDaemon13bugreportinit.manata.rc/system/bin/dumpstate14netdinit.rc/system/bin/netd15debuggerdinit.rc/system/bin/debuggerd16debuggerd64init.rc/system/bin/debuggerd6417ril-daemoninit.rc/system/bin/rild18surfaceflingerinit.rc/system/bin/surfaceflinger19drminit.rc/system/bin/drmserver20mediainit.rc/system/bin/mediaserver21bootaniminit.rc/system/bin/bootanimation22installdinit.rc/system/bin/installd23flash_recoveryinit.rc/system/etc/install-recovery.sh24racooninit.rc/system/bin/racoon25mtpdinit.rc/system/bin/mtpd26keystoreinit.rc/system/bin/keystore27dumpstateinit.rc/system/bin/dumpstate28sshdinit.rc/system/bin/start-ssh29mdnsdinit.rc/system/bin/mdnsd30zygoteinit.zygote32_64.rc/system/bin/app_process31zygoteinit.zygote32.rc/system/bin/app_process32zygoteinit.zygote64.rc/system/bin/app_process64可以看到main的服务相对多一些,看到zygote了吧,由此可见main服务大部分是建立在java层或者与java层息息相关的系统服务。
class core 和class main有何不同

在分析Kitkat加密功能的时候,在一些资料上看到一句话“对于加密后的系统,重启后,进入到输入密码界面,此时并没有完全加载Android系统,仅仅加载必要的服务”

那么这个必要的服务又是指的是那些服务呢?

在解答这个问题前我们先区分一下class core ,class main, class late_start。

这三个“class”,只是标识这个服务的类型是哪一个,然后通过调用class_start, class_reset, class_stop等命令的时候,来统一操作同一类的服务。

举个例子,从system/core/rootdir/init.rc文件中搜索“class main”可以搜到许多,例如有netd, ril-deamon服务被标识为class main,那么当我们调用class_start main命令时,所有标识为main的服务都会被启动,这里的netd ril-deamon就会被启动。对于core, late_start类的服务也是这样的。

这里以源代码中三星的manta为例进行演示:

class core 的服务如下:

序号service名称所属文件命令bin文件位置
1watchdogdinit.manta.rc/sbin/watchdogd
2watchdogdinit.recovery.manta.rc/sbin/watchdogd
3setup_fsinit.smdk5250.rc/system/bin/setup_fs
4ueventdinit.rc/sbin/ueventd
5logdinit.rc/system/bin/logd
6healthdinit.rc/sbin/healthd
7consoleinit.rc/system/bin/sh
8adbdinit.rc/sbin/adbd
9servicemanagerinit.rc/system/bin/servicemanager
10voldinit.rc/system/bin/vold

可以看到,core服务都是系统最基本的服务,只要core服务全部启动,手机此时是可以运行的,但是却看不到东西,原因是framework没有启动。此时启动的都是C,C++的进程。此时是不能打电话的,因为ril-deamon没有启动

class main的服务如下:

序号service名称所属文件命令bin文件位置
1p2p_supplicantinit.manata.rc/system/bin/wpa_supplicant
2wpa_supplicantinit.manata.rc/system/bin/wpa_supplicant
3dhcpcd_wlan0init.manata.rc/system/bin/dhcpcd
4dhcpcd_p2pinit.manata.rc/system/bin/dhcpcd
5dhcpcd_eth0init.manata.rc/system/bin/dhcpcd
6dhcpcd_bt-paninit.manata.rc/system/bin/dhcpcd
7dhcpcd_bt-paninit.manata.rc/system/bin/dhcpcd
8iprenew_p2pinit.manata.rc/system/bin/dhcpcd
9iprenew_eth0init.manata.rc/system/bin/dhcpcd
10iprenew_bt-paninit.manata.rc/system/bin/dhcpcd
11gpsdinit.manata.rc/system/vendor/bin/gpsd
12mobicoreinit.manata.rc/system/bin/mcDriverDaemon
13bugreportinit.manata.rc/system/bin/dumpstate
14netdinit.rc/system/bin/netd
15debuggerdinit.rc/system/bin/debuggerd
16debuggerd64init.rc/system/bin/debuggerd64
17ril-daemoninit.rc/system/bin/rild
18surfaceflingerinit.rc/system/bin/surfaceflinger
19drminit.rc/system/bin/drmserver
20mediainit.rc/system/bin/mediaserver
21bootaniminit.rc/system/bin/bootanimation
22installdinit.rc/system/bin/installd
23flash_recoveryinit.rc/system/etc/install-recovery.sh
24racooninit.rc/system/bin/racoon
25mtpdinit.rc/system/bin/mtpd
26keystoreinit.rc/system/bin/keystore
27dumpstateinit.rc/system/bin/dumpstate
28sshdinit.rc/system/bin/start-ssh
29mdnsdinit.rc/system/bin/mdnsd
30zygoteinit.zygote32_64.rc/system/bin/app_process
31zygoteinit.zygote32.rc/system/bin/app_process
32zygoteinit.zygote64.rc/system/bin/app_process64

可以看到main的服务相对多一些,看到zygote了吧,由此可见main服务大部分是建立在java层或者与java层息息相关的系统服务。

class late_start 的服务如下:

序号service名称所属文件命令bin文件位置
1sdcardinit.manta.rc/system/bin/sdcard
2sdcardinit.msmdk5250.rc/system/bin/sdcard

在看Android手机加密的资料的时候,看到late_start服务,以为有很多呢.,但是一搜索才知道,坑爹啊,只有一个。

由以上的简单分析,再来分析Kitkat手机加密功能的流程,和加密后的启动过程,就更加清晰了。

其实手机加密完毕后,重启手机,进入输入密码界面,此时系统的core,main服务都已经启动,只有late_start服务没有启动,可以直接无视late_start。这样说来,此时手机的系统服务和正常状态下是一样的。我们想利用系统服务做什么都行啊。^_^

原文链接:https://blog.csdn.net/longyc2010/article/details/39616979

免责声明:文章转载自《service之class core和class main》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇flask-restfulSVN更新、清理乱码解决下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

linux编程中的段错误

linux上用C/C++写程序时,很容易碰到段错误的提示,此时程序被自动终止。这个问题是由于非法访问内存引起的,一般的原因都是因为程序中的指针解引用出现了错误。出现段错误是,linux一般会生成一个core dump文件,如果没有生成,可能是因为分配给core dump文件的控件为0,可以用ulimit -c命令查看,如果为0,core dump文件不会生...

Android日志监听工具logcat命令详解(转)

Android日志系统提供了记录和查看系统调试信息的功能。日志都是从各种软件和一些系统的缓冲区中记录下来的,缓冲区可以通过logcat命令来查看和使用. 在使用logcat之前,请确保手机的USB调试模式已经开启,可以通过"Setting->Application->Development->USB debugging"来开启。 logc...

MongoDB/备份

mongodump: 在MongoDB中我们使用mongodump命令来备份MongoDB数据。该命令可以导出所有数据到指定目录中。./bin/mongodump -h dbhost -d dbname -o yourdirectory./bin/mongodump --host mongodb.example.net --port 27017 --d...

运行Capture.exe找不到cdn_sfl401as.dll

     今天运行capture Orcad16.6显示缺少cdn_sfl401as.dll,昨天运行时并没有发现这种情况,回想今天安装了modelsim之后才发生这种情况,于是将modelsim卸载掉,再次启动,依然出现警告提示。     因为警告的是找不到动态链接库dll,先猜想是否是dll文件被杀软误删,结果没有被删除,那么一定是系统的环境变量出了问...

c# 利用百度图像处理【人像分割】一键抠图

百度AI开放平台-人像分割: http://ai.baidu.com/tech/body/seg 注意本文后面的话,百度这个技术效果太差劲了,国外这 https://www.remove.bg/ 个比百度强大很多。 using System; using System.Collections.Generic; using System.Linq; usin...

.Net Core Linux centos7行—.net core json 配置文件

.net core 对配置系统做出了大幅度更新,不在局限于之前的*.xml配置方式。现在支持json,xml,ini,in memory,环境变量等等。毫无疑问的是,现在的json配置文件是.net core世界中的一等公民。 每个类型的配置文件都有一个schema说明。有schema的好处是能有智能提示。 可以在任何配置项的Key上面按F12导航到该配...