三、MTK scatter.txt生成过程
MTK的分区相关过程简单来说:
分区生成工具ptgen(alps/device/mediatek/build/build/tools/ptgen)
根据alps/device/mediatek/build/build/tools/ptgen/MT6765目录下的分区表文件生成scatter.txt
然后MTK的烧录工具需要选两个东西,一个DA.bin,一个就是这个scatter.txt
在MTK样机接上usb线开机时,在preloader阶段会进行usb握手操作,如果握手成功,就会通过usb下载DA.bin到样机上,然后样机跳到DA.bin继续跑
DA.bin的主要功能就是根据scatter.txt来烧录分区镜像(可能会进行verify)
(一)csv分区表文件各列含义
对于DH30项目,用的平台是MT6762(MTK MT6762和MT6765很多是一样的),采用的是AB分区,
所以分区表文件是
device/mediatek/build/build/tools/ptgen/MT6765/partition_table_MT6765_emmc_ab.csv
下面说明一下csv分区表文件各列的含义,每一列可供设置项
分区表文件分单分区
对于单分区,分区表文件就是
alps/device/mediatek/build/build/tools/ptgen/MT6765/partition_table_MT6765_emmc.csv
对于AB分区,分区表文件就是
alps/device/mediatek/build/build/tools/ptgen/MT6765/partition_table_MT6765_emmc_ab.csv
分区表文件中从左到右有这些列:
Partition_Name:分区名
Type:分区类型,常见Raw Data和ext4
Size_KB:分区大小
, :分区表中一般是写的和Size_KB一样,MTK目前没用到,不用管
Region:
Region这一列只有preloader可以设置为EMMC_BOOT1_BOOT2,其他分区都必须设置为EMMC_USER
Group:
这个我看除了product_a/b,vendor_a/b,system_a/b是main外,其他分区都是空
设为main表示这个分区要在动态分区中,目前MTK内部只有main和空配置
Reserved:Y表示此分区放在EMMC的最后面
Download:是否下载镜像到这个分区
Download_File:
如果要下载镜像,下载的镜像名或者perloader可以写AUTO,否则写NONE
OTA_Update:
OTA是over the air空中下载的缩写,意思就是不借助usb线进行更新,
而是通过网络等方式来进行更新
比如我们手里系统里面的检查更新就是OTA的一种
EmptyBoot_Needed:
EmptyBoot_Needed代表xflash feature,一种空板烧录方式。
如果不使用flashtool进行烧录的话,MTK会提供专门的flash烧录工具进行烧录,perloader判断如果是用flash烧录工具烧录的话,就会烧录这一列标为Y的分区
目前我们还没有听说过这种不使用flashtool工具进行烧录的项目
FastBoot_Erase:
是否允许fastboot擦除,想fastboot擦除这个分区,必须这里设为Y
, :没用到,不用管
FastBoot_Download:
是否允许fastboot下载,想fastboot烧录这个分区,必须这里设为Y
, : 没用到,不用管
Operation_Type:
flashtool烧录会用到,可供设置的有五个选项
(1)'BOOTLOADERS' :preloader, 用于安全下载
(2)'PROTECTED' :
protect partition, 用fireware upgrade方式烧录全擦前会将
这个分区备份出来,全擦烧录后会再把备份烧进去,保证分区数据不丢失
但注意firware upgrade方式备份的分区,分区大小不能改
(位置可以改)。
(3)'BINREGION':
和上面的PROTECTED差不多,nvram备份分区,用fireware upgrade方式烧录全擦前会将这个分区备份出来,全擦烧录后会再把备份烧进去,保证分区数据不丢失
(4)'AUTO':正常分区,fireware upgrade烧录会擦除这个分区
(5)‘RESERVED’:
保留分区,与“保留”项的含义相同。
此分区可能会在下载/固件升级中被覆盖或更新。
注:
Fireware upgrade烧录方式
(二)ptgen生成scatter.txt
从上面的过程就可以知道ptgen就是根据分区表文件生成scatter.txt,
但ptgen不是简单的将分区表csv文件翻译成scatter.txt,它会对分区表数据做一些检查,甚至会更改分区表数据。
很多时候分区相关的修改报错或者修改不成功都与ptgen这个工具有关,所以我们还是有必要研究一下ptgen这个工具的
鉴于网上基本上没有对ptgen工具的详细说明(反正我没找到),ptgen这个工具是用perl语言写的。我学了下perl语言,对ptgen这个工具进行了详细的分析。在分析的过程中,知道了一些细节和调试的手段。现在分享出来。
(perl语言学习教程:https://www.runoob.com/perl/perl-tutorial.html)
下面以S96769BA1这个项目来分析ptgen这个工具
1、如何调用到ptgen分区生成工具
首先在device/wingtechsh/S96769BA1/BoardConfig.mk里面
# ptgen
MTK_PTGEN_CHIP := $(shell echo $(TARGET_BOARD_PLATFORM) | tr '[a-z]' '[A-Z]')
-include device/mediatek/build/build/tools/ptgen/$(MTK_PTGEN_CHIP)/ptgen.mk
这里就MTK_PTGEN_CHIP指定了我用的平台,对于DH30是MT6762,
但是MTK是把MT6762和MT6765的配置放在一起的(可能是两个太像了)
$(shell echo $(TARGET_BOARD_PLATFORM) | tr '[a-z]' '[A-Z]')后面的tr是替换,意思转换为大写
所以这个的MTK_PTGEN_CHIP就是MT6765,
所以device/mediatek/build/build/tools/ptgen/MT6765/ptgen.mk这个mk文件就会被调用
下面再来看ptgen.mk这个mk文件的内容
...
#Murphy.liu note:ptgen是用perl脚本语言写的,指定perl.pl路径,和当前ptgen.mk在同一个目录下
MTK_PTGEN_PERL := device/mediatek/build/build/tools/ptgen/$(MTK_PTGEN_CHIP)/ptgen.pl
#Murphy.liu note:分区表文件路径,和当前ptgen.mk在同一个目录下
MTK_PTGEN_XLS := $(wildcard device/mediatek/build/build/tools/ptgen/$(MTK_PTGEN_CHIP)/*.xls)
#Murphy.liu note:运行ptgen命令,可以看到先指定了一堆配置,然后perl device/mediatek/build/build/tools/ptgen/MT765/ptgen.pl执行这个perl脚本
#下面这一堆对于DH30Q相当于相当于
#MTK_PTGEN_COMMAND := \