此文来自于对中bring up段的简译。其中有一处与源码的
system/core/init/readme.txt(此文也是对init.rc 的解释)内容不同:
-----------------------------------------------
注1:另外还讲述了怎样输出log:
Debugging notes
---------------
By default, programs executed by init will drop stdout and stderr into
/dev/null. To help with debugging, you can execute your program via the
Andoird program logwrapper. This will redirect stdout/stderr into the
Android logging system (accessed via logcat).
For example
service akmd /system/bin/logwrapper /sbin/akmd
注2:讲述了一个新的命令
sysclktz
Set the system clock base (0 if system clock ticks in GMT)
注3:triggers
boot This is the first trigger that will occur when init starts (after /init.conf is loaded)= Triggers of this form occur when the property is set to the specific value .device-added-device-removed- Triggers of these forms occur when a device node is added or removed.service-exited- Triggers of this form occur when the specified service exits. ------------------------------------------
init 由如下四种类型语句组成:
- Actionn :行为
- Commands
- Services
- Options
语法(language syntax)结构如下:
- 每一个语句占据一行,并且各个关键字被空格分开。c规范中的(如 \n)反斜杠将被忽略(backslash escapes)而被认为是一个空格 ,双引号用来保证空格不会把一个文字串分分为多个关键字。行最后的反斜杠用作续行。
- 由 # (前面允许有空格)开始的行都是注释行(comment)
- 一个actions 或 services 的开始隐含声明了一个新的段,所有commands 或 options 属于最近的声明。在第一个段之前的 commands 或 options 都会被忽略
- 每一个actions 和 services 都有不同的名字。后面与前面发生重名的,那么这个后面重名的将被忽略或被认为是一个错误
Actions
Actions其实就是一组被命名的命令序列。actions 都有一个触发条件,触发条件决定了action何时执行。当一个事件发生如果匹配action的触发条件,那么这个action将会被添加到预备执行队列的尾部(除非它已经在队列当中)
每一个action中的命令将被顺序执行。init进程负责在其它activities(如:设备创建/销毁,属性设置,进程重启)之间执行这些命令序列。
action 的格式如下
on
Services
services 是一些由init 启动 和 重新(如果有需要)启动的程序,当然这些程序如果是存在的。
services 的格式如下:
Options
options 是service的修饰符,用来告诉init 怎样及何时启动service。
Option | Description |
disabled | This service will not automatically start with its class. It must be explicitly started by name. |
socket [ [ ] ] | Create a unix domain socket named /dev/socket/ and pass its fd to the launched process. Valid dgram and stream. user and group default to 0.(type 实际中是放在name之后) values include |
user | Change to username before exec'ing this service. Currently defaults to root. |
group [ ]* |
Change to groupname before exec'ing this service. Additional
groupnames beyond the first, which is required, are used to set
additional groups of the process (with setgroups()). Currently defaults to root. |
capability [ ]+ | Set linux capability before exec'ing this service |
oneshot | Do not restart the service when it exits. |
class | Specify
a class name for the service. All services in a named class must
start and stop together. A service is considered of class "default" if
one is not specified via the class option. |
Triggers
Triggers are strings used to match certain kinds of events that cause an action to occur.
Trigger | Description |
boot | This is the first trigger that occurs when init starts (after /init.conf is loaded). |
= | Triggers of this form occur when the property is set to the specific value . |
device-added- device-removed- | Triggers of these forms occur when a device node is added or removed. |
service-exited- | Triggers of this form occur when the specified service exits. |
Commands
Command | Description |
exec [ ]* | Fork and execute a program (). This will block until the program completes execution. Try to avoid exec. Unlike the builtin commands, it runs the risk of getting init "stuck". |
export | Set the environment variable equal to in the global environment (which will be inherited by all processes started after this command is executed). |
ifup | Bring the network interface online. |
import | Parse an init config file, extending the current configuration. |
hostname | Set the host name. |
class_start | Start all services of the specified class if they are not already running. |
class_stop | Stop all services of the specified class if they are currently running. |
domainname | Set the domain name. |
insmod | Install the module at . |
mkdir | Make a directory at . |
mount [ ]* | Attempt to mount the named device at the directory . This may be of the form mtd@name to specify a mtd block device by name. |
setkey | - currenlty undefined - |
setprop | Set system property to . |
setrlimit | Set the rlimit for a resource. |
start | Start a service running if it is not already running. |
stop | Stop a service from running if it is currently running. |
symlink | Create a symbolic link at with the value . |
write [ ]* | Open the file at and write one or more strings to it with write(2). |
Properties
Init updates some system properties to provide some insight into
what it's doing:
Property |
Description |
init.action |
Equal to the name of the action currently being executed or "" if none. |
init.command |
Equal to the command being executed or "" if none. |
init.svc. |
State of a named service ("stopped", "running", or "restarting"). |
在init.rc中使用属性的范例如下:
setprop ro.FOREGROUND_APP_MEM 1536 setprop ro.VISIBLE_APP_MEM 2048 on property:ro.kernel.qemu=1 start adbd |
setprop用于设置属性,on property可以用于判断属性,这里的属性在整个Android系统运行中都是一致的。
init脚本中的关键字可以参考:system/core/init/keywords.h
exam init.rc
---------------------------
on init
sysclktz 0
loglevel 3
# setup the global environment
export PATH
/sbin:/system/sbin:/system/bin:/system/xbin:/system/busybox/bin:/system/busybox/sbin:/system/busybox/usr/bin:/system/busybox/usr/sbin
export LD_LIBRARY_PATH /system/lib
export ANDROID_BOOTLOGO 1
export ANDROID_ROOT /system
export ANDROID_ASSETS /system/app
export ANDROID_DATA /data
export EXTERNAL_STORAGE /sdcard
export BOOTCLASSPATH
/system/framework/core.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/android.policy.jar:/system/framework/services.jar
# Backward compatibility
symlink /system/etc /etc
symlink /sys/kernel/debug /d
# create mountpoints and mount tmpfs on sqlite_stmt_journals
mkdir /sdcard 0000 system system
mkdir /system
mkdir /data 0771 system system
mkdir /cache 0770 system cache
mkdir /config 0500 root root
mkdir /sqlite_stmt_journals 01777 root root
mount tmpfs tmpfs /sqlite_stmt_journals size=4m
#{{ added by FriendlyARM
mkdir /udisk 0000 system system
mkdir /var 0000 system system
mount tmpfs tmpfs /var size=2m
mkdir /var/lock
mkdir /var/run
mkdir /var/log
mount usbfs none /proc/bus/usb -o devmode=0666
chmod 0666 /dev/backlight-1wire
#}}
## mount rootfs rootfs / ro remount
write /proc/sys/kernel/panic_on_oops 1
write /proc/sys/kernel/hung_task_timeout_secs 0
write /proc/cpu/alignment 4
write /proc/sys/kernel/sched_latency_ns 10000000
write /proc/sys/kernel/sched_wakeup_granularity_ns 2000000
write /proc/sys/kernel/sched_compat_yield 1
write /proc/sys/kernel/sched_child_runs_first 0
# Create cgroup mount points for process groups
mkdir /dev/cpuctl
mount cgroup none /dev/cpuctl cpu
chown system system /dev/cpuctl
chown system system /dev/cpuctl/tasks
chmod 0777 /dev/cpuctl/tasks
write /dev/cpuctl/cpu.shares 1024
mkdir /dev/cpuctl/fg_boost
chown system system /dev/cpuctl/fg_boost/tasks
chmod 0777 /dev/cpuctl/fg_boost/tasks
write /dev/cpuctl/fg_boost/cpu.shares 1024
mkdir /dev/cpuctl/bg_non_interactive
chown system system /dev/cpuctl/bg_non_interactive/tasks
chmod 0777 /dev/cpuctl/bg_non_interactive/tasks
# 5.0 %
write /dev/cpuctl/bg_non_interactive/cpu.shares 52
# mount mtd partitions
# Mount /system rw first to give the filesystem a chance to save a checkpoint
## mount yaffs2 mtd@system /system
## mount yaffs2 mtd@system /system ro remount
# We chown/chmod /data again so because mount is run as root + defaults
## mount yaffs2 mtd@userdata /data nosuid nodev
chown system system /data
chmod 0771 /data
# Create dump dir and collect dumps.
# Do this before we mount cache so eventually we can use cache for
# storing dumps on platforms which do not have a dedicated dump partition.
mkdir /data/dontpanic
chown root log /data/dontpanic
chmod 0750 /data/dontpanic
# Collect apanic data, free resources and re-arm trigger
copy /proc/apanic_console /data/dontpanic/apanic_console
chown root log /data/dontpanic/apanic_console
chmod 0640 /data/dontpanic/apanic_console
copy /proc/apanic_threads /data/dontpanic/apanic_threads
chown root log /data/dontpanic/apanic_threads
chmod 0640 /data/dontpanic/apanic_threads
write /proc/apanic_console 1
# Collect ramconsole data
copy /proc/last_kmsg /data/dontpanic/last_kmsg
chown root log /data/dontpanic/last_kmsg
chmod 0640 /data/dontpanic/last_kmsg
# Same reason as /data above
## mount yaffs2 mtd@cache /cache nosuid nodev
chown system cache /cache
chmod 0770 /cache
# This may have been created by the recovery system with odd permissions
chown system system /cache/recovery
chmod 0770 /cache/recovery
#change permissions on vmallocinfo so we can grab it from bugreports
chown root log /proc/vmallocinfo
chmod 0440 /proc/vmallocinfo
# create basic filesystem structure
mkdir /data/misc 01777 system misc
mkdir /data/misc/bluetoothd 0777 bluetooth bluetooth
mkdir /data/misc/keystore 0700 keystore keystore
mkdir /data/misc/vpn 0770 system system
mkdir /data/misc/vpn/profiles 0770 system system
mkdir /data/misc/wifi 0777 wifi wifi
mkdir /data/misc/wifi/sockets 0777 system wifi
chmod 0777 /data/misc/wifi
chmod 0777 /data/misc/wifi/wpa_supplicant.conf
# give system access to wpa_supplicant.conf for backup and restore
chmod 0777 /system/etc/wifi/wpa_supplicant.conf
mkdir /data/misc/dhcp 0770 dhcp dhcp
chown dhcp dhcp /data/misc/dhcp
mkdir /data/local 0771 shell shell
mkdir /data/local/tmp 0771 shell shell
mkdir /data/data 0771 system system
mkdir /data/app-private 0771 system system
mkdir /data/app 0771 system system
mkdir /data/property 0700 root root
# create dalvik-cache and double-check the perms
mkdir /data/dalvik-cache 0771 system system
chown system system /data/dalvik-cache
chmod 0771 /data/dalvik-cache
# create the lost+found directories, so as to enforce our permissions
mkdir /data/lost+found 0770
mkdir /cache/lost+found 0770
# double check the perms, in case lost+found already exists, and set owner
chown root root /data/lost+found
chmod 0770 /data/lost+found
chown root root /cache/lost+found
chmod 0770 /cache/lost+found
#===================================================================
#
# debug fs enable for wifi & bluetooth
#
#===================================================================
mount debugfs none /sys/kernel/debug
on boot
# basic network init
ifup lo
ifup eth0
ifup eth1
hostname localhost
domainname localdomain
# set RLIMIT_NICE to allow priorities from 19 to -20
setrlimit 13 40 40
# Define the oom_adj values for the classes of processes that can be
# killed by the kernel. These are used in ActivityManagerService.
setprop ro.FOREGROUND_APP_ADJ 0
setprop ro.VISIBLE_APP_ADJ 1
setprop ro.SECONDARY_SERVER_ADJ 2
setprop ro.BACKUP_APP_ADJ 2
setprop ro.HOME_APP_ADJ 4
setprop ro.HIDDEN_APP_MIN_ADJ 7
setprop ro.CONTENT_PROVIDER_ADJ 14
setprop ro.EMPTY_APP_ADJ 15
# Define the memory thresholds at which the above process classes will
# be killed. These numbers are in pages (4k).
setprop ro.FOREGROUND_APP_MEM 1536
setprop ro.VISIBLE_APP_MEM 2048
setprop ro.SECONDARY_SERVER_MEM 4096
setprop ro.BACKUP_APP_MEM 4096
setprop ro.HOME_APP_MEM 4096
setprop ro.HIDDEN_APP_MEM 5120
setprop ro.CONTENT_PROVIDER_MEM 5632
setprop ro.EMPTY_APP_MEM 6144
#Wifi
# insmod /system/lib/libwifi/lib80211.ko
# insmod /system/lib/libwifi/lib80211_crypt_ccmp.ko
# insmod /system/lib/libwifi/lib80211_crypt_tkip.ko
# insmod /system/lib/libwifi/lib80211_crypt_wep.ko
# insmod /system/lib/modules/2.6.27/kernel/net/bluetooth/bluetooth.ko
# insmod /system/lib/modules/2.6.27/kernel/drivers/bluetooth/hci_uart.ko
# insmod /system/lib/modules/2.6.27/kernel/net/bluetooth/l2cap.ko
# insmod /system/lib/modules/2.6.27/kernel/net/bluetooth/rfcomm/rfcomm.ko
setprop wifi.interface eth1
setprop wlan.interface eth1
setprop wlan.driver.status ok
setprop wlan.modpath /system/lib/libwifi/
setprop wlan.mod1 libertas.ko
setprop wlan.mod2 libertas_sdio.ko
# Write value must be consistent with the above properties.
# Note that the driver only supports 6 slots, so we have HOME_APP at the
# same memory level as services.
write /sys/module/lowmemorykiller/parameters/adj 0,1,2,7,14,15
write /proc/sys/vm/overcommit_memory 1
write /proc/sys/vm/min_free_order_shift 4
write /sys/module/lowmemorykiller/parameters/minfree 1536,2048,4096,5120,5632,6144
# Set init its forked children's oom_adj.
write /proc/1/oom_adj -16
# Tweak background writeout
write /proc/sys/vm/dirty_expire_centisecs 200
write /proc/sys/vm/dirty_background_ratio 5
# Permissions for System Server and daemons.
chown radio system /sys/android_power/state
chown radio system /sys/android_power/request_state
chown radio system /sys/android_power/acquire_full_wake_lock
chown radio system /sys/android_power/acquire_partial_wake_lock
chown radio system /sys/android_power/release_wake_lock
chown radio system /sys/power/state
chown radio system /sys/power/wake_lock
chown radio system /sys/power/wake_unlock
chmod 0660 /sys/power/state
chmod 0660 /sys/power/wake_lock
chmod 0660 /sys/power/wake_unlock
chown system system /sys/class/timed_output/vibrator/enable
chown system system /sys/class/leds/keyboard-backlight/brightness
# chown system system /sys/class/leds/lcd-backlight/brightness
chown system system /sys/class/backlight/pwm-backlight/brightness
chown system system /sys/class/leds/button-backlight/brightness
chown system system /sys/class/leds/jogball-backlight/brightness
chown system system /sys/class/leds/red/brightness
chown system system /sys/class/leds/green/brightness
chown system system /sys/class/leds/blue/brightness
chown system system /sys/class/leds/red/device/grpfreq
chown system system /sys/class/leds/red/device/grppwm
chown system system /sys/class/leds/red/device/blink
chown system system /sys/class/leds/red/brightness
chown system system /sys/class/leds/green/brightness
chown system system /sys/class/leds/blue/brightness
chown system system /sys/class/leds/red/device/grpfreq
chown system system /sys/class/leds/red/device/grppwm
chown system system /sys/class/leds/red/device/blink
chown system system /sys/class/timed_output/vibrator/enable
chown system system /sys/module/sco/parameters/disable_esco
chown system system /sys/kernel/ipv4/tcp_wmem_min
chown system system /sys/kernel/ipv4/tcp_wmem_def
chown system system /sys/kernel/ipv4/tcp_wmem_max
chown system system /sys/kernel/ipv4/tcp_rmem_min
chown system system /sys/kernel/ipv4/tcp_rmem_def
chown system system /sys/kernel/ipv4/tcp_rmem_max
chown root radio /proc/cmdline
#bluetooth power up/down interface
# chown bluetooth bluetooth /sys/class/rfkill/rfkill0/type
# chown bluetooth bluetooth /sys/class/rfkill/rfkill0/state
# chmod 0660 /sys/class/rfkill/rfkill0/state
# chown bluetooth bluetooth /dev/s3c2410_serial1
chmod 0666 /dev/s3c2410_serial1
chmod 0666 /dev/s3c2410_serial2
chmod 0666 /dev/s3c2410_serial3
chmod 0666 /dev/video0
chmod 0666 /dev/s3c-jpg
# Define TCP buffer sizes for various networks
# ReadMin, ReadInitial, ReadMax, WriteMin, WriteInitial, WriteMax,
setprop net.tcp.buffersize.default 4096,87380,110208,4096,16384,110208
setprop net.tcp.buffersize.wifi 4095,87380,110208,4096,16384,110208
setprop net.tcp.buffersize.umts 4094,87380,110208,4096,16384,110208
setprop net.tcp.buffersize.edge 4093,26280,35040,4096,16384,35040
setprop net.tcp.buffersize.gprs 4092,8760,11680,4096,8760,11680
setprop net.dns1 8.8.8.8
setprop net.dns2 8.8.4.4
class_start default
setprop alsa.mixer.playback.master Front
setprop alsa.mixer.capture.master Capture
setprop alsa.mixer.playback.earpiece Master
setprop alsa.mixer.capture.earpiece Capture
setprop alsa.mixer.playback.headset Master
setprop alsa.mixer.playback.speaker Master
## Daemon processes to be run by init.
##
service console /system/bin/sh
#service console /system/busybox/bin/ash
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
service tsd /sbin/tsd
service nexus /system/bin/nexus
socket nexus stream 0660 root system
disabled
#service mountd /system/bin/mountd
# socket mountd stream 0660 root mount
service debuggerd /system/bin/debuggerd
service udiskd /system/bin/udiskd
socket udiskd stream 666 root mount
service fanetworkservice /system/bin/fa-network-service
socket fa-network-service stream 666 radio radio
user root
group radio cache inet misc audio
#user radio
#group radio cache inet misc audio
service ril-daemon /system/bin/rild -l /system/lib/libreference-ril.so -- -d /dev/pts/0
socket rild stream 660 root radio
socket rild-debug stream 660 radio system
user root
group radio cache inet misc audio
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
service media /system/bin/mediaserver
user media
group system audio camera graphics inet net_bt net_bt_admin
##service bootsound /system/bin/playmp3
## user media
## group audio
## oneshot
service bootanim /system/bin/bootanimation
user graphics
group graphics
disabled
oneshot
service dbus /system/bin/dbus-daemon --system --nofork
socket dbus stream 660 bluetooth bluetooth
user bluetooth
group bluetooth net_bt_admin
service
wpa_supplicant /system/bin/logwrapper /system/bin/wpa_supplicant -Dwext
-ieth1 -c /system/etc/wifi/wpa_supplicant.conf -dd
group system wifi inet keystore
disabled
oneshot
service dhcpcd /system/bin/logwrapper /system/bin/dhcpcd -d eth1
disabled
oneshot
group system dhcp
on property:init.svc.wpa_supplicant=stopped
stop dhcpcd
service bluetoothd /system/bin/logwrapper /system/bin/bluetoothd -d -n
socket bluetooth stream 660 bluetooth bluetooth
socket dbus_bluetooth stream 660 bluetooth bluetooth
# init.rc does not yet support applying capabilities, so run as root and
# let bluetoothd drop uid to bluetooth with the right linux capabilities
group bluetooth net_bt_admin misc
disabled
# baudrate change 115200 to 1152000(Bluetooth)
service changebaudrate /system/bin/logwrapper /system/xbin/bccmd_115200 -t bcsp -d /dev/s3c2410_serial1 psset -r 0x1be 0x126e
user bluetooth
group bluetooth net_bt_admin
disabled
oneshot
#service hciattach /system/bin/logwrapper /system/bin/hciattach -n -s 1152000 /dev/s3c2410_serial1 bcsp 1152000
service hciattach /system/bin/logwrapper /system/bin/hciattach -n -s 115200 /dev/s3c2410_serial1 bcsp 115200
user bluetooth
group bluetooth net_bt_admin misc
disabled
service hfag /system/bin/sdptool add --channel=10 HFAG
user bluetooth
group bluetooth net_bt_admin
disabled
oneshot
service hsag /system/bin/sdptool add --channel=11 HSAG
user bluetooth
group bluetooth net_bt_admin
disabled
oneshot
service opush /system/bin/sdptool add --channel=12 OPUSH
user bluetooth
group bluetooth net_bt_admin
disabled
oneshot
service pbap /system/bin/sdptool add --channel=19 PBAP
user bluetooth
group bluetooth net_bt_admin
disabled
oneshot
service installd /system/bin/installd
socket installd stream 600 system system
##service flash_recovery /system/etc/install-recovery.sh
## oneshot
service racoon /system/bin/racoon
socket racoon stream 600 system system
# racoon will setuid to vpn after getting necessary resources.
group net_admin
disabled
oneshot
service mtpd /system/bin/mtpd
socket mtpd stream 600 system system
user vpn
group vpn net_admin net_raw
disabled
oneshot
service keystore /system/bin/keystore /data/misc/keystore
user keystore
group keystore
socket keystore stream 666
service dumpstate /system/bin/dumpstate -s
socket dumpstate stream 0660 shell log
disabled
oneshot
阅读(5413) | 评论(0) | 转发(0) |