全志平台编译和打包系统(2)打包系统

free-jdx 2020-09-28 16:42:40 9419
1. 前言

打包的好处:
其他平台是将kernel/uboot/rootfs编译好后直接分开烧写到flash中,分开的话必然需要用户在烧写的时候,指定烧写的bin文件。把这些整合到一个固件文件中的话,在烧写这些到flash的时候会自动去固件里面搜寻需要的内容,这样对用户更透明。

打包脚本为lichee/tools/pack/pack,固件打包主要做3件事:

  • 将需要的资源文件和二进制文件拷贝到指定目录(lichee/tools/pack/out)
  • 对某些文件进行必要的更新操作(如boot0/uboot头部信息等)
  • 将lichee/tools/pack/out目录下的文件按照image.cfg、sys_partition.fex进行打包处理
2. 拷贝文件

贝的文件类型分为几类:工具文件、配置文件、boot0/uboot
工具文件:

split_xxxx.fex    
usbtool_test.fex    
cardscript.fex 制作量产TF卡时指定boot0和uboot烧写到TF卡的位置 
cardtool.fex    
usbtool.fex    
aultls32.fex    

配置文件

common/toc/toc1.fex    
common/toc/toc0.fex    
common/toc/boot_package.fex    
common/dtb/sunxi.fex    
common/imagecfg/image_linux.cfg linux固件配置表,表示生成固件必要哪些部件,当lichee/tools/pack/out目录下没有所有指定的部件时,打包固件将失败 很重要只针对生成linux固件
common/partition/sys_partition_dragonboard.fex 规定了生成dragonboard固件时MBR中分区信息 只针对dragonboard固件
common/partition/sys_partition_linux.fex 固定了生成linux固件时MBR中分区信息 很重要只针对linux固件
chips/${PACK_CHIP}/configs/default/* env.fex android固件的env分区image.cfg android固件配置表env_dragon.fex dragonboard固件env分区 
chips/${PACK_CHIP}/configs/${PACK_BOARD}/*.fex *.cfg
Sys_config.fex 用户配置信息Sys_partiton.fex android固件的分区配置表Test_cofig.fex dragonboard固件的测试配置文件 

Boot0/uboot文件

boot0_nand.fex 有nand驱动的boot0
boot0_sdcard.fex 有mmc驱动的boot0
boot0_spinor.fex 有spinor驱动的boot0
bl31.bin  
scp.bin  
u-boot-spinor-*.bin 经过裁剪,适用于spinor平台的uboot
u-boot-*.bin 普通的uboot
fes1-*.bin usb烧写阶段初始化dram的,类似于boot0
ota相关的boot文件  
3.更新文件

到这里,用户的配置信息还没有放入到编译好的bin文件中。但是系统起来的某些关键部件的配置却在用户配置文件里面,比如dram/emmc/nand等的初始化参数就放在sys_config.fex里面。所有需要将这些信息塞到boot0/uboot头部。

转换配置文件

转换配置主要的脚本代码为:
script sys_config.fex > /dev/nullscript
sys_partition.fex > /dev/null

该脚本将用户易读的.fex文件转为代码易操作的.bin文件。最后就会生成sys_config.bin和sys_partition.bin两个文件,后面boot0和uboot就可以通过标准接口去读取sys_config.bin中用户配置。

更新boot0参数
boot0开机后会被自动从介质中读取到sram中,它主要的功能包括:初始化串口、初始化内存、读取uboot。所以必须将sys_config.fex中串口参数、dram参数、jtag参数以及storage参数写入到boot0中(boot0_file_head_t结构体中定义)

更新uboot参数
和boot0类似,也需将sys_config.fex某些配置值写入到u-boot中。主要包括:dram参数、CPU运行频率和电压、串口配置、工作模式(量产和启动)、存储介质类型(nand/emmc/spinor)、nand GPIO信息、sdcard GPIO信息,在spare_boot_data_head结构体中有详细说明。

生成MBR文件
mbr分区记录了固件中有多少个分区以及每个分区的起始地址和大小。它是使用下面的命令生成的:
update_mbr sys_partition.bin N(N为mbr的份数)
执行完这个命令后,将会生成sunxi_mbr.fex这个文件。

生成env分区文件
uboot优先使用env分区中的环境变量,如果没有env分区,则使用默认环境变量。现在针对camdroid和android平台

4. 生成固件

经过上面的操作后,即可以执行打包固件的操作了
dragon image.cfg sys_partition.fex

Image.cfg主要功能是:

功能1 确定固件的必须组成部件
如果pack/out目录下没有image.cfg中指定的filename存在,则打包固件就会失败
功能2 和sys_partiton配合生成固件索引表

当发生了下面两种情况,将执行固件打包流程:

    (1)在lichee顶层目录执行./build.sh pack
    (2)在android顶层目录执行 pack (可带参数)
声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
free-jdx
红包 9 3 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
free-jdx
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区