对于一个android手机用户加软件工程师刷机而不知道它的内部原理,那是很痛苦的本着学习的心态,还是去研究了一番
首先,你要知道智能手机就是一台小电脑如果你恰好用的是linux系统,那可以说两者在系统层面没有区别因为android就是linux内核外加java虚拟机。当你开机时机器首先要启动,CPU最先执行的一段程序就昰BootLoader这和电脑上的BIOS是一个玩意儿。它所做的事情就是初始化硬件CPU时钟之类的,以及加载内核文件BootLoader可以分为两个阶段。在阶段一做了┅些初始化,在阶段二如果发现按键有特殊的组合,比如htc g2是回退键和开机键就会进入开机反复fastboott模式。这里要说的是内核还没有加载,所以更谈不上多进程任务调度之类的概念机器只是在顺序执行一条条的指令。
BootLoader既然要做硬件初始化之类的必然和硬件相关,所以它嘚代码并非通用的不同的硬件需要不同的BootLoader代码,各大厂商可能都有自己的并且加入开机画面之类的。最常听说的是uboot和hboot后者是htc的bootloader。我們常说的刷机是不会动bootloader的,只会动这之后的系统部分
再说开机反复fastboott,它是bootloader后期进入的一个特殊阶段可以通过数据线与电脑连接,然後在电脑上执行一些命令如刷系统镜像到手机上。开机反复fastboott可以理解为实现了一个简单的通信协议接收命令并更新镜像文件,其他什麼的干不了
如果没有进入开机反复fastboott,bootloader继续执行如果又发现有特殊的按键组合,比如htc g2上是home键和开机键则会进入recovery模式。分析recovery.img镜像文件就會发现它里面包含了一个kernel以及一个可执行程序recovery,以及一些初始化文件从某种意义来说,这就是一个小型操作系统和正常启动进入的系统的kernel是一样的,只是init及之后干的事情不同这里的kernel和我们常说的linux内核还是有差异的,linux内核是包括kernel以及调度器内存管理等除显示界面外完整系统而kernel只是指内核init进程启动前的那一段逻辑。
在recovery模式下会加载了部分文件系统,所以才可以读sdcard中的update.zip进行刷机当然,也可以清除cache和鼡户数据
讲到这里,我想说的是既然recovery是一个小型操作系统并且有手机这样现成的设备,我们可以基于它做些有趣的事比如移植网络協议及无线网络连接逻辑,然后开发一个命令行版的新浪微博客户端这样就可以用自己改造的系统发微博了。当然先改一个hello world版的recovery再说。也许还可以基于这些实践写一些帮助学习操作系统的教程