Android init进程

news/2025/2/23 5:40:26

  相关源码:

/system/core/init/Init.h
/system/core/init/Init.cpp
/system/core/init/Init_parser.h
/system/core/init/Init_parser.cpp
/system/core/init/Signal_handler.h
/system/core/init/Signal_handler.cpp

        Android系统在启动的过程中,kernel会启动第一个进程:init,它是一个由内核启动的用户级进程,实现了内核空间到用户空间的转变。

一、Linux操作系统     

         整个linux操作系统可以分为三层次,从最底层到最上层依次是:硬件-->内核空间-->用户空间,如下图:


 PS:

(1) 内核空间中存放的是内核代码和数据,而进程的用户空间中存放的是用户程序的代码和数据;

(2)内核态与用户态:

        a、当一个任务(进程)执行系统调用而陷入内核代码中执行时,称进程处于内核运行态(内核态)。

              当进程处于内核态时,执行的内核代码会使用当前进程的内核栈,每个进程都有自己的内核栈;

        b、当进程在执行用户自己的代码时,则称其处于用户运行态(用户态)。

              当正在执行用户程序而突然被中断程序中断时,此时用户程序也可以象征性地称为处于进程的内核态。


二、init 进程

      Android的init 进程(system/core/init/init.c)主要功能:

1)、分析init.rc启动脚本文件(system/core/rootdir),根据文件内容执行相应的功能;

2)、当一些关键进程死亡时,重启该进程;

3)、提供Android系统的属性服务;

       在init中启动起来的服务按照init.rc中的先后顺序,大致有:

(1)console: start a shell,code path: system/bin/sh,其源码中包含常用的shell命令,如ls,cd等。
(2)adbd: start adb daemon,通常带有disabled的选项,表明需要按名字启动,code path:system/bin/adb。
(3)servicemanager:这个服务管理着系统内所有binder services。code path: frameworks/base/cmds/servicemanager。
(4)Vold: android 的udev,code path: system/vold。
(5)Netd: start ntd daemon, code path: system/netd。
(6)Debuggerd: start debug system, code path: system/core/debuggerd。
(7)zygote: ['zaigəut]这是一个非常重要的服务,稍后详解。start Android Java Runtime and start systemserver。code path:frameworks/base/cmds/app_process。
(8)media: add AudioFlinger,AudioPolicyService,MediaPlayerService and CameraService to servicemanager,
(9)启动管理binder通讯的机制,依靠ProcessState 和IPCThreadState类来完成binder机制。Code path :frameworks/base/media/mediaserver。
(10)bootanim: 开机动画和铃声,code path:frameworks/base/cmds/bootanimation。
等等。






http://www.niftyadmin.cn/n/1568643.html

相关文章

Zygote

相关源码: /frameworks/base/cmds/app_process/App_main.cpp (内含AppRuntime类) /frameworks/base/core/jni/AndroidRuntime.cpp /frameworks/base/core/java/com/android/internal/os/ZygoteInit.java /frameworks/base/core/java/com/andr…

SystemServer

相关源码路径 /frameworks/base/core/java/com/android/internal/os/ZygoteInit.java /frameworks/base/core/java/com/android/internal/os/RuntimeInit.java /frameworks/base/core/services/java/com/android/server/SystemServer.java /frameworks/base/core/java/com/andr…

Java 语法总结

一、语法基础: 1.1 变量与常量 1、关键字:其实就是某种语言赋予了特殊含义的单词。 保留字:其实就是还没有赋予特殊含义,但是准备日后要使用过的单词。 2、标示符:其实就是在程序中自定义的名词。比如类名&#xf…

Android进程与线程详解

相信很多人读过Google Android 推广工程师的《Who lives and who dies? Process priorities on Android》,该篇仅仅详细介绍了进程级别,但是没有对android的进程进行详细的介绍,而且其他很多文章也都将重点放在了四大组件、UI等方面。因此&a…

Android JNI 高级编程

JNI作为java空间与C空间的沟通桥梁,在android中起到至关重要的作用。本文讲述jni的高级编程,需要有一定的jni基础,先分析了android源码中的jni编程模式,然后阐述一些实用的jni编程技巧。基础文章可以参考以下相关文章:…

bcd与hex转换、以及编码格式

1、BCD码 (1)压缩BCD:4位二进制数表示一个十进制数,例如: 0001 0010 --> 12 0001 0011 --> 13 (2)BCD:8位二进制数表示一个十进制数,高四位为0; 00…

caffe-windows编译

#caffe版本:BVLC-caffe-windows # 环境:windows 10\CUDA8.0\cuDNN-v5.1\VS2013 1、GPU计算环境 (1)下载并安装CUDA8.0; (2)下载cuDNN。载后解压会有三个文件夹bin、include、lib。将这三个文…

Tesseract-OCR编译及ViewerDebugging使用

OCR(Optical Character Recognition):光学字符识别,是指对图片文件中的文字进行分析识别,获取的过程。 一、简介 Tesseract-OCR依赖图像库Leptonica。 Leptonica是一个开源的图像处理和图像分析库。它主要包括的操作有:位图操作、…