Name |
Date |
Size |
#Lines |
LOC |
||
---|---|---|---|---|---|---|
.. | - | - | ||||
Android.mk | D | 03-May-2024 | 743 | 34 | 20 | |
MODULE_LICENSE_APACHE2 | D | 03-May-2024 | 0 | |||
NOTICE | D | 03-May-2024 | 10.4 KiB | 191 | 158 | |
README.BOOTCHART | D | 03-May-2024 | 2.1 KiB | 53 | 35 | |
bootchart.c | D | 03-May-2024 | 9.5 KiB | 379 | 293 | |
bootchart.h | D | 03-May-2024 | 1.1 KiB | 37 | 14 | |
builtins.c | D | 03-May-2024 | 8.9 KiB | 443 | 343 | |
devices.c | D | 03-May-2024 | 17.7 KiB | 634 | 490 | |
devices.h | D | 03-May-2024 | 1,017 | 28 | 9 | |
grab-bootchart.sh | D | 03-May-2024 | 550 | 23 | 12 | |
init.c | D | 03-May-2024 | 26.4 KiB | 1,031 | 802 | |
init.h | D | 03-May-2024 | 5.1 KiB | 180 | 118 | |
keywords.h | D | 03-May-2024 | 2.9 KiB | 79 | 76 | |
logo.c | D | 03-May-2024 | 3.5 KiB | 164 | 121 | |
parser.c | D | 03-May-2024 | 21.1 KiB | 796 | 729 | |
property_service.c | D | 03-May-2024 | 12.9 KiB | 505 | 373 | |
property_service.h | D | 03-May-2024 | 1,021 | 29 | 10 | |
readme.txt | D | 03-May-2024 | 7.8 KiB | 294 | 214 | |
util.c | D | 03-May-2024 | 4.8 KiB | 212 | 139 |
README.BOOTCHART
1This version of init contains code to perform "bootcharting", i.e. generating log 2files that can be later processed by the tools provided by www.bootchart.org. 3 4To activate it, you need to define build 'init' with the INIT_BOOTCHART environment 5variable defined to 'true', for example: 6 7 touch system/init/init.c 8 m INIT_BOOTCHART=true 9 10On the emulator, use the new -bootchart <timeout> option to boot with bootcharting 11activated for <timeout> seconds. 12 13Otherwise, flash your device, and start it. Then create a file on the /data partition 14with a command like the following: 15 16 adb shell 'echo $TIMEOUT > /data/bootchart-start' 17 18Where the value of $TIMEOUT corresponds to the wanted bootcharted period in seconds; 19for example, to bootchart for 2 minutes, do: 20 21 adb shell 'echo 120 > /data/bootchart-start' 22 23Reboot your device, bootcharting will begin and stop after the period you gave. 24You can also stop the bootcharting at any moment by doing the following: 25 26 adb shell 'echo 1 > /data/bootchart-stop' 27 28Note that /data/bootchart-stop is deleted automatically by init at the end of the 29bootcharting. This is not the case of /data/bootchart-start, so don't forget to delete it 30when you're done collecting data: 31 32 adb shell rm /data/bootchart-start 33 34The log files are placed in /data/bootchart/. you must run the script tools/grab-bootchart.sh 35which will use ADB to retrieve them and create a bootchart.tgz file that can be used with 36the bootchart parser/renderer, or even uploaded directly to the form located at: 37 38 http://www.bootchart.org/download.html 39 40NOTE: the bootchart.org webform doesn't seem to work at the moment, you can generate an 41 image on your machine by doing the following: 42 43 1/ download the sources from www.bootchart.org 44 2/ unpack them 45 3/ in the source directory, type 'ant' to build the bootchart program 46 4/ type 'java -jar bootchart.jar /path/to/bootchart.tgz 47 48technical note: 49 50this implementation of bootcharting does use the 'bootchartd' script provided by 51www.bootchart.org, but a C re-implementation that is directly compiled into our init 52program. 53
readme.txt
1 2Android Init Language 3--------------------- 4 5The Android Init Language consists of four broad classes of statements, 6which are Actions, Commands, Services, and Options. 7 8All of these are line-oriented, consisting of tokens separated by 9whitespace. The c-style backslash escapes may be used to insert 10whitespace into a token. Double quotes may also be used to prevent 11whitespace from breaking text into multiple tokens. The backslash, 12when it is the last character on a line, may be used for line-folding. 13 14Lines which start with a # (leading whitespace allowed) are comments. 15 16Actions and Services implicitly declare a new section. All commands 17or options belong to the section most recently declared. Commands 18or options before the first section are ignored. 19 20Actions and Services have unique names. If a second Action or Service 21is declared with the same name as an existing one, it is ignored as 22an error. (??? should we override instead) 23 24 25Actions 26------- 27Actions are named sequences of commands. Actions have a trigger which 28is used to determine when the action should occur. When an event 29occurs which matches an action's trigger, that action is added to 30the tail of a to-be-executed queue (unless it is already on the 31queue). 32 33Each action in the queue is dequeued in sequence and each command in 34that action is executed in sequence. Init handles other activities 35(device creation/destruction, property setting, process restarting) 36"between" the execution of the commands in activities. 37 38Actions take the form of: 39 40on <trigger> 41 <command> 42 <command> 43 <command> 44 45 46Services 47-------- 48Services are programs which init launches and (optionally) restarts 49when they exit. Services take the form of: 50 51service <name> <pathname> [ <argument> ]* 52 <option> 53 <option> 54 ... 55 56 57Options 58------- 59Options are modifiers to services. They affect how and when init 60runs the service. 61 62critical 63 This is a device-critical service. If it exits more than four times in 64 four minutes, the device will reboot into recovery mode. 65 66disabled 67 This service will not automatically start with its class. 68 It must be explicitly started by name. 69 70setenv <name> <value> 71 Set the environment variable <name> to <value> in the launched process. 72 73socket <name> <type> <perm> [ <user> [ <group> ] ] 74 Create a unix domain socket named /dev/socket/<name> and pass 75 its fd to the launched process. <type> must be "dgram" or "stream". 76 User and group default to 0. 77 78user <username> 79 Change to username before exec'ing this service. 80 Currently defaults to root. (??? probably should default to nobody) 81 Currently, if your process requires linux capabilities then you cannot use 82 this command. You must instead request the capabilities in-process while 83 still root, and then drop to your desired uid. 84 85group <groupname> [ <groupname> ]* 86 Change to groupname before exec'ing this service. Additional 87 groupnames beyond the (required) first one are used to set the 88 supplemental groups of the process (via setgroups()). 89 Currently defaults to root. (??? probably should default to nobody) 90 91oneshot 92 Do not restart the service when it exits. 93 94class <name> 95 Specify a class name for the service. All services in a 96 named class may be started or stopped together. A service 97 is in the class "default" if one is not specified via the 98 class option. 99 100onrestart 101 Execute a Command (see below) when service restarts. 102 103Triggers 104-------- 105 Triggers are strings which can be used to match certain kinds 106 of events and used to cause an action to occur. 107 108boot 109 This is the first trigger that will occur when init starts 110 (after /init.conf is loaded) 111 112<name>=<value> 113 Triggers of this form occur when the property <name> is set 114 to the specific value <value>. 115 116device-added-<path> 117device-removed-<path> 118 Triggers of these forms occur when a device node is added 119 or removed. 120 121service-exited-<name> 122 Triggers of this form occur when the specified service exits. 123 124 125Commands 126-------- 127 128exec <path> [ <argument> ]* 129 Fork and execute a program (<path>). This will block until 130 the program completes execution. It is best to avoid exec 131 as unlike the builtin commands, it runs the risk of getting 132 init "stuck". (??? maybe there should be a timeout?) 133 134export <name> <value> 135 Set the environment variable <name> equal to <value> in the 136 global environment (which will be inherited by all processes 137 started after this command is executed) 138 139ifup <interface> 140 Bring the network interface <interface> online. 141 142import <filename> 143 Parse an init config file, extending the current configuration. 144 145hostname <name> 146 Set the host name. 147 148chmod <octal-mode> <path> 149 Change file access permissions. 150 151chown <owner> <group> <path> 152 Change file owner and group. 153 154class_start <serviceclass> 155 Start all services of the specified class if they are 156 not already running. 157 158class_stop <serviceclass> 159 Stop all services of the specified class if they are 160 currently running. 161 162domainname <name> 163 Set the domain name. 164 165insmod <path> 166 Install the module at <path> 167 168mkdir <path> [mode] [owner] [group] 169 Create a directory at <path>, optionally with the given mode, owner, and 170 group. If not provided, the directory is created with permissions 755 and 171 owned by the root user and root group. 172 173mount <type> <device> <dir> [ <mountoption> ]* 174 Attempt to mount the named device at the directory <dir> 175 <device> may be of the form mtd@name to specify a mtd block 176 device by name. 177 <mountoption>s include "ro", "rw", "remount", "noatime", ... 178 179setkey 180 TBD 181 182setprop <name> <value> 183 Set system property <name> to <value>. 184 185setrlimit <resource> <cur> <max> 186 Set the rlimit for a resource. 187 188start <service> 189 Start a service running if it is not already running. 190 191stop <service> 192 Stop a service from running if it is currently running. 193 194symlink <target> <path> 195 Create a symbolic link at <path> with the value <target> 196 197sysclktz <mins_west_of_gmt> 198 Set the system clock base (0 if system clock ticks in GMT) 199 200trigger <event> 201 Trigger an event. Used to queue an action from another 202 action. 203 204write <path> <string> [ <string> ]* 205 Open the file at <path> and write one or more strings 206 to it with write(2) 207 208 209Properties 210---------- 211Init updates some system properties to provide some insight into 212what it's doing: 213 214init.action 215 Equal to the name of the action currently being executed or "" if none 216 217init.command 218 Equal to the command being executed or "" if none. 219 220init.svc.<name> 221 State of a named service ("stopped", "running", "restarting") 222 223 224Example init.conf 225----------------- 226 227# not complete -- just providing some examples of usage 228# 229on boot 230 export PATH /sbin:/system/sbin:/system/bin 231 export LD_LIBRARY_PATH /system/lib 232 233 mkdir /dev 234 mkdir /proc 235 mkdir /sys 236 237 mount tmpfs tmpfs /dev 238 mkdir /dev/pts 239 mkdir /dev/socket 240 mount devpts devpts /dev/pts 241 mount proc proc /proc 242 mount sysfs sysfs /sys 243 244 write /proc/cpu/alignment 4 245 246 ifup lo 247 248 hostname localhost 249 domainname localhost 250 251 mount yaffs2 mtd@system /system 252 mount yaffs2 mtd@userdata /data 253 254 import /system/etc/init.conf 255 256 class_start default 257 258service adbd /sbin/adbd 259 user adb 260 group adb 261 262service usbd /system/bin/usbd -r 263 user usbd 264 group usbd 265 socket usbd 666 266 267service zygote /system/bin/app_process -Xzygote /system/bin --zygote 268 socket zygote 666 269 270service runtime /system/bin/runtime 271 user system 272 group system 273 274on device-added-/dev/compass 275 start akmd 276 277on device-removed-/dev/compass 278 stop akmd 279 280service akmd /sbin/akmd 281 disabled 282 user akmd 283 group akmd 284 285Debugging notes 286--------------- 287By default, programs executed by init will drop stdout and stderr into 288/dev/null. To help with debugging, you can execute your program via the 289Andoird program logwrapper. This will redirect stdout/stderr into the 290Android logging system (accessed via logcat). 291 292For example 293service akmd /system/bin/logwrapper /sbin/akmd 294