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.
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").
# 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
#}}
# 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
# 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
#
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
## 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 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