主要介绍一下源码编译输出的几个重要的镜像文件,这里把bootloader源码和Linux内核源码的编译输出也算在其中,由于毕竟Android系统缺乏了这两个部分在设备上也是跑不起来的。linux
1. MLO, u-boot.imgandroid
任何操做系统的启动,都离不开“引导程序”,好比桌面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.net
因为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等,这里就不详细讲解了。
结束语
免费学习更多精品课程,登陆乐搏学院官网http://h.learnbo.cn/
或关注咱们的官方微博微信,还有更多惊喜哦~
本文出自 “Jhuster的专栏” 博客,请务必保留此出处http://ticktick.blog.51cto.com/823160/1655761