博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android内核开发:系统分区与镜像文件的烧写
阅读量:6453 次
发布时间:2019-06-23

本文共 1564 字,大约阅读时间需要 5 分钟。

hot3.png

玩过刷机的朋友肯定对fastboot这个工具并不陌生,它是 SDK中提供的一种开发工具,支持通过USB线将手头的镜像文件更新/烧录到Android设备中,常用的fastboot烧录过程如下:

 

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中,地址如下:

 

 

对于任何标准的Android设备而言,它都会对内部存储空间进行分区,不同的设备的分区大小都不一样,但通常都会有如下几个分区:

 

1

2

3

4

5

6

    /boot

    /system

    /recovery

    /data

    /cache

    /misc

 

各个分区分别对应着各个镜像文件在设备中实际的存储位置。下图所示,是ADP1/G1手机的系统分区划分:

 

 

由此我们知道了,其实fastboot命令执行的流程,就是根据命令参数,将新的镜像文件拷贝到指定分区的过程,其实并不复杂。

 

那么,不支持fastboot协议的设备一般是如何烧录Android镜像的呢?

 

其实上面也提到了,fastboot协议是工作在bootloader之中的,在没有fastboot出现之前,系统的镜像烧写通过bootloader也是完全可以完成的,这里通过示例简单演示一下内核烧写过程 。

 

通常在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连接到电脑上,覆盖对应分区里面的镜像文件就可以了。

 

结束语

 

免费学习更多精品课程,登录乐搏学院官网

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

 

本文出自 “” 博客,请务必保留此出处

转载于:https://my.oschina.net/learnbo/blog/789647

你可能感兴趣的文章
flutter进行自动编译操作步骤
查看>>
4.6 直接插入排序法
查看>>
我的毕设总结所用的技术和只是要点 基于stm32F4的AGV嵌入式控制系统的设计
查看>>
盘点国内外那些有野心的BI公司
查看>>
JMeter—断言
查看>>
C++的新类创建:继承与组合
查看>>
m5-第9周作业
查看>>
odoo 权限设置
查看>>
asp操作access提示“无法从指定的数据表中删除”
查看>>
git bash 风格调整
查看>>
997D Cycles in product
查看>>
bzoj4589 Hard Nim
查看>>
java实现pdf旋转_基于Java实现PDF文本旋转倾斜
查看>>
java二维数组内存模型_C++二级指针第二种内存模型(二维数组)
查看>>
java static import 与 import_Java中的import和static import语句之间有什么区别?
查看>>
python time库3.8_python3中datetime库,time库以及pandas中的时间函数区别与详解
查看>>
java 代替Python_Java总是“沉沉浮浮”,替代者会是Python?
查看>>
贪吃蛇java程序简化版_JAVA简版贪吃蛇
查看>>
poi java web_WebPOI JavaWeb 项目 导出excel表格(.xls) Develop 238万源代码下载- www.pudn.com...
查看>>
java 顶点着色_金属顶点着色器绘制纹理点
查看>>