实例分析init.rc的语法

1# Copyright (C) 2012 The Android Open Source Project
2# Copyright (C) 
3# Copyright (C) 
4#
5# IMPORTANT: Do not create world writable files or directories.
6# This is a common source of Android security bugs.
7#
8
9import /init.${ro.hardware}.rc  //import <filename> : 包含其他的*.rc,类似include
10import /init.usb.rc
11import /init.trace.rc
12
13on early-init     //最先做 其中的action, 开始early-init 段
14    # Set init and its forked children's oom_adj.
15    write /proc/1/oom_adj -16  //直接写入procfs
16
17    start ueventd   //启动一个服务,注意ueventd 必须是一个service,在359行有定义
18
19# create mountpoints
20    mkdir /mnt 0775 root system //创建目录,具体用法与shell中的mkdir命令一样
21
22on init  //开始init段,其中的action在 early-init,property-init后执行
23
24sysclktz 0  //设置系统时钟,如果是0表示用GMT的时钟ticks
25
26loglevel 3  //log的输出级别[0,7],控制的kernel的log输出
27
28# setup the global environment 
29    export PATH /sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin  //export,shell命令,设置全局环境变量
30    export LD_LIBRARY_PATH /vendor/lib:/system/lib
31    export ANDROID_BOOTLOGO 1
32    export ANDROID_ROOT /system
33    export ANDROID_ASSETS /system/app
34    export ANDROID_DATA /data
35    export ASEC_MOUNTPOINT /mnt/asec
36    export LOOP_MOUNTPOINT /mnt/obb
37    export BOOTCLASSPATH /system/framework/core.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/framework_ext.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/apache-xml.jar
38
39# Backward compatibility
40    symlink /system/etc /etc  //创建一个指向/system/etc的软连接/etc, 也就是/etc目录实际上指向/system/etc
41    symlink /sys/kernel/debug /d
42
43# Right now vendor lives on the same filesystem as system,
44# but someday that may change.
45    symlink /system/vendor /vendor
46
47# Create cgroup mount point for cpu accounting
48    mkdir /acct
49    mount cgroup none /acct cpuacct //mount <type> <device> <dir> [mountoption] 把device(none)挂载到type为cgroup 的文件系统/acct下
                                      //其中<device>可以是以mtd@name形式指定的一个mtd块设备. mountoption可以是mode=0755,gid=1000
50    mkdir /acct/uid
51
52    mkdir /system
53    mkdir /data 0771 system system
54    mkdir /cache 0770 system cache
55    mkdir /config 0500 root root
56
57    # Directory for putting things only root should see.
58    mkdir /mnt/secure 0700 root root
59
60    # Directory for staging bindmounts
61    mkdir /mnt/secure/staging 0700 root root
62
63    # Directory-target for where the secure container
64    # imagefile directory will be bind-mounted
65    mkdir /mnt/secure/asec  0700 root root
66
67    # Secure container public mount points.
68    mkdir /mnt/asec  0700 root system
69    mount tmpfs tmpfs /mnt/asec mode=0755,gid=1000
70
71    # Filesystem image public mount points.
72    mkdir /mnt/obb 0700 root system
73    mount tmpfs tmpfs /mnt/obb mode=0755,gid=1000
74
75    write /proc/sys/kernel/panic_on_oops 1
76    write /proc/sys/kernel/hung_task_timeout_secs 0
77    write /proc/cpu/alignment 4
78    write /proc/sys/kernel/sched_latency_ns 10000000
79    write /proc/sys/kernel/sched_wakeup_granularity_ns 2000000
80    write /proc/sys/kernel/sched_compat_yield 1
81    write /proc/sys/kernel/sched_child_runs_first 0
82    write /proc/sys/kernel/randomize_va_space 2
83    write /proc/sys/kernel/kptr_restrict 2
84    write /proc/sys/kernel/dmesg_restrict 1
85    write /proc/sys/vm/mmap_min_addr 32768
86    write /proc/sys/kernel/sched_rt_runtime_us 950000
87    write /proc/sys/kernel/sched_rt_period_us 1000000
88
89# Create cgroup mount points for process groups
90    mkdir /dev/cpuctl
91    mount cgroup none /dev/cpuctl cpu
92    chown system system /dev/cpuctl   //改变目录(/dev/cpuctl)的使用群体为system
93    chown system system /dev/cpuctl/tasks
94    chmod 0660 /dev/cpuctl/tasks      //改变文件(/dev/cpuctl/tasks)的使用权限为0660
95    write /dev/cpuctl/cpu.shares 1024
96    write /dev/cpuctl/cpu.rt_runtime_us 950000
97    write /dev/cpuctl/cpu.rt_period_us 1000000
98
99    mkdir /dev/cpuctl/apps
100    chown system system /dev/cpuctl/apps/tasks
101    chmod 0666 /dev/cpuctl/apps/tasks
102    write /dev/cpuctl/apps/cpu.shares 1024
103    write /dev/cpuctl/apps/cpu.rt_runtime_us 800000
104    write /dev/cpuctl/apps/cpu.rt_period_us 1000000
105
106    mkdir /dev/cpuctl/apps/bg_non_interactive
107    chown system system /dev/cpuctl/apps/bg_non_interactive/tasks
108    chmod 0666 /dev/cpuctl/apps/bg_non_interactive/tasks
109    # 5.0 %
110    write /dev/cpuctl/apps/bg_non_interactive/cpu.shares 52
111    write /dev/cpuctl/apps/bg_non_interactive/cpu.rt_runtime_us 700000
112    write /dev/cpuctl/apps/bg_non_interactive/cpu.rt_period_us 1000000
113
114# Allow everybody to read the xt_qtaguid resource tracking misc dev.
115# This is needed by any process that uses socket tagging.
116    chmod 0644 /dev/xt_qtaguid
117
118on fs  //??????
119# mount mtd partitions
120    # Mount /system rw first to give the filesystem a chance to save a checkpoint
121    mount yaffs2 mtd@system /system
122    mount yaffs2 mtd@system /system ro remount
123    mount yaffs2 mtd@userdata /data nosuid nodev
124    mount yaffs2 mtd@cache /cache nosuid nodev
125
126on post-fs
127    # once everything is setup, no need to modify /
128    mount rootfs rootfs / ro remount
129
130    # We chown/chmod /cache again so because mount is run as root + defaults
131    chown system cache /cache
132    chmod 0770 /cache
133
134    # This may have been created by the recovery system with odd permissions
135    mkdir /cache/recovery
136    chown system cache /cache/recovery
137    chmod 0770 /cache/recovery
138
139    #change permissions on vmallocinfo so we can grab it from bugreports
140    chown root log /proc/vmallocinfo
141    chmod 0440 /proc/vmallocinfo
142
143    #change permissions on kmsg & sysrq-trigger so bugreports can grab kthread stacks
144    chown root system /proc/kmsg
145    chmod 0440 /proc/kmsg
146    chown root system /proc/sysrq-trigger
147    chmod 0220 /proc/sysrq-trigger
148
149    # create the lost+found directories, so as to enforce our permissions
150    # Moved to init.target.rc in the Sony product git
151    # mkdir /cache/lost+found 0770 root root
152
153on post-fs-data
154    # We chown/chmod /data again so because mount is run as root + defaults
155    chown system system /data
156    chmod 0771 /data
157
158    # Create dump dir and collect dumps.
159    # Do this before we mount cache so eventually we can use cache for
160    # storing dumps on platforms which do not have a dedicated dump partition.
161    mkdir /data/dontpanic 0750 root log
162
163    # Collect apanic data, free resources and re-arm trigger
164    copy /proc/apanic_console /data/dontpanic/apanic_console
165    chown root log /data/dontpanic/apanic_console
166    chmod 0640 /data/dontpanic/apanic_console
167
168    copy /proc/apanic_threads /data/dontpanic/apanic_threads
169    chown root log /data/dontpanic/apanic_threads
170    chmod 0640 /data/dontpanic/apanic_threads
171
172    write /proc/apanic_console 1
173
174    # create basic filesystem structure
175    mkdir /data/misc 01771 system misc
176    mkdir /data/misc/bluetoothd 0770 bluetooth bluetooth
177    mkdir /data/misc/bluetooth 0770 system system
178    mkdir /data/misc/keystore 0700 keystore keystore
179    mkdir /data/misc/keychain 0771 system system
180    mkdir /data/misc/vpn 0770 system vpn
181    mkdir /data/misc/systemkeys 0700 system system
182    # give system access to wpa_supplicant.conf for backup and restore
183    mkdir /data/misc/wifi 0770 wifi wifi
184    chmod 0660 /data/misc/wifi/wpa_supplicant.conf
185    mkdir /data/local 0751 root root
186    chmod 2770 /data/radio
187
188    # For security reasons, /data/local/tmp should always be empty.
189    # Do not place files or directories in /data/local/tmp
190    mkdir /data/local/tmp 0771 shell shell
191    mkdir /data/data 0771 system system
192    mkdir /data/app-private 0771 system system
193    mkdir /data/app-asec 0700 root root
194    mkdir /data/app 0771 system system
195    mkdir /data/property 0700 root root
196    mkdir /data/ssh 0750 root shell
197    mkdir /data/ssh/empty 0700 root root
198
199    # create dalvik-cache, so as to enforce our permissions
200    mkdir /data/dalvik-cache 0771 system system
201
202    # create resource-cache and double-check the perms
203    mkdir /data/resource-cache 0771 system system
204    chown system system /data/resource-cache
205    chmod 0771 /data/resource-cache
206
207    # create the lost+found directories, so as to enforce our permissions
208    # Moved to init.target.rc in the Sony product git
209    # mkdir /data/lost+found 0770 root root
210
211    # create directory for DRM plug-ins - give drm the read/write access to
212    # the following directory.
213    mkdir /data/drm 0770 drm drm
214
215    # If there is no fs-post-data action in the init.<device>.rc file, you
216    # must uncomment this line, otherwise encrypted filesystems
217    # won't work.
218    # Set indication (checked by vold) that we have finished this action
219    #setprop vold.post_fs_data_done 1
220
221on boot //开始boot段,其中的action在 early-init,property-init,init后执行
222# basic network init
223    ifup lo                 //启动网路接口 lo, 但lo是啥接口?
224    hostname localhost      //设置手机主机名为localhost
225    domainname localdomain  //设置域名localdomain
226
227# set RLIMIT_NICE to allow priorities from 19 to -20
228    setrlimit 13 40 40
229
230# Memory management.  Basic kernel parameters, and allow the high
231# level system server to be able to adjust the kernel OOM driver
232# parameters to match how it is managing things.
233    write /proc/sys/vm/overcommit_memory 1
234    write /proc/sys/vm/min_free_order_shift 4
235    chown root system /sys/module/lowmemorykiller/parameters/adj
236    chmod 0664 /sys/module/lowmemorykiller/parameters/adj
237    chown root system /sys/module/lowmemorykiller/parameters/minfree
238    chmod 0664 /sys/module/lowmemorykiller/parameters/minfree
239
240    # Tweak background writeout
241    write /proc/sys/vm/dirty_expire_centisecs 200
242    write /proc/sys/vm/dirty_background_ratio  5
243
244    # Permissions for System Server and daemons.
245    chown radio system /sys/android_power/state
246    chown radio system /sys/android_power/request_state
247    chown radio system /sys/android_power/acquire_full_wake_lock
248    chown radio system /sys/android_power/acquire_partial_wake_lock
249    chown radio system /sys/android_power/release_wake_lock
250    chown system system /sys/power/state
251    chown system system /sys/power/autosleep
252    chown system system /sys/power/wakeup_count
253    chown radio system /sys/power/wake_lock
254    chown radio system /sys/power/wake_unlock
255    chmod 0660 /sys/power/state
256    chmod 0660 /sys/power/wake_lock
257    chmod 0660 /sys/power/wake_unlock
258
259    chown system system /sys/devices/system/cpu/cpufreq/interactive/timer_rate
260    chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/timer_rate
261    chown system system /sys/devices/system/cpu/cpufreq/interactive/min_sample_time
262    chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/min_sample_time
263    chown system system /sys/devices/system/cpu/cpufreq/interactive/hispeed_freq
264    chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/hispeed_freq
265    chown system system /sys/devices/system/cpu/cpufreq/interactive/go_hispeed_load
266    chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/go_hispeed_load
267    chown system system /sys/devices/system/cpu/cpufreq/interactive/above_hispeed_delay
268    chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/above_hispeed_delay
269    chown system system /sys/devices/system/cpu/cpufreq/interactive/boost
270    chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/boost
271    chown system system /sys/devices/system/cpu/cpufreq/interactive/boostpulse
272    chown system system /sys/devices/system/cpu/cpufreq/interactive/input_boost
273    chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/input_boost
274
275    # Assume SMP uses shared cpufreq policy for all CPUs
276    chown system system /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
277    chmod 0660 /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
278
279    chown system system /sys/class/timed_output/vibrator/enable
280    chown system system /sys/class/leds/keyboard-backlight/brightness
281    chown system system /sys/class/leds/lcd-backlight/brightness
282    chown system system /sys/class/leds/button-backlight/brightness
283    chown system system /sys/class/leds/jogball-backlight/brightness
284    chown system system /sys/class/leds/red/brightness
285    chown system system /sys/class/leds/green/brightness
286    chown system system /sys/class/leds/blue/brightness
287    chown system system /sys/class/leds/red/device/grpfreq
288    chown system system /sys/class/leds/red/device/grppwm
289    chown system system /sys/class/leds/red/device/blink
290    chown system system /sys/class/leds/red/brightness
291    chown system system /sys/class/leds/green/brightness
292    chown system system /sys/class/leds/blue/brightness
293    chown system system /sys/class/leds/red/device/grpfreq
294    chown system system /sys/class/leds/red/device/grppwm
295    chown system system /sys/class/leds/red/device/blink
296    chown system system /sys/class/timed_output/vibrator/enable
297    chown system system /sys/module/sco/parameters/disable_esco
298    chown system system /sys/kernel/ipv4/tcp_wmem_min
299    chown system system /sys/kernel/ipv4/tcp_wmem_def
300    chown system system /sys/kernel/ipv4/tcp_wmem_max
301    chown system system /sys/kernel/ipv4/tcp_rmem_min
302    chown system system /sys/kernel/ipv4/tcp_rmem_def
303    chown system system /sys/kernel/ipv4/tcp_rmem_max
304    chown root radio /proc/cmdline
305
306# Define TCP buffer sizes for various networks
307#   ReadMin, ReadInitial, ReadMax, WriteMin, WriteInitial, WriteMax,
308    setprop net.tcp.buffersize.default 4096,87380,110208,4096,16384,110208
309    setprop net.tcp.buffersize.wifi    524288,1048576,2097152,262144,524288,1048576
310    setprop net.tcp.buffersize.lte     524288,1048576,2097152,262144,524288,1048576
311    setprop net.tcp.buffersize.umts    4094,87380,110208,4096,16384,110208
312    setprop net.tcp.buffersize.hspa    4094,87380,1220608,4096,16384,1220608
313    setprop net.tcp.buffersize.hsupa   4094,87380,1220608,4096,16384,1220608
314    setprop net.tcp.buffersize.hsdpa   4094,87380,1220608,4096,16384,110208
315    setprop net.tcp.buffersize.hspap   4094,87380,2097152,4096,16384,1220608
316    setprop net.tcp.buffersize.edge    4093,26280,35040,4096,16384,35040
317    setprop net.tcp.buffersize.gprs    4092,8760,11680,4096,8760,11680
318    setprop net.tcp.buffersize.evdo_b  4094,87380,262144,4096,16384,262144
319
320# Assign TCP buffer thresholds to be ceiling value of technology maximums
321# Increased technology maximums should be reflected here.
322    write /proc/sys/net/core/rmem_max  2097152
323    write /proc/sys/net/core/wmem_max  1220608
324
325# Set this property so surfaceflinger is not started by system_init
326    setprop system_init.startsurfaceflinger 0
327
328    class_start core  //如果所有的class类别为core 的服务没有运行,则马上启动它们
329    class_start main
330
331on nonencrypted
332    class_start late_start
333
334on charger
335    class_start charger
336
337on property:vold.decrypt=trigger_reset_main
338    class_reset main
339
340on property:vold.decrypt=trigger_load_persist_props
341    load_persist_props
342
343on property:vold.decrypt=trigger_post_fs_data
344    trigger post-fs-data   //触发一个事件post-fs-data, 该事件是用on post-fs-data定义的,位于后面
345
346on property:vold.decrypt=trigger_restart_min_framework
347    class_start main
348
349on property:vold.decrypt=trigger_restart_framework
350    class_start main
351    class_start late_start
352
353on property:vold.decrypt=trigger_shutdown_framework
354    class_reset late_start
355    class_reset main
356
357## Daemon processes to be run by init.
358##
359service ueventd /sbin/ueventd  //表示service段,语法: service <服务名字> <服务对应的执行文件>; 声明服务名字为ueventd的服务,其具体执行路径
                                  //为/sbin/ueventd
360    class core                 //表示属于class 类别为core 的服务,如果没有设置,则表示该服务的默认类别为default
361    critical                   //
362
363service console /system/bin/sh
364    class core
365    console
366    disabled
367    user shell
368    group log
369
370on property:ro.debuggable=1    //如果用setprop命令设置属性 ro.debuggable变成1,则触发下面的start console
371    start console
372
373# adbd is controlled via property triggers in init.<platform>.usb.rc
374service adbd /sbin/adbd
375    class core
376    disabled      //该服务不能通过启动一类服务来启动,比如 class_start core来启动,只能以单独的名字来启动 start adbd.
377
378# adbd on at boot in emulator
379on property:ro.kernel.qemu=1
380    start adbd
381
382service servicemanager /system/bin/servicemanager
383    class core
384    user system        //在该服务启动前,把用户名切换到 system,默认是root
385    group system       //在该服务启动前,把组名切换到 system.
386    critical           //说明该服务是个对于设备很关键的服务,如果4分钟内退出大于4次,则系统将重启并进入recovery恢复模式
387    onrestart exec /system/bin/sync  //当该服务重启时,执行后面的命令 exec
                                     //exec创建和执行一个程序(/system/bin/sync),在程序完全执行完之前,init会被阻塞。所以极有可能引起init卡死
388    onrestart write /proc/sysrq-trigger c
389
390service vold /system/bin/vold
391    class core
392    socket vold stream 0660 root mount //语法:socket <name> <type> <perm> <user> <group>, 创建一个名字为vold<name>,类别为stream<type>
                                          //访问权限为0660<perm> 用户为root,用户组为mount
393    ioprio be 2
394
395service netd /system/bin/netd
396    class main
397    socket netd stream 0660 root system
398    socket dnsproxyd stream 0660 root inet
399    socket mdns stream 0660 root system
400
401service debuggerd /system/bin/debuggerd
402    class main
403
404service ril-daemon /system/bin/rild
405    class main
406    socket rild stream 660 root radio
407    socket rild-debug stream 660 radio system
408    user root
409    group radio cache inet misc audio sdcard_r sdcard_rw qcom_oncrpc diag qcom_diag log
410
411service surfaceflinger /system/bin/surfaceflinger
412    class main
413    user system
414    group graphics
415    onrestart exec /system/bin/sync
416    onrestart write /proc/sysrq-trigger c
417
418service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
419    class main
420    socket zygote stream 660 root system
421    onrestart exec /system/bin/sync
422    onrestart write /proc/sysrq-trigger c
423
424service drm /system/bin/drmserver
425    class main
426    user drm
427    group drm system inet drmrpc sdcard_r
428
429service media /system/bin/mediaserver
430    class main
431    user media
432    group system audio camera inet net_bt net_bt_admin net_bw_acct drmrpc input qcom_diag
433    ioprio rt 4
434
435service bootanim /system/bin/bootanimation
436    class main
437    user graphics
438    group graphics
439    disabled
440    oneshot    //该服务只启动一次,退出后不再运行
441
442service dbus /system/bin/dbus-daemon --system --nofork
443    class main
444    socket dbus stream 660 bluetooth bluetooth
445    user bluetooth
446    group bluetooth net_bt_admin
447
448service bluetoothd /system/bin/logwrapper /system/bin/bluetoothd -n
449    class main
450    socket bluetooth stream 660 bluetooth bluetooth
451    socket dbus_bluetooth stream 660 bluetooth bluetooth
452    # init.rc does not yet support applying capabilities, so run as root and
453    # let bluetoothd drop uid to bluetooth with the right linux capabilities
454    group bluetooth net_bt_admin misc
455    disabled
456
457service installd /system/bin/installd
458    class main
459    socket installd stream 600 system system
460
461service flash_recovery /system/etc/install-recovery.sh
462    class main
463    oneshot
464
465service racoon /system/bin/racoon
466    class main
467    socket racoon stream 600 system system
468    # IKE uses UDP port 500. Racoon will setuid to vpn after binding the port.
469    group vpn net_admin inet
470    disabled
471    oneshot
472
473service mtpd /system/bin/mtpd
474    class main
475    socket mtpd stream 600 system system
476    user vpn
477    group vpn net_admin inet net_raw
478    disabled
479    oneshot
480
481service keystore /system/bin/keystore /data/misc/keystore
482    class main
483    user keystore
484    group keystore drmrpc
485    socket keystore stream 666
486
487service dumpstate /system/bin/dumpstate -s
488    class main
489    socket dumpstate stream 0660 shell log
490    disabled
491    oneshot
492
493service sshd /system/bin/start-ssh
494    class main
495    disabled
496
497service mdnsd /system/bin/mdnsd
498    class main
499    user mdnsr
500    group inet net_raw
501    socket mdnsd stream 0660 mdnsr inet
502    disabled
503    oneshot
504



  • 0
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值