init of android

Post on 20-May-2015

5.599 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

1

Init of Android

Tetsuyuki Kobayashi

2010.12.10

2

Who am I?

20+ years involved in embedded systems 10 years in real time OS, such as iTRON 10 years in embedded Java Virtual Machine Now GCC, Linux, QEMU, Android, …

Blogs http://d.hatena.ne.jp/embedded/ (Personal) http://blog.kmckk.com/ (Corporate)

Twitter @tetsu_koba

3

Today's topic

/init Boot part of init Daemon part of init Check it out using debugger

/init

Quite different from usual Linux system

Add ”init=/init” in kernel boot parameter. Kernel searches only the following init /sbin/init /etc/init /bin/init /bin/sh

/init

Android init is static linked. So it can run standalone (Linux /sbin/init is dynamically

linked. If some trouble in dynamic link system, the whole system won't work)

Component of init

See the source code of init system/core/init

Init is made of 2 parts: boot part and daemon part At first, boot part is executed once

After that daemon part executed repeatedly

int main(int argc, char **argv){ /* Boot part  */  for (;;) {

/* Daemon part */ }}

Boot part

Setup the directories /dev /proc /sys

Parse /init.rc and execute it Yokohama Android Platform club

has a lot of information for this topic (written in Japanese)

Daemon part

Waiting for 4 fds by poll system call and handle these in forever loop device_fd property_set_fd signal_recv_fd keychord_fd

device_fd

Receiving the device status notification from kernel and create or remove device files under /dev

In usual Linux system, udevd do this.

property_set_fd

Waiting for write request for system property

Init process maintains master data of system property. The other processes share it in read only mode by android ashmem mechanism.

(Let's talk this in other session)

signal_recv_fd

Waiting for exiting child process and finish them by waitpid system call

If the child process is registered as service, restart it as registered info.

keychord_fd

Monitoring special key comination and start the associated service

Effective only if system property ”ro.debuggable” == ”1” || “init.svc.adbd” == “running”

No services use this in default init.rc

See also

KMC blog ”init of Android” http://blog.kmckk.com/archives/3137191.html This page have links of Yokohama Android

Platform club, too. Written in Japanese

15

Q & A

Thank you for listening!Any comments to blogs are welcome.

top related