篇一(system/core/init/init.c):

对Android感兴趣的朋友都知道,Android系统是建立在Linux内核之上的。那么Linux内核和Android什么关系?Linux内核是怎样引导起Android呢?本文进行简单的描述。

Android虽然建立在Linux内核之上,但是他对内核进行了一些扩展,增加了一些驱动。比如Binder,loger等等驱动。可以拿Android内核代码和其Baseline版本进行对比。可以看到Android对Linux内核的所有扩展。

熟悉Linux启动的朋友知道,首先Linux引导完成之后,会启动用户态的init进程(pid为0),这个进程在整个系统运行过程中起着非常重要的作用,如果你对init进程不了解请查相关资料。init完成系统的初始化工作,然后进入shell,接收用户的输入

Android启动也没有什么神秘的,就是用自己的init进程替换了Linux内核的init进程,完成自己初始化工作(设备,文件系统等等初始化)。然后启动自己的虚拟机,程序等等的东西。Android的init进程的代码位于system/core/init/init.c下面,可以去查看其源码,来了解Android启动详细流程。Android启动流程的资料网上已经比较多,这里就不赘述了。

可以看到移植Android过程中,调试init非常重要。因为所有和硬件平台相关的东西都这里初始化,所以init进程有可能需要移植或者配置。其他的进程都是和硬件无关的,理论上不需要修改就应该能够运行起来。

经过上面的描述可以看出,Android的init进程起着一个承上启下的作用。承上——自动由Linux内核调用;启下——初始化Android各种设备和资源,然后启动Android相关的进程,直到引导起整个Android系统

最新文章

  1. ABP(现代ASP.NET样板开发框架)系列之4、ABP模块系统
  2. ps aux和ps ef的区别
  3. golang.org/x/mobile/exp/gl/glutil/glimage.go 源码分析
  4. HttpModule在Web.config的配置和动态配置
  5. HDU 1385 Minimum Transport Cost (Dijstra 最短路)
  6. 第三次阅读赵炯博士的《linux内核代码完全注释》:序
  7. MVC 中与链接相关的辅助方法(Html.ActionLink,Html.RouteLink , Url.Action , Url.Content ,Url.RouteUrl)
  8. Hadoop2.2编程:新旧API的区别
  9. Spring中用@Component、@Repository、@Service和 @Controller等标注的默认Bean名称会是小写开头的非限定类名
  10. JS---控制键盘事件
  11. cat/tac/more/less 命令详解
  12. Latex "Error: Extra alignment tab has been changed to \cr. "
  13. CentOS 7 MariaDB-MMM
  14. ACM总结——2017ACM-ICPC北京赛区现场赛总结
  15. 数的全排列 dfs深度优先搜索
  16. MySQL日志详细说明
  17. 在nginx的http模块下面,一个server就可以看做一个站点,配置形式大概是这样的:
  18. scala case类
  19. linux磁盘分区详解【转】
  20. 洛谷 P5078 Tweetuzki 爱军训

热门文章

  1. VUE学习总结
  2. Xcode6 部署iphone4s出现的问题 No architectures to compile for
  3. 自定义DataSet
  4. LeetCode_Two Sum
  5. Wow! Such Doge!---hdu4847(字符串水题)
  6. git学习------>从SVN迁移到Git之后,项目开发代码继续在SVN提交,如何同步迁移之后继续在SVN提交的代码到Git?
  7. SpringBoot-模板渲染
  8. HDU1115&&POJ1385Lifting the Stone(求多边形的重心)
  9. SCADA必备函数 实际测试。
  10. python 之时间模块 time