Android内核开发:系统分区与镜像文件的烧写
2017-05-02 15:30
573 查看
玩过刷机的朋友肯定对fastboot这个工具并不陌生,它是Android SDK中提供的一种开发工具,支持通过USB线将手头的镜像文件更新/烧录到Android设备中,常用的fastboot烧录过程如下:
这样,就把我们编译输出的镜像文件分别成功更新到Android设备指定的分区去了。
但是你知道它的原理是什么吗?
其实fastboot是Google定义的一种传输协议,它工作在Android设备与PC机两端,就像浏览器常用的HTTP协议一样,需要服务器/客户端同时支持该协议才能完成数据的传递。
Google提供了fastboot协议的定义和源码,需要设备厂商将代码移植到自己设备的bootloader中,并不是所有的Android设备都支持fastboot,因此,我们可能买到的有些开发板的并不支持fastboot,这就需要我们采用其他方式烧录,或者修改bootloader/u-boot源码,让其支持fastboot协议。
Google定义的fastboot协议地址:这里(需要翻墙)
由于AOSP官网被墙,因此我也把该协议定义文本拷贝了一份到我们Github中,地址如下:
https://github.com/Jhuster/AOSP/blob/master/documents/fastboot_protocol.txt
对于任何标准的Android设备而言,它都会对内部存储空间进行分区,不同的设备的分区大小都不一样,但通常都会有如下几个分区:
各个分区分别对应着各个镜像文件在设备中实际的存储位置。下图所示,是ADP1/G1手机的系统分区划分:
由此我们知道了,其实fastboot命令执行的流程,就是根据命令参数,将新的镜像文件拷贝到指定分区的过程,其实并不复杂。
那么,不支持fastboot协议的设备一般是如何烧录Android镜像的呢?
其实上面也提到了,fastboot协议是工作在bootloader之中的,在没有fastboot出现之前,嵌入式系统的镜像烧写通过bootloader也是完全可以完成的,这里通过示例简单演示一下Linux内核烧写过程
。
通常在u-boot启动过程中,会有3秒的停留,在串口终端敲击回车中断u-boot启动内核的过程,这时就可以输入u-boot支持的各种命令与板子交互了,举例如下:
同理,只要清楚存储空间的分区和地址,就能够通过u-boot完成镜像的烧写过程,当然,u-boot是怎么烧录到开发板的呢?这是通过JTAG工具烧写的,这里就不详细论述了。
当然,如果系统是从外接的SDCard启动就更简单了,只需要把SDCard连接到电脑上,覆盖对应分区里面的镜像文件就可以了。
原文转自:乐搏学院http://www.learnbo.com/front/article/cmsIndex
1 2 3 4 5 6 | fastboot flash boot boot.img fastboot flash system system.img fastboot flash userdata userdata.img fastboot flash cache cache.img fastboot flash recovery recovery.img fastboot reboot |
这样,就把我们编译输出的镜像文件分别成功更新到Android设备指定的分区去了。
但是你知道它的原理是什么吗?
其实fastboot是Google定义的一种传输协议,它工作在Android设备与PC机两端,就像浏览器常用的HTTP协议一样,需要服务器/客户端同时支持该协议才能完成数据的传递。
Google提供了fastboot协议的定义和源码,需要设备厂商将代码移植到自己设备的bootloader中,并不是所有的Android设备都支持fastboot,因此,我们可能买到的有些开发板的并不支持fastboot,这就需要我们采用其他方式烧录,或者修改bootloader/u-boot源码,让其支持fastboot协议。
Google定义的fastboot协议地址:这里(需要翻墙)
由于AOSP官网被墙,因此我也把该协议定义文本拷贝了一份到我们Github中,地址如下:
https://github.com/Jhuster/AOSP/blob/master/documents/fastboot_protocol.txt
对于任何标准的Android设备而言,它都会对内部存储空间进行分区,不同的设备的分区大小都不一样,但通常都会有如下几个分区:
1 2 3 4 5 6 | /boot /system /recovery /data /cache /misc |
各个分区分别对应着各个镜像文件在设备中实际的存储位置。下图所示,是ADP1/G1手机的系统分区划分:
由此我们知道了,其实fastboot命令执行的流程,就是根据命令参数,将新的镜像文件拷贝到指定分区的过程,其实并不复杂。
那么,不支持fastboot协议的设备一般是如何烧录Android镜像的呢?
其实上面也提到了,fastboot协议是工作在bootloader之中的,在没有fastboot出现之前,嵌入式系统的镜像烧写通过bootloader也是完全可以完成的,这里通过示例简单演示一下Linux内核烧写过程
。
通常在u-boot启动过程中,会有3秒的停留,在串口终端敲击回车中断u-boot启动内核的过程,这时就可以输入u-boot支持的各种命令与板子交互了,举例如下:
1 2 3 | $ nand erase 0x100000 0x200000 // 擦除掉nandflash指定位置区域的数据 $ tftp 0x80000000 uImage // 通过tftp将内核下载到内存指定位置 $ nand write 0x80000000 0x100000 0x200000 // 把内存中的内核烧写到nandflash指定的位置 |
同理,只要清楚存储空间的分区和地址,就能够通过u-boot完成镜像的烧写过程,当然,u-boot是怎么烧录到开发板的呢?这是通过JTAG工具烧写的,这里就不详细论述了。
当然,如果系统是从外接的SDCard启动就更简单了,只需要把SDCard连接到电脑上,覆盖对应分区里面的镜像文件就可以了。
原文转自:乐搏学院http://www.learnbo.com/front/article/cmsIndex
相关文章推荐
- Android内核开发:系统分区与镜像文件的烧写
- Android内核开发:系统分区与镜像文件的烧写
- Android内核开发:系统分区与镜像文件的烧写
- Android内核开发之四:系统分区与镜像文件的烧写
- 【Android 系统开发】 编译 Android文件系统 u-boot 内核 并烧写到 OK-6410A 开发板上
- Android内核开发之三:系统编译输出的镜像文件
- Android内核开发:系统编译输出的镜像文件
- Android内核开发:系统编译输出的镜像文件
- 【Android 系统开发】 编译 Android文件系统 u-boot 内核 并烧写到 OK-6410A 开发板上
- Android内核开发:系统编译输出的镜像文件
- 【Android 系统开发】 编译 Android文件系统 u-boot 内核 并烧写到 OK-6410A 开发板上
- Android内核开发:系统编译输出的镜像文件
- arm下如何烧写指定分区大小的内核和文件系统
- arm下如何烧写指定分区大小的内核和文件系统
- 1.移植3.4内核-分析内核启动过程,重新分区,烧写jffs2文件系统
- 嵌入式linux烧写内核,文件系统的2种方式
- Android开发:使用Intent打开电话、短信、邮箱、本地文件等系统应用程序整理大全
- uboot从SD卡烧写内核和文件系统
- ndk开发之利用android系统中.so库文件(例:libsqlite.so)
- Android内核开发:如何统计系统的启动时间