android的initrc语法分析

此文来自于对http://source.android.com/porting/index.html中bring up段的简译。其中有一处与源码的
system/core/init/readme.txt(此文也是对init.rc 的解释)内容不同:
socket [ [ ] ]

 -----------------------------------------------

注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 的格式如下:
service [ ]*
 

 
  ...

 


Options

options 是service的修饰符,用来告诉init 怎样及何时启动service。

 

OptionDescription
disabledThis 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
userChange 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
oneshotDo not restart the service when it exits.
classSpecify 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.

TriggerDescription
bootThis 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

CommandDescription
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".
exportSet the environment variable equal to in the global environment (which will be inherited by all processes started after this command is executed).
ifupBring the network interface online.
importParse an init config file, extending the current configuration.
hostnameSet the host name.
class_startStart all services of the specified class if they are not already running.
class_stopStop all services of the specified class if they are currently running.
domainnameSet the domain name.
insmodInstall the module at .
mkdirMake 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 -
setpropSet system property to .
setrlimitSet the rlimit for a resource.
startStart a service running if it is not already running.
stopStop a service from running if it is currently running.
symlinkCreate 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:
PropertyDescription
init.actionEqual to the name of the action currently being executed or "" if none.
init.commandEqual 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值