History log of /system/core/init/init.cpp
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
876ad4571e2eab037a2537f7334220e249a78343 26-Nov-2016 caozhiyuan <cao.zhiyuan@zte.com.cn> init: Fix sync issue on property trigger.

This issue reproduces in the following senario.
1. ("", "") is added to queue;
2. property_triggers_enabled is set to 1;
3. user defined property is triggered, like sys.usb.config=adb;
4. ("sys.usb.config", "adb") is added to queue;
5. main loop interpret ("", "") and queue all current triggers to execution,
so ("sys.usb.config", "adb") is queued for execution for the first time.
6. main loop interpret ("sys.usb.config", "adb"), it is queued for
execution for a second time.
The second time makes ASIT fail.

(cherry pick from AOSP commit b104c502e1db80eda9751b0cba19e2e24fc0c3c0)

Bug: http://b/28218187
Change-Id: I230e175e0dca8989f1e5bd812398da90082d0ec1
Signed-off-by: caozhiyuan <cao.zhiyuan@zte.com.cn>
/system/core/init/init.cpp
a3cc6026301db08285028c760af2665a66b3cc44 13-Apr-2016 Elliott Hughes <enh@google.com> Remove undocumented functionality from init.

Bug: http://b/28151340
Change-Id: I5360502c79d9113a13055bf017b39c099033e947
/system/core/init/init.cpp
9261ad13ed8a6bf5d43450f3eb5a48ecd65587f1 23-Mar-2016 dcashman <dcashman@google.com> init: Fix typo.

Bug: 27681085
Change-Id: I4308435a5b58189852c991d1bec65ed11933566a
/system/core/init/init.cpp
69022e03d81e43455cf7c21555314c4d08664311 22-Mar-2016 dcashman <dcashman@google.com> Temporarily add set_mmap_rnd_bits brillo exception

Bug: 27794137
Change-Id: Idc6fc1e208bdb19556173d40215feb66e235c6d6
/system/core/init/init.cpp
5d36813dc8d3be3f62856cf5147b828a7a8594a7 17-Mar-2016 dcashman <dcashman@google.com> Set mmap_rnd_bits to maximum value.

Also make sure it is above a minimum threshold, else abort.

Bug: 27681085
Change-Id: Id03ede491e5e013a2a7a090abb306d00cb74f901
/system/core/init/init.cpp
9e9efcadc5144e465314d30ca7b3db0ec0a2bc57 07-Dec-2015 Sami Tolvanen <samitolvanen@google.com> init: set ro.boot.flash.locked from ro.boot.verifiedbootstate

If ro.oem_unlock_supported is specified for the device and it supports
verified boot, export lock status in ro.boot.flash.locked.

Bug: 26039090
Change-Id: Ie7844aeb458c97944c72d46ea962b9cfb0a7875d
/system/core/init/init.cpp
4f71319df011d796a60a43fc1bc68e16fbf7d321 05-Dec-2015 Elliott Hughes <enh@google.com> Track rename of base/ to android-base/.

Change-Id: Idf9444fece4aa89c93e15640de59a91f6e758ccf
/system/core/init/init.cpp
e36a85cdcc93a84a6869fc8fc3fc82e3639d4398 01-Dec-2015 Tom Cherry <tomcherry@google.com> restorecon /property_contexts

/property_contexts exists before selinux policies are loaded, so we must
restorecon before other processes can access it

Bug: 21852512
Change-Id: Ie983caac635eb928ab19eea996a5625f3673de39
/system/core/init/init.cpp
2d8f1d4c478b9d921730d3fc9b290315e2ff9f04 09-Nov-2015 Nick Kralevich <nnk@google.com> Merge "Enable hidepid=2 on /proc"
c39ba5ae32afb6329d42e61d2941d87ff66d92e3 08-Nov-2015 Nick Kralevich <nnk@google.com> Enable hidepid=2 on /proc

Add the following mount options to the /proc filesystem:

hidepid=2,gid=3009

This change blocks /proc access unless you're in group 3009
(aka AID_READPROC).

Please see
https://github.com/torvalds/linux/blob/master/Documentation/filesystems/proc.txt
for documentation on the hidepid option.

hidepid=2 is preferred over hidepid=1 since it leaks less information
and doesn't generate SELinux ptrace denials when trying to access
/proc without being in the proper group.

Add AID_READPROC to processes which need to access /proc entries for
other UIDs.

Bug: 23310674
Change-Id: I22bb55ff7b80ff722945e224845215196f09dafa
/system/core/init/init.cpp
1dcf325844df54a3a2d274f37dea8dd676391eed 09-Nov-2015 Rom Lemarchand <romlem@android.com> init: skip "name" DT entry

DTs have a standard "name" entry which is not to be
turned into an android property, so skip it.

Change-Id: I79f6638b4123358c8d80510c1666cf5d4561160e
/system/core/init/init.cpp
d7aea443d9bc0b1f37a2c31d0d476d61ff41fb66 02-Oct-2015 William Roberts <william.c.roberts@intel.com> property_service: log pid,uid and gid of setprop client

When auditing setprop denials, it is often unclear of who the process is
in a multi-process domain. To help identify the invoker, log the pid, uid,
and gid of the caller.

Before:
avc: denied { set } for property=wifi.xxx ...

After:
avc: denied { set } for property=wifi.xxx pid=30691 uid=123 gid=345 ...

Change-Id: I5cdcb3d18fbd52e0987b5e1497b9f6620c6c742a
Signed-off-by: William Roberts <william.c.roberts@intel.com>
/system/core/init/init.cpp
b7349902a945903f9e36a569051f5131beb0bc24 26-Aug-2015 Tom Cherry <tomcherry@google.com> init: Use classes for parsing and clean up memory allocations

Create a Parser class that uses multiple SectionParser interfaces to
handle parsing the different sections of an init rc.

Create an ActionParser and ServiceParser that implement SectionParser
and parse the sections corresponding to Action and Service
classes.

Remove the legacy keyword structure and replace it with std::map's
that map keyword -> (minimum args, maximum args, function pointer) for
Commands and Service Options.

Create an ImportParser that implements SectionParser and handles the
import 'section'.

Clean up the unsafe memory handling of the Action class by using
std::unique_ptr.

Change-Id: Ic5ea5510cb956dbc3f78745a35096ca7d6da7085
/system/core/init/init.cpp
bac3299720623f4226bca103b26260052732ad30 31-Jul-2015 Tom Cherry <tomcherry@google.com> Create Service and ServiceManager classes

Change-Id: I363a5e4751ad83d2f4096882a6fbbeddca03acfe
/system/core/init/init.cpp
96f67316a22bc9236aed70b198e91a5406389e5b 30-Jul-2015 Tom Cherry <tomcherry@google.com> init: use std::vector<std::string> for argument passing

Change-Id: Ie7a64e65de3a20d0c7f7d8efc0f7c1ba121d07fe
/system/core/init/init.cpp
fa0c21c94ccb98bfa5cf3cc7a6b220be4a5fa378 24-Jul-2015 Tom Cherry <tomcherry@google.com> init: Create classes for Action and Command

This creates the concept of 'event_trigger' vs 'property_trigger'

Previously these were merged into one, such that 'on property:a=b &&
property:b=c' is triggered when properties a=b and b=c as expected,
however combinations such as 'on early-boot && boot' would trigger
during both early-boot and boot. Similarly, 'on early-boot &&
property:a=b' would trigger on both early-boot and again when property
a equals b.

The event trigger distinction ensures that the first example fails to
parse and the second example only triggers on early-boot if
property a equals b.

This coalesces Actions with the same triggers into a single Action object

Change-Id: I8f661d96e8a2d40236f252301bfe10979d663ea6
/system/core/init/init.cpp
f13b1b31399aa501514eb9beeef303d1ae2e0e14 25-Jul-2015 Lee Campbell <leecam@google.com> init: Adding support to import directories

Support added so init scripts can now import directories.

BUG: 22721249
Change-Id: I02b566bfb50ea84469f1ea0c6ad205435a1df286
TEST: Tested importing a folder on arm64 emulator
/system/core/init/init.cpp
ee530065648d7fdf1bb80c76385cc54a6d661dc8 25-Jul-2015 Yabin Cui <yabinc@google.com> init: expand_props for onrestart commands.

It is only a temporary fix. I hope the code can be moved into a member
function of class Command.

Bug: 22654233
Change-Id: I38c24fb624e54986a953f44d398b3b80c3795d24
/system/core/init/init.cpp
00ede7d2626f9343d330dc6f5286bba3e99e41d0 24-Jul-2015 Yabin Cui <yabinc@google.com> init: do expand_props before calling the builtins.

Also switch expand_props to std::string.

Bug: 22654233

Change-Id: I62910d4f74e2b1a5bd2b14aea440767a2a8462b7
/system/core/init/init.cpp
74edcea90e31a3795e58aa1b2bbe96032f0bcd61 24-Jul-2015 Yabin Cui <yabinc@google.com> init: Let property_get return std::string.

Bug: 22654233

Change-Id: Id6091f58432f75e966b9871256049fbe17766c10
/system/core/init/init.cpp
4800dbf1da2b7d866c67c7375a55057f2b6c6d52 16-Jul-2015 Nick Kralevich <nnk@google.com> init: refuse to start process if domain transition not defined

When SELinux is in enforcing mode, any process executed by
init must have a domain transition defined. See
https://android-review.googlesource.com/108640 for details. This
prevents an executable spawned by init from remaining in init's
(very powerful) SELinux domain.

However, this is only enforced when SELinux is in enforcing mode.
During new device bringup, it's common to run an Android device
in globally permissive mode. In globally permissive mode, SELinux
denials are logged only, but otherwise ignored. If appropriate
SELinux domain transitions are not defined from init to init spawned
processes, this could cause misleading SELinux denials attributed
to init instead of the child process.

To help address these misleading denials, modify init to not spawn
processes unless a domain transition is defined. This essentially
enforces the rules in https://android-review.googlesource.com/108640
on both permissive and enforcing kernels.

While I'm here, change some "freecon()" calls to "free()", with the
long term goal of deleting freecon() entirely.

Change-Id: I3ef3a372bb85df61a3f6234cb1113cc25fc6506a
/system/core/init/init.cpp
d62f0608d9d67bf647cf15debbd163e84584fe44 13-Jun-2015 Elliott Hughes <enh@google.com> init support for cgroups.

This adds the "writepid" option that instructs init to write the child's
pid to the given filenames (such as /dev/cpuctl/bg_non_interactive/cgroup.procs
and/or /dev/cpuset/foreground/cgroup.procs).

Bug: http://b/21163745
Change-Id: I121bb22aa208bc99c4fb334eb552fdd5bcc47c1a
/system/core/init/init.cpp
4d87095ebfefdb9e641492462f0a0e21d5b96ecf 13-Jun-2015 Nick Kralevich <nnk@google.com> Remove calls to is_selinux_enabled()

d34e407aeb5898f19d4f042b7558420bbb3a1817 removed support for
running with SELinux completely disabled. SELinux must either be
in permissive or enforcing mode now.

Remove unnecessary calls to is_selinux_enabled(). It always returns
true now.

Change-Id: Ife3156b74b13b2e590afe4accf716fc7776567e5
/system/core/init/init.cpp
17fff893c04971b519d25d52b07f51111353cba5 02-Jun-2015 Mark Salyzyn <salyzyn@google.com> init: change exec parsing to make SECLABEL optional

Allow SECLABEL to be - to denote default

Change-Id: I58cdc6c805dc6e50dc42b7e13e72d0eaf4864f11
/system/core/init/init.cpp
c7331d02d1c6b1e51b3a1210506f38fd61819495 14-May-2015 Elliott Hughes <enh@google.com> Reduce the coldboot timeout to 1s.

5s was already a ridiculously long time to delay booting, and some OEMs are
trying to make it even more insane:

https://www.codeaurora.org/cgit/quic/la/platform/system/core/commit/?h=lp&id=fd23edd48272976d2fb333f377242173f92aa343

Let's at least ensure that Nexus and Android One devices don't take forever
to boot...

Bug: http://b/19899875
Change-Id: I9680c166a759360f34118e51cd0645e12b6bd5c8
/system/core/init/init.cpp
e5ce30fed81d1918a259be092dcd8bfffc3c2649 07-May-2015 Elliott Hughes <enh@google.com> Clean up init /proc/cmdline handling.

Helped debug a problem where the N9 bootloader incorrectly
concatenated the various command lines.

Bug: http://b/20906691
Change-Id: I0580b06f4185129c7eedf0bdf74b5ce17f88bf9c
/system/core/init/init.cpp
d34e407aeb5898f19d4f042b7558420bbb3a1817 28-Apr-2015 Nick Kralevich <nnk@google.com> init: remove support for disabled SELinux

Remove support for androidboot.selinux=disabled. Running with SELinux
disabled is not a supported configuration anymore. SELinux must be
in enforcing in shipping devices, but we also support permissive for
userdebug/eng builds.

Don't try security_setenforce() if we're already in enforcing mode.
A kernel compiled without CONFIG_SECURITY_SELINUX_DEVELOP does
not have a permissive mode, so the kernel will already be enforcing
once the policy is loaded.

Bug: 19702273
Change-Id: I07525a017ddb682020ec0d42e56a2702c053bdeb
/system/core/init/init.cpp
f667a3247a7e814355feedbc08c6bbc92a9409b5 26-Apr-2015 Nick Kralevich <nnk@google.com> init: get rid of the remaining double mounts

Don't double mount /dev and its subdirectories anymore. Instead, the
first stage init is solely responsible for mounting it.

Don't have init prepare the property space. This is the responsibility
of the second stage init.

Don't have SELinux use the property space to determine how we should
be running. Instead, create a new function and extract the data we
need directly from /proc/cmdline. SELinux needs this information in
the first stage init process where the property service isn't available.

Change-Id: I5b4f3bec79463a7381a68f30bdda78b5cc122a96
/system/core/init/init.cpp
178299fd459b7622e9e3de05a48d6ba050f92bec 26-Apr-2015 Nick Kralevich <nnk@google.com> Merge "init: don't double mount /proc and /sys"
9dec93bfeb7a4c1ef49745f60f551e0b11a35b2d 26-Apr-2015 Nick Kralevich <nnk@google.com> init: don't double mount /proc and /sys

The first stage init mounts /proc and /sys, and then the second
stage init also mounts /proc and /sys on top of the existing mount.
Only mount these two directories once, in the first stage init.

Not yet fixed: the double mounting of /dev. Removing the double
mounting doesn't work right now because both init stages are trying
to create a property space, and if the double mount of /dev goes away,
the property service in the second stage init fails to work.

Change-Id: I13719027a47526d074390c2b1a605ad99fb43a8f
/system/core/init/init.cpp
eedbe81f753fd19e5eb2238187c5618e9153bf55 25-Apr-2015 Nick Kralevich <nnk@google.com> init: fix write_file checkreqprot logic error

write_file() returned -errno on error, not -1. Callers who check for
-1 would falsely believe that the write was successful when it wasn't.
Fixup write_file so that it return -1 on error consistent
with other functions.

Change-Id: Ic51aaf8678d8d97b2606bd171f11b3b11f642e39
/system/core/init/init.cpp
a1f6a4b13921f61799be14a2544bdbf95958eae7 25-Apr-2015 Nick Kralevich <nnk@google.com> init: remove mkdir /dev /proc /sys

These directories are already present in the initial ramdisk, and
these mkdir calls are no-ops.

Change-Id: I528f9e96a3471de904845a2f9e09c1b6ff83a708
/system/core/init/init.cpp
929f4070767d1e4806c058849178afa13d9ded1e 25-Apr-2015 Elliott Hughes <enh@google.com> Switch init to epoll.

Not just because it's what the cool kids are doing --- it also lets us
simplify the inner loop and decouple it from whatever systems want to
be woken to perform some activity if there's data to be read on some fd.

Currently this is just used to clean up the existing signal handling,
keychord, and property service code.

Change-Id: I4d7541a2c4386957ad877df69e3be08b96a7dec5
/system/core/init/init.cpp
c6c26ed781d9ae1ba388cebba63532d2ecda3227 25-Apr-2015 Elliott Hughes <enh@google.com> Clean up property service initialization.

All the code that was being delayed does is create a socket. We can
do that straight away, avoid the overhead, and simplify our main loop.

The keychord fd, on the other hand, seems a little tricky. It looks
like /dev/keychord isn't immediately available, at least not on N9;
we have to wait for ueventd to set us up the bomb.

Change-Id: I020e75b8e4b233497707f0a3cbbb6038b714161f
/system/core/init/init.cpp
9042cae40b60f37294073b59744d04c18033a07c 25-Apr-2015 Elliott Hughes <enh@google.com> Clean up init signal handling a little.

We can set it up earlier, and error reporting like this helped me find
the SELinux problem with the last change to this code.

Change-Id: If0f38bc5ff0465c4030e2d39d34f31f49b2d8487
/system/core/init/init.cpp
662baefbb7ceaf2f2502f4e7752d4a6d835f216a 25-Apr-2015 Elliott Hughes <enh@google.com> Merge "Setup signal handler before any exec command"
f65730e620dde083133b8c1ab61c0d07b4dd8c2f 24-Apr-2015 Elliott Hughes <enh@google.com> Revert "Revert "Make init re-exec itself for its SELinux domain transition.""

This reverts commit 4217374611ada50f33aee544f015f6f9dfbf7ced.

It turns out that the kernel passes any unrecognized arguments on to init,
and (at least) N6 and N9 have such arguments. My lazy check of argc was
thus insufficient to recognize what stage of init we were in, so we'd
skip to stage 2 and not set up SELinux. And apparently you can get a
very long way with SELinux off... We'll fix that in a later change.

Bug: 19702273
Change-Id: I43b3fb722fed35dd217cb529cbcac9a29aff4e4b
/system/core/init/init.cpp
4217374611ada50f33aee544f015f6f9dfbf7ced 24-Apr-2015 Nick Kralevich <nnk@google.com> Revert "Make init re-exec itself for its SELinux domain transition."

shamu isn't booting.

This reverts commit adf0d1bbfa4bc560c2106f14afa8258a11c48bf6.

Change-Id: I89d568838cebbe14cc4a8ae3843f0f1ac54987af
/system/core/init/init.cpp
adf0d1bbfa4bc560c2106f14afa8258a11c48bf6 23-Apr-2015 Elliott Hughes <enh@google.com> Make init re-exec itself for its SELinux domain transition.

Change-Id: I38adabe5789d671e3f7d21936071a758ec8cea8a
/system/core/init/init.cpp
4f673306fc20736be4f4fab602718f9dd28ff5e9 18-Apr-2015 Johan Redestig <johan.redestig@sonymobile.com> Setup signal handler before any exec command

Fixes init deadlock when an exec command was called
in an on-init section.

The exec command handling relies on that the signal handler
mechanism is working to know when to continue executing
commands.

Change-Id: Ib0ce75ffad7cf3bf926c93d0506b2fe3e5a92630
/system/core/init/init.cpp
da40c00137f75543a69972f1be506e2d14a41845 28-Mar-2015 Elliott Hughes <enh@google.com> Log more timing information from init.

Also make important events in init's life NOTICE rather than INFO,
and ensure that NOTICE events actually make it to the kernel log.

Also fix the logging so that if you have a printf format string
error, the compiler now catches it.

Also give messages from init, ueventd, and watchdogd distinct tags.
(Previously they'd all call themselves "init", and dmesg doesn't
include pids, so you couldn't untangle them.)

Also include the tag in SELinux messages.

Bug: 19544788
Change-Id: Ica6daea065bfdb80155c52c0b06f346a7df208fe
/system/core/init/init.cpp
db3f267c99411b10144998c6c1f1a6288d0191bc 20-Mar-2015 Elliott Hughes <enh@google.com> Clean up property setting code.

In particular, ensure that all property_set failures are reported.

Change-Id: Iab94a28bcba2346868c0f39bcfe26e55a2c55562
/system/core/init/init.cpp
d679bc9e568fa1e7d1d2ce9f478b1d4f00dae42a 20-Mar-2015 Elliott Hughes <enh@google.com> Lose bootmode and console globals.

Also remove some code marked "TODO: these are obsolete. We should delete
them".

Change-Id: I6255cee4cb6680bfcbc5b46366990309cba95037
/system/core/init/init.cpp
6a52443d31d4de56ead022a55f63683316d96634 28-Feb-2015 Rom Lemarchand <romlem@android.com> Parse boot properties from device tree

- Make sure compatible DT node is "android,firmware"
- Set ro.boot.* properties from firmware/android/ DT node

(cherry-pick of cbcbea27c70846a96f4bba2f7cb245f937de4d3f.)

Change-Id: If3d0716831516cb3d3fde1f75d57e2691d42d054
/system/core/init/init.cpp
bbc01d825448a738160716f95d9cc38f2be5f4f1 20-Mar-2015 Elliott Hughes <enh@google.com> Merge "Remove /proc/cpuinfo parsing"
0dccc888bd1d48acf412edd2b5279e5d1040b156 19-Mar-2015 Elliott Hughes <enh@google.com> Remove useless memset from init.

Change-Id: Ia880810bb2c9a976dceeb0ffdba0cb98e69e3c6d
/system/core/init/init.cpp
cc86fb2b29b13570ff416d4590a8cab705b19ec3 18-Mar-2015 Elliott Hughes <enh@google.com> Switch init over to _PATH_DEFPATH.

Bug: 19564110
Change-Id: I343b4a360b10319dca13ab01f2d411ff940e9052
/system/core/init/init.cpp
74b34f3cb79aa8f2c5ba6a9dcc46d0dd84cdac86 28-Feb-2015 Rom Lemarchand <romlem@android.com> Remove /proc/cpuinfo parsing

- Clean up the paths for ro.revision and ro.hardware parsing
- Use ro.hardwre in ueventd instead of parsing the kernel command line

(cherry-pick of 38b340a52f8e864650db8bae1eb88d5c00485db0.)

Bug: 19366018
Change-Id: I018a293f3d46e736a8b65132b5b00b0f7c20edae
/system/core/init/init.cpp
58c3bacc38072dafa77e5d33bffa4d3a2a4d2562 11-Mar-2015 Elliott Hughes <enh@google.com> Fix a printf format string (caught by clang but not GCC).

Change-Id: I665756615eef74b05ef92f5865d910f29ead0695
/system/core/init/init.cpp
8d82ea05cb0945ba6cb8bf321b9ffbd0b6932745 07-Feb-2015 Elliott Hughes <enh@google.com> Implement exec.

Change-Id: I20329bc9b378479d745b498d6a00eca0872cd5ab
/system/core/init/init.cpp
e2d63af002a3b494f6bd464f2652b6e1997e7a52 18-Feb-2015 Yabin Cui <yabinc@google.com> Move sprintf to snprintf.

Bug: 19340053
Change-Id: Id0d866e6195ed4752b4be6081eeb2aab8b1dbe9a
/system/core/init/init.cpp
a197ff12dd336a9945ad1164402980296f9c235c 05-Dec-2014 Yongqin Liu <yongqin.liu@linaro.org> bootchart: fix bootchart can not be triggered problem

bootchart uses a file on the data partition to decide if it should collect
data for bootchart, but the data partition will be mounted by the mount_all
command in the "on fs" section, and it will be only added into the action
queue when command "trigger fs" is executed, but that's after the
bootchart_init action (late_init).

This change makes bootchart_init a builtin command of init,
and make it executed as the first command of "on post-fs" section
which will be triggered after the "on fs" section.

This change also refactors the bootchart code to all be in bootchart.cpp.

Change-Id: Ia74aa34ca5b785f51fcffdd383075a549b2a99d9
Signed-off-by: Yongqin Liu <yongqin.liu@linaro.org>
/system/core/init/init.cpp
f682b4786a4093efb23bf80d69bf80eb274b145b 06-Feb-2015 Elliott Hughes <enh@google.com> Clean up reading and writing in init.

This isn't particularly useful in and of itself, but it does introduce the
first (trivial) unit test, improves the documentation (including details
about how to debug init crashes), and made me aware of how unpleasant the
existing parser is.

I also fixed a bug in passing --- unless you thought the "peboot" and "pm"
commands were features...

Bug: 19217569
Change-Id: I6ab76129a543ce3ed3dab52ef2c638009874c3de
/system/core/init/init.cpp
c0e919c92062360a69b771722677d041c9998403 04-Feb-2015 Elliott Hughes <enh@google.com> Stop using #if for conditional compilation.

Use regular 'if' to prevent bitrot.

Also remove remaining typedefs.

Change-Id: I2e6ca928e2db29b88b643cf990ff05cfb0be94a6
/system/core/init/init.cpp
f3cf438714aa1284d8a58e2f3b108ba93f6d3abb 04-Feb-2015 Elliott Hughes <enh@google.com> Build init as C++.

This is just the minimal change to keep it building.

Change-Id: I245c5b8413a1db114576c81462eb5737f5ffcef2
/system/core/init/init.cpp