android 语法分析方法,android的initrc语法分析

此文来自于对中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

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).

PropertiesInit 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值