【Android源码 栏目提醒】:网学会员为需要Android源码 的朋友们搜集整理了android启动过程配置文件的解析与语法 - 电子设计相关资料,希望对各位网友有所帮助!
android启动过程配置文件的解析与语法 . 分类
Android系统开发 2010-11-11 15:39 3007人阅读 评论0 收藏 举报 1
android启动文件系统后调用的第一个应用程序是/init此文件的很重要的内容是解析了init.rc和init.xxx.rc 两个配置文件然后执行解析出来的任务。
相关代码在
android源代码/system/core/init/init.c文件中如下 parse_config_file/init.rc / pull the kernel commandline and ramdisk properties file in / qemu_init import_kernel_cmdline0 get_hardware_name snprintftmp sizeoftmp /init.s.rc hardware parse_config_filetmp 2从上面代码可以看到第一个配置文件名称固定为init.rc而第二个配置文件格式为init.xxx.rc其中xxx部分的内容 是从内核读取的具体是读取文件/proc/cpuinfo中的Hardware部分然后截取其部分内容。
Hardware部分是定义在内核的 主板定义文件中我的平台是定义在内核arch/arm/mach-mmp/merlin.c中我的平台定义如下 MACHINE_STARTARDENT_MERLIN PXA168-based Merlin Platform .phys_io APB_PHYS_BASE .boot_params 0x00000100 .io_pg_offst APB_VIRT_BASE 18 0xfffc .map_io pxa_map_io .init_irq pxa168_init_irq .timer pxa168_timer .init_machine merlin_init MACHINE_END 这样截取到的hardware部分的内容就为pxa168-based也就是说我的平台的第二个配置文件应该命名为init.pxa168-based.rc 3从上面看init.xxx.rc中的xxx内容是取决是内核中主板的定义的如果觉得麻烦可以将其在代码中写死例如 parse_config_file“init.merlin.rc” 4配置文件的语法如下 a配置文件的内容包含有4种 动作Action 命令Commands 服务Services 选项Options b动作和命令一起使用形式如下 on 其中trigger是触发条件也就是说在满足触发条件的情况下执行1个或多个相应的命令举例如下 on property:persist.service.adb.enable1 start adbd c服务和选项一起使用形式如下 service ... 上面内容解释为 service 服务名称 服务对应的命令的路径 命令的参数 选项 选项 ... 举例如下 service ril-daemon /system/bin/rild socket rild stream 660 root radio socket rild-debug stream 660 radio system user root group radio cache inet misc audio 上面的服务对应到/system/bin/rild命令没有参数服务名称为ril-daemon后面的内容都是服务的选项。
d选项是影响服务启动和运行的参数主要的选项如下 disabled 禁用服务此服务开机时不会自动启动但是可以在应用程序中手动启动它。
socket 套接字 类型 名称 权限 用户 组 创建一个名为/dev/socket/然后把它的fd传给启动程序 类型type的值为dgram或者stream perm表示该套接字的访问权限user和group表示改套接字所属的用户和组这两个参数默认都是0因此可以不设置。
user 执行服务前切换到用户此选项默认是root因此可以不设置。
group 执行服务前切换到组此选项默认是root因此可以不设置 capability 执行服务前设置linux capability没什么用。
oneshot 服务只启动一次一旦关闭就不能再启动。
class 为服务指定一个类别默认为default同一类别的服务必须一起启动和停止 e动作触发条件 boot 首个触发条件初始化开始载入配置文件的时候触发 当名为的属性property的值为的时候触发 device-added- 路径为的设置添加的时候触发 device-removed- 路径为的设置移除的时候触发 service-exited- 名为的服务关闭的时候触发 f命令Command的形式 exec 复制fork和执行路径为的应用程序为该应用程序的参数在该应用程序执行完前此命令会屏蔽 export 声明名为的环境变量的值为声明的环境变量是系统环境变量启动后一直有效。
ifup 启动名为的网络接口 import 加入新的位置文件扩展当前的配置。
hostname 设置主机名 class_start 启动指定类别的所有服务 class_stop 停止指定类别的所有服务 domainname 设置域名 insmod 加载路径为的内核模块 mkdir 创建路径为目录 mount 挂载类型为的设备到目录为挂载参数距离如下 mount ubifs ubi1_0 /data nosuid nodev setkey 暂时未定义 setprop 设置名为的系统属性的值为 setrlimit 设置资源限制举例 set RLIMIT_NICE to allow priorities from 19 to -20 setrlimit 13 40 40 没看懂是什么意思。
start 启动服务如果服务未运行 stop 停止服务如果服务正在运行 symlink 创建一个从指向的符号链接举例 symlink /system/etc /etc write 打开路径为的文件并将一个多这多个字符串写入到该文件中。
g系统属性Property
android初始化过程中会修改一些属性通过getprop命令我们可以看到属性值这些属性指示了某些动作或者服务的状态主要如下 init.action 如果当前某个动作正在执行则init.action属性的值等于该动作的名称否则为 init.command 如果当前某个命令正在执行则init.command属性的值等于该命令的名称否则为 init.svc. 此属性指示个名为的服务的状态stopped running 或者 restarting.