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 <mins_west_of_gmt> 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) <name>=<value> Triggers of this form occur when the property <name> is set to the specific value <value>. device-added-<path> device-removed-<path> Triggers of these forms occur when a device node is added or removed. service-exited-<name> Triggers of this form occur when the specified service exits.
Create a unix domain socket named /dev/socket/<name> and pass its fd to the launched process. Valid <type>dgram and stream. user and group default to 0.(type 实际中是放在name之后)
values include
user <username>
Change to username before exec‘ing this service. Currently defaults to root.
group <groupname> [ <groupname> ]*
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 (withsetgroups()). Currently defaults to root.
capability [ <capability> ]+
Set linux capability before exec‘ing this service
oneshot
Do not restart the service when it exits.
class <name>
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).
<name>=<value>
Triggers of this form occur when the property <name> is set to the specific value<value>.
device-added-<path> device-removed-<path>
Triggers of these forms occur when a device node is added or removed.
service-exited-<name>
Triggers of this form occur when the specified service exits.
Commands
Command
Description
exec <path> [ <argument> ]*
Fork and execute a program (<path>). 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 <name> <value>
Set the environment variable <name> equal to <value> in the global environment (which will be inherited by all processes started after this command is executed).
ifup <interface>
Bring the network interface <interface> online.
import <filename>
Parse an init config file, extending the current configuration.
hostname <name>
Set the host name.
class_start <serviceclass>
Start all services of the specified class if they are not already running.
class_stop <serviceclass>
Stop all services of the specified class if they are currently running.
domainname <name>
Set the domain name.
insmod <path>
Install the module at <path>.
mkdir <path>
Make a directory at <path>.
mount <type> <device> <dir> [ <mountoption> ]*
Attempt to mount the named device at the directory <dir><device>. This may be of the form mtd@name to specify a mtd block device by name.
setkey
- currenlty undefined -
setprop <name> <value>
Set system property <name> to <value>.
setrlimit <resource> <cur> <max>
Set the rlimit for a resource.
start <service>
Start a service running if it is not already running.
stop <service>
Stop a service from running if it is currently running.
symlink <target> <path>
Create a symbolic link at <path> with the value <target>.
write <path> <string> [ <string> ]*
Open the file at <path> 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.<name>
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.
# 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
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