主要介绍一下源码编译输出的几个重要的镜像文件,这里把bootloader源码和Linux内核源码的编译输出也算在其中,因为毕竟Android系统缺少了这两个部分在设备上也是跑不起来的。

1. MLO, u-boot.img

任何操作系统的启动,都离不开“引导程序”,比如桌面Windows系统的BIOS、桌面Linux系统常用的是Grub,而在嵌入式系统中,这个引导程序通常叫做“bootloader”,它通常由处理器的片上ROM中的引导代码和u-boot两部分组成(当然,也有其他类型的bootloader,这里以最常用的u-boot为主)。

这些“引导程序”的功能,通常都是完成硬件系统的检测和配置,然后到指定的位置去“加载并运行”操作系统内核,这个加载过程就是把指定的内核镜像文件解压到内存DDR中去,然后运行内核代码,并交出CPU控制权。

由此我们知道,Android系统的启动,第一个最重要的文件就是:“bootloader”。“bootloader”是与操作系统无关的,无论设备上跑的是Linux还是Android,都需要“bootloader”来启动引导。

关于“bootloader”,需要解释的是:处理器片上ROM中的引导代码通常由处理器厂商实现,我们无法获取也无法修改,u-boot则是具体的开发板/设备厂商实现,如果我们自己设计Android硬件设备,则也需要去修改标准的u-boot代码适配我们自己的硬件模块。

u-boot编译输出文件有2个,一个是MLO,另一个是u-boot.img,因此,对于很多Android开发板而言,一定存在一个boot分区(通常是fat32格式),该分区里存放有MLO和u-boot.img这两个重要的文件。

2. uImage

由于Android系统是基于Linux内核的,因此,与嵌入式Linux启动过程一样,“bootloader”完成硬件检测和初始化配置后,第一步要做的也是加载并运行Linux内核镜像,因此,在Android设备启动过程中,除了MLO和u-boot.img文件外,另一个最重要的文件就是内核镜像uImage文件了。

注:Linux内核编译成功后,会在arch/arm/boot/目录下生成zImage文件,通过mkimage命令,给zImage文件加上了64个字节的数据头得到uImage文件,这样才能被u-boot识别并正确引导。

3. ramdisk.img

在Linux内核启动时,首先去创建虚拟的根文件系统,然后在指定位置寻址真正的根文件系统镜像并加载到内存中,然后执行init可执行程序完成系统启动过程。

对于嵌入式Linux系统而言,一般需要用busybox等工具专门创建一个根文件系统镜像,而Android源码中已经实现了一个根文件系统,即ramdisk.img,Android内核系统启动时会首先加载ramdisk.img作为根文件系统,然后再执行init程序,解析init.rc脚本,挂载系统其他分区、开启各个进程和服务等。

因此,Android系统启动第三个必不可少的文件即ramdisk.img文件,它是Android系统的根文件系统镜像。

4. boot.img

Android系统中,通常会把zImage和ramdisk.img打包到一起,生成一个boot.img镜像文件,放到boot分区,由bootloader来引导启动,其启动过程本质也是和分开的uImage&ramdisk.img类似,只不过把两个镜像按照一定的格式合并为一个镜像而已。

bootloader如何知道去哪加载Linux内核(zImage)和根文件系统(ramdisk.img)呢?通常是由命令行参数传入bootloader程序,或者在bootloader代码中给出启动参数配置文件的路径,具体的原理可以去参考bootloader启动Linux内核相关的文章分析,这里就不做详细介绍了。

5. system.img

前面我们提到的镜像如“bootloader”,“Linux Kernel”,“文件系统”都是不包含Android系统的核心文件,那么,真正的Android操作系统核心部分在哪呢?其实就位于system.img中,它包含了Android系统的firmware、用户界面、一系列的预编译应用等等,会在内核启动后被挂载到/system分区。因此,它也是Android系统启动必不可少的镜像之一。

6. userdata.img

前面介绍的system.img镜像中包含的都是Android系统级别的数据,而“用户”的“出厂”数据则都被放到了userdata.img镜像中了,它会被挂载到文件系统的/data分区,用户新存储的数据、安装的程序均会被放置到这个分区中,如果擦除这个分区,本质上则等同于手机恢复了出厂设置,它也是Android系统启动必不可少的镜像之一。

7. 其他的镜像

前面介绍的几个都是Android系统启动涉及到的最重要的几个镜像文件,当然,编译输出还有其他的几个文件包括:用来缓存最频繁访问的数据和应用的cache.img,用来恢复系统时使用的recovery.img等,这里就不详细讲解了。

结束语

或关注我们的官方微博微信,还有更多惊喜哦~

来源:oschina

链接:https://my.oschina.net/u/2920551/blog/790320

android内核编译教程,Android内核开发:系统编译输出的镜像文件相关推荐

  1. 小龟视频APP-插件打包-v1.6.x反编译教程及未加固apk包ios最新版文件分享

    1.先爆破安卓签名,工具:MT管理器,百度自行下载 2.搜索getcertsign(一般在285之间都能看到)如下图: 3.添加return-void 然后保存返回回到首页进行APK签名,就ok了 这 ...

  2. win10无法装载iso文件_Win10系统怎么安装iso镜像文件 Win10系统安装iso镜像文件方法...

    Win10系统怎么安装iso镜像文件?很多用户想安装iso镜像文件,但在网上下载完iso镜像文件后,却不知道如何进行安装,很是头疼,这该怎么办呢?下面小编就和大家分享下Win10系统安装iso镜像文件 ...

  3. win10无法装载重装系统iso文件_windows10系统如何安装iso镜像文件

    最近有win10系统用户到本站咨询这样一个问题,就是在网上下载iso镜像文件之后,想要对其进行安装,可是却不知道要怎么安装iso镜像文件,针对这个问题,小编这就给大家讲解一下windows10系统安装 ...

  4. 小白重装系统小白必看——镜像文件选择

    有很多人问我,重装系统怎么去下载镜像文件,为什么下载的镜像文件安装完附带这么多的软件,今天教大家怎么去选择镜像文件. 目录 MSDN,I Tell You 专注于win7(吻妻官网) MSDN,I T ...

  5. Android内核开发:系统编译输出的镜像文件

    本文是<Android内核开发>的第四篇文章,主要介绍一下源码编译输出的几个重要的镜像文件,这里把bootloader源码和Linux内核源码的编译输出也算在其中,因为毕竟Android系 ...

  6. android studio3.5教程,Android Studio 3.5新特性

    版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明. : 在今天(美国时间8月20日)的早些时候,Android Studio(以下简称为AS) 3.5 ...

  7. android导航使用教程,android BottomNavigationView的简单使用教程

    每个android app都有BottomNavigationView导航,本人开发中刚刚使用到了BottomNavigationView,于是按照android developer官网特意做了一个符 ...

  8. android surface使用教程,Android:SurfaceView 的使用(附代码模板)

    前言 摘自<Android群英传> Android提供了View进行绘图处理,View可以满足大部分的绘图需求,但在某些时候也会心有余而力不足.我们知道,View通过刷新来重绘视图,And ...

  9. android 画圆教程,android shap画圆(空心圆、实心圆)

    实心圆: android:shape="oval" android:useLevel="false"> android:width="1dp&q ...

最新文章

  1. ARM 环境下使用azure powershell 从远程blob中拉去vhd 并创建虚拟机
  2. IBM中国CTO程静:现代CTO是怎样炼成的
  3. 使用Capture画原理图
  4. apply的调用 http://bbs.51js.com/thread-82017-1-3.html
  5. Mysql的操作应用
  6. 7、调用存储过程和函数
  7. 【每周CV论文推荐】 初学高效率CNN模型设计应该读的文章
  8. Validation of XML with XSD
  9. 您属于哪个版本的程序员[转]
  10. php中把美国时间转为北京时间的自定义
  11. mysql命令参数_MySQL命令行参数完整版
  12. 使用EasyExcel导入导出Excel报表-JAVA解析Excel工具
  13. Oracle IMP数据时报20001错误
  14. (54)FPGA条件选择有优先级(if-else)
  15. idea创建springboot项目+mybatis_从spring boot项目创建到netty项目过渡1
  16. 关于为什么说OLTP必须要求变量绑定而OLAP不应该绑定变量的原因
  17. pip安装包报错Could not find a version that satisfies the requirement pymysql (from versions: none)
  18. 基于SpringBoot实现简易的单点登录系统(提供gitee源码)
  19. 无线网卡代理服务器连接失败怎么办,电脑用无线网卡连不上网的解决方法
  20. 《前端》阿里字体库iconfont使用方法

热门文章

  1. Div滚动条定位设置
  2. 世卫组织健康食品排行榜:健康肉类减为三种
  3. 菜鸟学做seo全套教程
  4. 使用PDF猫怎么将PNG图片转化成JPG格式图片?
  5. macd的python代码同花顺_同花顺资金版MACD(源码 副图 贴图)(图文)
  6. 电竞陪玩app定制开发业务是怎样满足市场需求的?
  7. 【人工智能】【Java 】【微信支付】【架构高性能网站】
  8. vue.js鼠标滑动事件
  9. SyncFusion 的免费电子书
  10. python中字符移位加密_Python加密器(字母表中的移位)