android init.rc 语法分析

来源:互联网 发布:青岛四方股份待遇 知乎 编辑:程序博客网 时间:2024/05/17 22:14

 此文来自于对http://source.android.com/porting/index.html中bringup段的简译。其中有一处与源码的

system/core/init/readme.txt(此文也是对init.rc 的解释)内容不同:
socket [ [ ] ]

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

注1:另外还讲述了怎样输出log:

 

Debugging notes
---------------
By default, programs executed by init willdrop stdout and stderr into
/dev/null. To help with debugging, you canexecute your program via the
Andoird program logwrapper. This willredirect stdout/stderr into the
Android logging system (accessed vialogcat).
For example
service akmd /system/bin/logwrapper/sbin/akmd
 注2:讲述了一个新的命令

 

 

sysclktz
   Setthe system clock base (0 if system clock ticks in GMT)
 

 

注3:triggers

 

boot
   Thisis the first trigger that will occur when init starts
  (after /init.conf is loaded)
=
  Triggers of this form occur when the property is set
   tothe specific value .
device-added-
device-removed-
  Triggers of these forms occur when a device node isadded
   orremoved.
service-exited-
  Triggers of this form occur when the specified serviceexits.

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

 

 

init 由如下四种类型语句组成:

  • Actionn      :行为
  • Commands 
  • Services
  • Options
语法(language syntax)结构如下:

 

  • 每一个语句占据一行,并且各个关键字被空格分开。c规范中的(如 \n)反斜杠将被忽略(backslashescapes)而被认为是一个空格,双引号用来保证空格不会把一个文字串分分为多个关键字。行最后的反斜杠用作续行。
  • 由 # (前面允许有空格)开始的行都是注释行(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。

 

OptionDescriptiondisabledThis service will not automatically start with its class. Itmust be explicitly started by name.socket [ [ ] ]

Create a unix domain socket named /dev/socket/ andpass its fd to the launched process. Valid dgram andstream. user and groupdefault to 0.(type 实际中是放在name之后)

values includeuserChange to username before exec'ing this service. Currentlydefaults to root.group [ ]*Change to groupname before exec'ing this service. Additional  groupnames beyondthe first, which is required, are used to set additional groups ofthe process (with setgroups()). Currently defaults toroot.capability [ ]+Set linux capability before exec'ing this serviceoneshotDo not restart the service when it exits.classSpecify a class name for the service.  Allservices in a named class must start and stop together. A serviceis considered of class "default" if one is not specified via theclass option.

 

 

 Triggers

Triggers are strings used to match certain kinds of events thatcause an action to occur.

TriggerDescriptionbootThis 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 thespecific value .device-added-
device-removed-
Triggers of these forms occur when a device node is added orremoved.service-exited-Triggers of this form occur when the specified serviceexits.


Commands

CommandDescriptionexec [ ]*Fork and execute a program (). This will block until theprogram completes execution. Try to avoid exec. Unlike thebuiltin 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 thiscommand is executed).ifupBring the network interface online.importParse an init config file, extending the currentconfiguration.hostnameSet the host name.class_startStart all services of the specified class if they are notalready running.class_stopStop all services of the specified class if they are currentlyrunning.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 tospecify a mtd block device by name.
setkey- currenlty undefined -setprop Set system property to .setrlimit Set 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.symlink Create a symbolic link at with the value .write [ ]*Open the file at and write one or more strings to it withwrite(2).

Properties

Init updates some system properties to provide some insightinto
what it's doing:PropertyDescriptioninit.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用于设置属性,onproperty可以用于判断属性,这里的属性在整个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
    exportLD_LIBRARY_PATH /system/lib
    exportANDROID_BOOTLOGO 1
    exportANDROID_ROOT /system
    exportANDROID_ASSETS /system/app
    exportANDROID_DATA /data
    exportEXTERNAL_STORAGE /sdcard
    exportBOOTCLASSPATH/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 /data0771 system system
    mkdir /cache0770 system cache
    mkdir/config 0500 root root
    mkdir/sqlite_stmt_journals 01777 root root
    mount tmpfstmpfs /sqlite_stmt_journals size=4m

#{{ added by FriendlyARM
    mkdir/udisk  0000 system system
    mkdir /var0000 system system
    mount tmpfstmpfs  /var size=2m
    mkdir/var/lock
    mkdir/var/run
    mkdir/var/log
    mount usbfsnone /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 cgroupnone /dev/cpuctl cpu
    chown systemsystem /dev/cpuctl
    chown systemsystem /dev/cpuctl/tasks
    chmod 0777/dev/cpuctl/tasks
    write/dev/cpuctl/cpu.shares 1024

    mkdir/dev/cpuctl/fg_boost
    chown systemsystem /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 systemsystem /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 acheckpoint
##    mountyaffs2 mtd@system /system
##    mountyaffs2 mtd@system /system ro remount

    # Wechown/chmod /data again so because mount is run as root +defaults
##    mountyaffs2 mtd@userdata /data nosuid nodev
    chown systemsystem /data
    chmod 0771/data

    # Createdump dir and collect dumps.
    # Do thisbefore we mount cache so eventually we can use cache for
    # storingdumps on platforms which do not have a dedicated dumppartition.
   
    mkdir/data/dontpanic
    chown rootlog /data/dontpanic
    chmod 0750/data/dontpanic

    # Collectapanic data, free resources and re-arm trigger
    copy/proc/apanic_console /data/dontpanic/apanic_console
    chown rootlog /data/dontpanic/apanic_console
    chmod 0640/data/dontpanic/apanic_console

    copy/proc/apanic_threads /data/dontpanic/apanic_threads
    chown rootlog /data/dontpanic/apanic_threads
    chmod 0640/data/dontpanic/apanic_threads

    write/proc/apanic_console 1

    # Collectramconsole data
    copy/proc/last_kmsg /data/dontpanic/last_kmsg
    chown rootlog /data/dontpanic/last_kmsg
    chmod 0640/data/dontpanic/last_kmsg

    # Samereason as /data above
##    mountyaffs2 mtd@cache /cache nosuid nodev
    chown systemcache /cache
    chmod 0770/cache

    # This mayhave been created by the recovery system with odd permissions
    chown systemsystem /cache/recovery
    chmod 0770/cache/recovery

    #changepermissions on vmallocinfo so we can grab it from bugreports
    chown rootlog /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
    # givesystem 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 dhcpdhcp /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

    # createdalvik-cache and double-check the perms
    mkdir/data/dalvik-cache 0771 system system
    chown systemsystem /data/dalvik-cache
    chmod 0771/data/dalvik-cache

    # create thelost+found directories, so as to enforce our permissions
    mkdir/data/lost+found 0770
    mkdir/cache/lost+found 0770

    # doublecheck the perms, in case lost+found already exists, and setowner
    chown rootroot /data/lost+found
    chmod 0770/data/lost+found
    chown rootroot /cache/lost+found
    chmod 0770/cache/lost+found

   #===================================================================
    #
    # debug fsenable for wifi & bluetooth
    #
   #===================================================================
    mountdebugfs none /sys/kernel/debug

on boot
# basic network init
    ifuplo
    ifupeth0
    ifupeth1
    hostnamelocalhost
    domainnamelocaldomain

# set RLIMIT_NICE to allow priorities from 19 to -20
    setrlimit 1340 40

# Define the oom_adj values for the classes of processes that canbe
# killed by the kernel.  These are used inActivityManagerService.
    setpropro.FOREGROUND_APP_ADJ 0
    setpropro.VISIBLE_APP_ADJ 1
    setpropro.SECONDARY_SERVER_ADJ 2
    setpropro.BACKUP_APP_ADJ 2
    setpropro.HOME_APP_ADJ 4
    setpropro.HIDDEN_APP_MIN_ADJ 7
    setpropro.CONTENT_PROVIDER_ADJ 14
    setpropro.EMPTY_APP_ADJ 15

# Define the memory thresholds at which the above process classeswill
# be killed.  These numbers are in pages(4k).
    setpropro.FOREGROUND_APP_MEM 1536
    setpropro.VISIBLE_APP_MEM 2048
    setpropro.SECONDARY_SERVER_MEM 4096
    setpropro.BACKUP_APP_MEM 4096
    setpropro.HOME_APP_MEM 4096
    setpropro.HIDDEN_APP_MEM 5120
    setpropro.CONTENT_PROVIDER_MEM 5632
    setpropro.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
    
    setpropwifi.interface eth1
    setpropwlan.interface eth1
    setpropwlan.driver.status ok
    setpropwlan.modpath /system/lib/libwifi/
    setpropwlan.mod1 libertas.ko
    setpropwlan.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_APPat 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/minfree1536,2048,4096,5120,5632,6144

    # Set initits forked children's oom_adj.
    write/proc/1/oom_adj -16

    # Tweakbackground writeout
    write/proc/sys/vm/dirty_expire_centisecs 200
    write/proc/sys/vm/dirty_background_ratio  5

    #Permissions for System Server and daemons.
    chown radiosystem /sys/android_power/state
    chown radiosystem /sys/android_power/request_state
    chown radiosystem /sys/android_power/acquire_full_wake_lock
    chown radiosystem /sys/android_power/acquire_partial_wake_lock
    chown radiosystem /sys/android_power/release_wake_lock
    chown radiosystem /sys/power/state
    chown radiosystem /sys/power/wake_lock
    chown radiosystem /sys/power/wake_unlock
    chmod 0660/sys/power/state
    chmod 0660/sys/power/wake_lock
    chmod 0660/sys/power/wake_unlock
    chown systemsystem /sys/class/timed_output/vibrator/enable
    chown systemsystem /sys/class/leds/keyboard-backlight/brightness
   chownsystem system /sys/class/leds/lcd-backlight/brightness
    chown systemsystem /sys/class/backlight/pwm-backlight/brightness
    chown systemsystem /sys/class/leds/button-backlight/brightness
    chown systemsystem /sys/class/leds/jogball-backlight/brightness
    chown systemsystem /sys/class/leds/red/brightness
    chown systemsystem /sys/class/leds/green/brightness
    chown systemsystem /sys/class/leds/blue/brightness
    chown systemsystem /sys/class/leds/red/device/grpfreq
    chown systemsystem /sys/class/leds/red/device/grppwm
    chown systemsystem /sys/class/leds/red/device/blink
    chown systemsystem /sys/class/leds/red/brightness
    chown systemsystem /sys/class/leds/green/brightness
    chown systemsystem /sys/class/leds/blue/brightness
    chown systemsystem /sys/class/leds/red/device/grpfreq
    chown systemsystem /sys/class/leds/red/device/grppwm
    chown systemsystem /sys/class/leds/red/device/blink
    chown systemsystem /sys/class/timed_output/vibrator/enable
    chown systemsystem /sys/module/sco/parameters/disable_esco
    chown systemsystem /sys/kernel/ipv4/tcp_wmem_min
    chown systemsystem /sys/kernel/ipv4/tcp_wmem_def
    chown systemsystem /sys/kernel/ipv4/tcp_wmem_max
    chown systemsystem /sys/kernel/ipv4/tcp_rmem_min
    chown systemsystem /sys/kernel/ipv4/tcp_rmem_def
    chown systemsystem /sys/kernel/ipv4/tcp_rmem_max
    chown rootradio /proc/cmdline
    #bluetoothpower up/down interface
   chownbluetooth bluetooth /sys/class/rfkill/rfkill0/type
   chownbluetooth bluetooth /sys/class/rfkill/rfkill0/state
   chmod0660               /sys/class/rfkill/rfkill0/state
   chownbluetooth bluetooth /dev/s3c2410_serial1
    chmod0666   /dev/s3c2410_serial1
    chmod0666   /dev/s3c2410_serial2
    chmod0666   /dev/s3c2410_serial3
    chmod0666   /dev/video0
    chmod0666   /dev/s3c-jpg

# Define TCP buffer sizes for various networks
  ReadMin, ReadInitial,ReadMax, WriteMin, WriteInitial, WriteMax,
    setpropnet.tcp.buffersize.default4096,87380,110208,4096,16384,110208
    setpropnet.tcp.buffersize.wifi   4095,87380,110208,4096,16384,110208
    setpropnet.tcp.buffersize.umts   4094,87380,110208,4096,16384,110208
    setpropnet.tcp.buffersize.edge   4093,26280,35040,4096,16384,35040
    setpropnet.tcp.buffersize.gprs   4092,8760,11680,4096,8760,11680
    setpropnet.dns1 8.8.8.8
    setpropnet.dns2 8.8.4.4

    class_startdefault
    setpropalsa.mixer.playback.master Front
    setpropalsa.mixer.capture.master Capture
    setpropalsa.mixer.playback.earpiece Master
    setpropalsa.mixer.capture.earpiece Capture
    setpropalsa.mixer.playback.headset Master
    setpropalsa.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 systemproperty
service adbd /sbin/adbd
   disabled

# adbd on at boot in emulator
on property:ro.kernel.qemu=1
    startadbd

on property:persist.service.adb.enable=1
    startadbd

on property:persist.service.adb.enable=0
    stopadbd

service servicemanager /system/bin/servicemanager
    usersystem
   critical
    onrestartrestart zygote
    onrestartrestart media

service vold /system/bin/vold
    socket voldstream 0660 root mount

service tsd /sbin/tsd

service nexus /system/bin/nexus
    socket nexusstream 0660 root system
   disabled

#service mountd /system/bin/mountd
   socketmountd stream 0660 root mount

service debuggerd /system/bin/debuggerd

service udiskd /system/bin/udiskd
    socketudiskd stream 666 root mount

service fanetworkservice /system/bin/fa-network-service
    socketfa-network-service stream 666 radio radio
    userroot
    group radiocache 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 rildstream 660 root radio
    socketrild-debug stream 660 radio system
    userroot
    group radiocache inet misc audio

service zygote /system/bin/app_process -Xzygote /system/bin--zygote --start-system-server
    socketzygote stream 666
    onrestartwrite /sys/android_power/request_state wake
    onrestartwrite /sys/power/state on
    onrestartrestart media

service media /system/bin/mediaserver
    usermedia
    group systemaudio camera graphics inet net_bt net_bt_admin

##service bootsound /system/bin/playmp3
##    usermedia
##    groupaudio
##   oneshot

service bootanim /system/bin/bootanimation
    usergraphics
    groupgraphics
   disabled
   oneshot

service dbus /system/bin/dbus-daemon --system --nofork
    socket dbusstream 660 bluetooth bluetooth
    userbluetooth
    groupbluetooth net_bt_admin

service wpa_supplicant /system/bin/logwrapper/system/bin/wpa_supplicant -Dwext -ieth1 -c/system/etc/wifi/wpa_supplicant.conf -dd
    group systemwifi inet keystore
   disabled
   oneshot

service dhcpcd /system/bin/logwrapper /system/bin/dhcpcd -deth1
   disabled
   oneshot
    group systemdhcp

on property:init.svc.wpa_supplicant=stopped
    stopdhcpcd

service bluetoothd /system/bin/logwrapper /system/bin/bluetoothd -d-n
    socketbluetooth stream 660 bluetooth bluetooth
    socketdbus_bluetooth stream 660 bluetooth bluetooth
    # init.rcdoes not yet support applying capabilities, so run as rootand
    # letbluetoothd drop uid to bluetooth with the right linuxcapabilities
    groupbluetooth 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 -r0x1be 0x126e
    userbluetooth
    groupbluetooth 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
    userbluetooth
    groupbluetooth net_bt_admin misc
   disabled

service hfag /system/bin/sdptool add --channel=10 HFAG
    userbluetooth
    groupbluetooth net_bt_admin
   disabled
   oneshot

service hsag /system/bin/sdptool add --channel=11 HSAG
    userbluetooth
    groupbluetooth net_bt_admin
   disabled
   oneshot

service opush /system/bin/sdptool add --channel=12 OPUSH
    userbluetooth
    groupbluetooth net_bt_admin
   disabled
   oneshot

service pbap /system/bin/sdptool add --channel=19 PBAP
    userbluetooth
    groupbluetooth net_bt_admin
   disabled
   oneshot

service installd /system/bin/installd
    socketinstalld stream 600 system system

##service flash_recovery /system/etc/install-recovery.sh
##   oneshot

service racoon /system/bin/racoon
    socketracoon stream 600 system system
    # racoonwill setuid to vpn after getting necessary resources.
    groupnet_admin
   disabled
   oneshot

service mtpd /system/bin/mtpd
    socket mtpdstream 600 system system
    uservpn
    group vpnnet_admin net_raw
   disabled
   oneshot

service keystore /system/bin/keystore /data/misc/keystore
    userkeystore
    groupkeystore
    socketkeystore stream 666

service dumpstate /system/bin/dumpstate -s
    socketdumpstate stream 0660 shell log
   disabled
   oneshot
0 0
原创粉丝点击