在init.rc文件里加载的服务

本文介绍了Android系统中的关键服务,如sh服务、adbd服务、servicemanager等,详细阐述了它们的功能、作用及实现原理。
1、sh服务
2、adbd 服务
3、servicemanager
4、vold
5、nexus
6、zygote
7、mediaserver
8、bootanimation
9、dbus
10、installd
11、keystore

1、sh服务
service console /system/bin/sh
console
sh服务是控制台服务,其实它是从NetBSD移植过来的,因此它的命令也是比较有限的,不过作为嵌入式系统,使用shell的机会不多。
sh服务的代码在目录:Android-2.0/system/core/sh
sh服务使用flex工具生成词法分析代码,使用bison生成语法分析代码。

2、adbd 服务
# adbd is controlled by the persist.service.adb.enable system property
service adbd /sbin/adbd
disabled
adbd服务的代码在目录:Android-2.0/system/core/adb
adbd 服务使用c语言实现,它不但可以在虚拟机里运行,也可以在实际的设备里运行。adbd服务是adb调试系统中的一部分,整个adb调试系统包括有三部分:手机运行的adbd服务、PC运行的服务器、PC运行的客户端。当android启动时,就运行adbd服务,创建一个调试端口,这样就可以让开发机器上的服务器连接过来,通过这个连接就可以发送调试信息给服务器,也可以接收到外面发送过来的调试命令。

3、servicemanager
service servicemanager /system/bin/servicemanager
user system
critical
onrestart restart zygote
onrestart restart media
servicemanager服务的代码在目录:
Android-2.0/frameworks/base/cmds/servicemanager
servicemanager 服务的作用主要是服务管理,所谓的服务管理其实就是获取服务、检查服务、添加服务、枚举所有服务。服务管理器是一个容器管理器,方便服务添加、调用和删除。在应用层的程序,都向这个服务管理器获取需要使用的服务,而所有提供服务的程序,都向这个服务器管理器注册自己的服务。服务管理器是应用程序与服务沟通的桥梁。

4、vold
service vold /system/bin/vold
socket vold stream 0660 root mount
vold服务的代码在目录:
Android-2.0/system/core/vold
vold服务的作用主要是负责完成系统的动态卷管理,比如CDROM、U盘、MMC卡等外存储的管理。当有这外存储设备插入时,就需要监视这种变化,并加载相应的驱动程序,然后报告给系统和应用程序有新存储设备可以使用。
Vold处理过程大致分为三步:
1.创建链接:
在vold作为一个守护进程,一方面接受驱动的信息,并把信息传给应用层;另一方面接受上层的命令并完成相应。所以这里的链接一共有两条:
(1)vold socket: 负责vold与应用层的信息传递;
(2)访问udev的socket: 负责vold与底层的信息传递;
这两个链接都是在进程的一开始完成创建的。
2.引导:
这里主要是在vold启动时,对现有外设存储设备的处理。首先,要加载并解析vold.conf,
并检查挂载点是否已经被挂载; 其次,执行MMC卡挂载; 最后,处理USB大容量存储。
3.事件处理:
这里通过对两个链接的监听,完成对动态事件的处理,以及对上层应用操作的响应。

5、nexus
service nexus /system/bin/nexus
socket nexus stream 0660 root system
disabled
nexus服务的代码在目录:
Android-2.0/system/core/nexus
nexus服务主要作用就是监听网络命令,提供网络管理的功能。

6、zygote
service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
socket zygote stream 666
onrestart write /sys/android_power/request_state wake
onrestart write /sys/power/state on
onrestart restart media
zygote服务的代码在目录:
Android-2.0/frameworks/base/cmds/app_process
zygote服务主要作用就是创建一个服务监听用户的命令,并且根据用户的命令创建应用程序运行。

7、mediaserver
service media /system/bin/mediaserver
user media
group system audio camera graphics inet net_bt net_bt_admin
mediaserver服务的代码在目录:
Android-2.0/frameworks/base/media/mediaserver
mediaserver服务是多媒体服务的守护进程,负责多媒体/照相机/音频等三项服务。

8、bootanimation
service bootanim /system/bin/bootanimation
user graphics
group graphics
disabled
oneshot
bootanimation 服务的代码在目录:
Android-2.0/frameworks/base/cmds/bootanimation
bootanimation 服务是开机动画,主要用来加载动画资源。

9、dbus
service dbus /system/bin/dbus-daemon --system --nofork
socket dbus stream 660 bluetooth bluetooth
user bluetooth
group bluetooth net_bt_admin
dbus服务的代码在目录:
Android-2.0/external/dbus/bus
dbus服务是android使用的一种特殊的进程间通讯系统。它具有面向对象接口的协议,以及应用程序之间互相发现和监视的守护进程。dbus设计用来作为用户与系统服务之间的分隔以及系统服务之间的通讯。因此,dbus通讯安全,但效率有点差。

10、installd
service installd /system/bin/installd
socket installd stream 600 system system
installd 服务的代码在目录:
Android-2.0/frameworks/base/cmds/installd
installd服务是提供安装dex文件的服务。

11、keystore
service keystore /system/bin/keystore /data/misc/keystore
user keystore
group keystore
socket keystore stream 666
keystore服务的代码在目录:
Android-2.0/frameworks/base/cmds/keystore
keystore服务是加解密储存键值的服务。它主要作用就是验证应用程序与签名文件是否一致。

(http://blog.youkuaiyun.com/yuleslie/article/details/6912168)
<think>好的,我现在需要帮助用户了解在Android 13中如何验证init.rc文件是否正确加载。首先,我需要回忆一下Android系统启动过程中init.rc的作用。init进程是Android启动的第一个用户空间进程,负责解析和执行init.rc文件中的指令,比如启动服务、设置环境变量等。 用户提到参考了站内的引用资料,其中引用[1]和[2]涉及init.rc的创建文件节点、执行脚本、BOOTCLASSPATH设置等。这些信息可能对验证方法有帮助。比如,BOOTCLASSPATH的设置是否正确可能影响系统类的加载,但用户的问题更偏向于验证init.rc是否正确加载,而不仅仅是参数设置。 接下来,我需要思考在Android 13中如何检查init.rc是否被正确加载。可能的步骤包括查看系统日志,使用adb命令,检查服务启动状态等。比如,通过adb logcat查看init的日志输出,是否有错误信息。或者检查特定服务是否启动,例如zygote,因为zygote的启动命令通常在init.rc中定义。 另外,引用[1]中提到init.rc可能会遇到权限问题,比如无法写入节点,这可能与文件权限或SELinux策略有关,但用户的问题是关于验证加载是否正确,可能需要先确认init.rc是否被正确解析,再检查权限问题。 可能的验证方法包括: 1. 查看系统启动日志,特别是init阶段的日志。 2. 使用adb shell命令进入设备,检查是否存在init.rc中定义的文件或目录。 3. 检查服务状态,比如使用`ps -A | grep service_name`查看服务是否运行。 4. 使用`getprop`检查属性是否被正确设置。 5. 检查/init.rc文件是否存在,或者被覆盖的情况,比如在Android源码中可能存在多个init.rc文件,需要确认最终使用的是哪个。 需要确认Android 13是否有新的工具或命令来辅助验证,比如新的日志标记或者调试选项。另外,可能需要考虑用户是否有编译系统的权限,或者只是作为应用开发者进行验证,这会影响可用的方法。 还需要注意,用户可能需要具体的步骤,例如如何使用adb获取日志,或者如何检查特定服务的状态。需要将这些步骤详细列出,确保用户能够逐步操作。 可能的误区是用户可能混淆了init.rc加载错误和脚本执行错误。加载错误可能包括语法错误或文件不存在,而执行错误可能是在执行命令时的权限问题或其他运行时错误。因此,验证方法需要覆盖这两个方面。 最后,根据引用资料中的信息,特别是引用[1]提到的权限问题,可能需要提醒用户在验证加载后,如果服务未正确启动,可能需要检查权限或SELinux策略,但这是后续的问题,当前问题只需验证init.rc是否正确加载。</think>在Android 13中验证`init.rc`文件是否正确加载,可通过以下步骤实现: --- ### 一、查看系统启动日志 1. **抓取init进程日志** 通过`adb logcat`筛选`init`相关日志,重点关注解析阶段: ```bash adb logcat | grep -iE "init|parsing" ``` 若`init.rc`存在语法错误,日志会显示`init: Parsing file /system/etc/init/hw/init.rc failed`或具体行号错误[^1]。 2. **查看事件日志** 使用特定标签过滤: ```bash adb logcat -b events | grep "boot_progress" ``` 若`init.rc`加载异常,系统启动阶段标记(如`boot_progress_start`)可能延迟或缺失。 --- ### 二、验证服务与动作执行 1. **检查服务状态** 查看`init.rc`中定义的服务是否启动(例如`zygote`): ```bash adb shell ps -A | grep zygote ``` 若服务未运行,可能是`init.rc`未加载或配置错误。 2. **验证环境变量** 检查`BOOTCLASSPATH`等关键变量是否被正确设置(`init.rc`中通过`export`定义): ```bash adb shell echo $BOOTCLASSPATH ``` 若输出为空或路径缺失,说明变量设置未生效[^2]。 --- ### 三、检查文件加载顺序 1. **确认文件覆盖关系** Android系统按以下顺序加载`init.rc`文件: ``` /system/etc/init/hw/init.rc /vendor/etc/init/*.rc /odm/etc/init/*.rc ``` 使用以下命令查看实际加载文件: ```bash adb shell ls -l /system/etc/init/hw/init.rc ``` 2. **调试模式验证** 在编译系统时,启用`init`调试模式(需修改源码): ```c // system/core/init/main.cpp setenv("INIT_DEBUG", "true", 1); ``` 重新编译后,日志会输出详细的文件加载过程。 --- ### 四、使用`dmesg`排查内核信息 通过`adb shell dmesg`查看内核日志,若`init`进程启动异常,可能出现以下信息: ``` init: Failed to load /system/etc/init/hw/init.rc: Permission denied ``` 此情况可能涉及SELinux策略或文件权限问题[^1]。 --- ### 五、临时修改测试 1. **添加调试命令** 在`init.rc`中插入测试命令(如创建文件): ```rc on early-init write /data/test_loaded 1 ``` 重启后检查文件是否存在: ```bash adb shell ls /data/test_loaded ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值