以下技术在盈鹏飞嵌入式的A40I/T3核心板(CoM-X40I)和主控板(SBC-X40I)上经过验证,欢迎 交流! CoM-X40I核心板和SBC-X40I主板见下图:

全志allwinner tina linux没有bt_test 全志t2_固件


全志allwinner tina linux没有bt_test 全志t2_嵌入式硬件_02


全志allwinner tina linux没有bt_test 全志t2_linux_03


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 工具文件:

配置文件

Boot0/uboot文件

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. 前言

打包的好处: 其他平台是将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 工具文件:

配置文件

Boot0/uboot文件

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主要功能是:

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