使用的版本:Android 2.3
Linux中的所有进程都是由init进程创建并运行的,Android中也存在init进程,首先Android内核启动,然后在用户空间中启动init进程,再依次启动系统运行所需的其他进程。
init进程是守护进程,用来监视其他进程,当某个进程终结后,变成僵尸进程(Zombie process),僵尸进程会占据进程列表中的位置,这时init进程就负责回收僵尸进程,Android平台中,Init进程除了负责回收僵尸进程外,还提供几种额外的功能。
·init进程运行过程
start_kernet() => init_post() =>run_initprocess() =>运行init进程
·init进程四大功能
1.分析及运行init.rc文件
2.生成设备驱动节点
3.处理子进程终止
4.属性服务
1.分析及运行init.rc文件
init.rc文件在system/core/rootdir目录下。
init.rc启动脚本是Android启动时,用来设置系统环境的脚本文件。action list与service list相关的内容是由init进程根据init.rc文件生成的。下面是init.rc文件的大致结构。
on early-init
start ueventd
on init
sysclktz 0
loglevel 3
# setup the global environment
export PATH /sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin
export LD_LIBRARY_PATH /vendor/lib:/system/lib
export ANDROID_BOOTLOGO 1
export ANDROID_ROOT /system
export ANDROID_ASSETS /system/app
export ANDROID_DATA /data
export EXTERNAL_STORAGE /mnt/sdcard
export ASEC_MOUNTPOINT /mnt/asec
export LOOP_MOUNTPOINT /mnt/obb
......
on boot
# basic network init
ifup lo
hostname localhost
domainname localdomain
......
<pre name="code" class="plain">on property:ro.secure=0
start console
# adbd is controlled by the persist.service.adb.enable system property
service adbd /sbin/adbd
disabled
# adbd on at boot in emulator
on property:ro.kernel.qemu=1
start adbd
on property:persist.service.adb.enable=1
start adbd
on property:persist.service.adb.enable=0
stop adbd
......
service servicemanager /system/bin/servicemanager
user system
critical
onrestart restart zygote
onrestart restart media
service vold /system/bin/vold
socket vold stream 0660 root mount
ioprio be 2
service netd /system/bin/netd
socket netd stream 0660 root system
service debuggerd /system/bin/debuggerd
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 sdcard_rw
......
init.rc文件分为两部分,一部分是以"on"关键字开头的动作列表(Action list),一部分是以"service"关键字开头的服务列表(Service list)。
1.1 动作列表
动作列表有三个段落,on init ,on boot ,on property段落。on init段落主要设置环境变量,生成系统运行所需的文件或目录,修改相应的权限,并挂载与系统运行相关的目录。环境变量设置主要设置运行根文件系统命令的目录以及程序编译时需要的库目录,根文件的挂载主要是/system和/data两个目录,挂载完毕后Android的根文件系统就准备好了。on boot段落主要用于设置应用程序终止条件,应用程序驱动目录及文件权限等。on property段落中,记录属性值改变时执行的命令,在默认的init.rc初始化脚本中,还记录adbd服务启动、终止的条件。Android平台中的共享属性存储区域中的值,只能通过通知init进程,由init进程负责改变&#