Linux 引导过程
——疯壳·嵌入式平板开发

Linux 内核与 Android 系统 linux 内核有什么区别? 
  什么是引导装载程序?
  什么是 Zygote? 
  什么是 init.rc?
  什么是系统服务?

第一节 Android 启动步骤


图1

第二节 引导程序 --- Boot Loader
  源代码目录:$(dir)\rk3128-source\u-boot

第三节 内核 --- Kernel
  Android 内核就是 Linux。内核启动时,设置硬件,挂载文件系统,执行第一个应用程序init。

第四节 Init 进程
  init 是第一个进程,可以说它是 root 进程或者所有进程的父进程。init 进程有两个责任, 一是挂载目录,比如/sys、/dev、/proc,二是运行 init.rc 脚本。对于 init.rc 文件,Android 中有特定的格式以及规则。在 Android 中,我们叫做 Android 初始化语言。
  init.rc 位于目录$(dir)\rk3128-source\device\rockchip\rksdk
  Android 初始化语言由四大类型的声明组成,即 Actions(动作)、Commands(命令)、Services(服务)、以及 Options(选项)。
  Action(动作):动作是以命令流程命名的,有一个触发器决定动作是否发生。
语法:
  on <trigger>

<command>

<command>

<command>

Service 是 init 加载的和是退出重启的(可选)程序。Service 具有如下格式:
  service <name> <pathname> [ <argument> ]*

<option>

<option>

...
  Options(选项)
  选项是对服务的描述,它们影响 init 进程如何以及何时启动服务。
  来看看默认的 init.rc 文件。这里只列出了主要的事件以及服务。
Table


图2
  在这个阶段你可以在设备的屏幕上看到“android”logo 了。

第五节 Zygote
  在 Java 中,不同的虚拟机实例会为不同的应用分配不同的内存。但如果 Android 系统为每一个应用启动不同的 Dalvik 虚拟机实例,就会消耗大量的内存以及时间。因此,为了克服这个问题,Android 系统创造了”Zygote”,Zygote 让 Dalvik 虚拟机共享代码、低内存占用以及最小的启动时间成为可能。

第六节 系统服务或服务
  完成了上面几步之后,运行环境请求 Zygote 运行系统服务。系统服务同时使用 native以及 java 编写,系统服务可以认为是一个进程,系统服务包含了所有的 System Services。
  Zygote 创建新的进程去启动系统服务,可以在 ZygoteInit 类的”startSystemServer”方法
中找到源代码。

第七节 引导完成
  一旦系统服务在内存中跑起来了, Android 就完成了引导过程。 在这个时候“ACTION_BOOT_COMPLETED”开机启动广播就会发出去。

第八节 实验
  init.rc 中增加一条启动参数 setprop fengke.test 100

第九节 实验现象
  系统启动后用 getprop fengke.test 来看是否这个值已经写入


图3

【疯壳·平板教程1】手把手教你做平板电脑-Linux 引导过程相关推荐

  1. Blender图解教程:手把手教你做一个马里奥金币 之 图片转法线贴图法(附模型下载)

    <Blender图解教程:手把手教你做一个马里奥金币 之 比较传统的方法>介绍了一种用Blender制作法线贴图的流程,本文介绍一种更加省事的方法. 步骤 效果图 概要 步骤 1. 建模 ...

  2. Blender图解教程:手把手教你做马里奥问号箱 二 强迫症修复版(附模型下载)

    看完 <Blender图解教程:手把手教你做马里奥问号箱>有强迫症同学反应对最后的结果不能忍.那么老王教大家修复一下.初学的同学可以通过这个例子进一步理解一下什么是UV. 修复前 如果你没 ...

  3. 【疯壳·嵌入式平板开发教程1】手把手教你做平板电脑-Linux 引导过程

    Linux 引导过程 --疯壳·嵌入式平板开发 Linux 内核与 Android 系统 linux 内核有什么区别?    什么是引导装载程序?   什么是 Zygote?    什么是 init. ...

  4. 【疯壳·嵌入式平板开发教程5】手把手教你做平板电脑-触摸屏驱动实验教程

    触摸屏驱动实验教程 --疯壳·嵌入式平板开发 第一节 input 输入子系统简单介绍 --- rockchip_gslX680_rk3168.c 触摸屏驱动注册到 input 子系统中后要遵循的框架结 ...

  5. 【嵌入式开发教程7】手把手教你做平板电脑-音频驱动实验教程

    音频驱动实验教程 --疯壳·嵌入式平板开发       图1      如上图是音频模块 codec 和 cpu 连接框图,主要由三部分组成:     I2C 总线 - cpu 通过它实现对 Code ...

  6. 【嵌入式开发教程6】手把手教你做平板电脑-触摸屏驱动实验教程

    触摸屏驱动实验教程 --疯壳·嵌入式平板开发 第一节 input 输入子系统简单介绍 --- rockchip_gslX680_rk3168.c 触摸屏驱动注册到 input 子系统中后要遵循的框架结 ...

  7. 【嵌入式开发教程9】手把手教你做平板电脑-WIFI 驱动实验教程

    WIFI 驱动实验教程 --疯壳·嵌入式平板开发 第一节 电路原理图介绍 下图来源于文档 3128_sdk_a02_20170325.pdf 中第 16 页.   CMD 信号(用于传送命令和反应): ...

  8. 【嵌入式开发教程8】手把手教你做平板电脑-Camera 驱动实验教程

    Camera 驱动实验教程 --疯壳·嵌入式平板开发 第一节 电路原理图介绍 参考文档 3128_sdk_a02_20170325.pdf 中第 17 页. 第二节 Camera 驱动框架及实现 图1 ...

  9. Blender图解教程:手把手教你做一个马里奥金币 之 高模烘焙法(附模型下载 4月23日更新)

    本文是<[手把手带你Godot游戏开发 第二弹]名场面临摹>中马里奥·奥德赛教程的一部分. 文章目录 效果图 1. 低模 2. 高模 3. 烘焙法线贴图 a. 为低模添加材质 b. 设置窗 ...

最新文章

  1. 跟小静读CLR via C#(02)-基元类型、引用类型、值类型
  2. 1D target tensor expected, multi-target not supported
  3. JVM 的内存模型及jstat命令的使用
  4. 六个经典的HTML5面试问题奉上,太有用啦!
  5. 云游戏之大冒险:5G,等还是不等 | 专访云格致力陈浩
  6. 现在抖音这么火,那么你知道如何用CSS实现抖音字体?
  7. Qt工作笔记-QCustomPlot让曲线动起来
  8. python自动补全_Windows 下python的tab自动补全
  9. python培训价目表-python培训费用多少?
  10. 文本、词相似度论文阅读笔记
  11. android页面监听扫描枪,Android监听扫描枪内容(二)
  12. linux 显卡驱动 960,【Ubuntu】Ubuntu16.04安装GTX960M显卡驱动
  13. 点击评论区让键盘弹起uni-app
  14. 非科班程序员逆袭:一个被称阿里“码神”,另一个颠覆软件生态
  15. Python实践:文件读写功能之txt文本
  16. 基于matlab系统辨识工具箱,基于matlab的识别系统
  17. python交通流预测算法_基于机器学习的交通流预测技术的研究与应用
  18. 用单片机控制步进电机
  19. Python requests +PrettyTable 查询高铁或者动车票
  20. 漏刻有时API接口实战开发系列(2):萤石工作室Ezviz Studio设置摄像头的相关参数

热门文章

  1. docker(3): 网络
  2. iOS 加载本地HTML文件,图片没显示出来的问题
  3. 如何做好项目管理,做好人人都是项目经理
  4. 项目经理和程序员之间的关系
  5. “AI 终有可能消灭人类!”
  6. java短信接口源码_java免费短信接口开发源码
  7. 三种方法实现scp拷贝时无需输入密码
  8. 2020/7/30 渐入佳境
  9. 游戏框架其八:2D图像 { Sprite | Font }
  10. 新家宿舍没宽带,用华为移动路由Pro帮你解决