打包Kfpkg固件

K210 的固件包主要有两种格式: .bin.kfpkg.kfpkg可以包含多个.bin文件或者模型文件。

这里介绍如何制作kfpkg文件以及使用

烧录 .bin 或者 .kfpkg 文件

烧录.bin.kfpkg文件只需要使用kflash进行烧录就可以了,两者使用起来没什么区别,烧录方法参考MaixPy 的文档

创建自己的 .kfpkg 文件

.bin文件是固件内容,作为参数传给烧录软件,软件会默认烧录到flash开头,完成后重启即可运行;

但是有时候我们需要烧录其它二进制文件到flash,比如烧录 模型、文件系统 或者自己定义的其它数据,这时需要指定烧录的地址,光是 .bin(二进制) 文件烧录工具不知道我们想把数据烧录到flash的哪里,打包一个.kfpkg格式的文件则是为了实现这个目的

kfpkg由3部分组成:

flash-list.json 文本文件,.bin文件列表以及烧录地址等信息
*.bin 固件
*.* 其他文件(二进制文件)

比如我们想同时下载名为XXX.bin的固件,以及YYY.bin的其它文件到Flash0xA00000地址,则需要写一个 flash-list.json 文件,内容如下:

{
  "version": "0.1.0",
  "files": [
    {
      "address": 0,
      "bin": "XXX.bin",
      "sha256Prefix": true
    },
    {
      "address": 0x00A00000,
      "bin": "YYY.bin",
      "sha256Prefix": false
    }
  ]
}

注意sha256Prefix选项, 固件需要校验,所以为true, 而其它数据(比如模型数据)不需要,所以为false

最后,将这三个文件(XXX.binYYY.binflash-list.json)压缩成zip文件,然后改后缀名为.kfpkg 即可被烧录工具识别,并按照指定地址烧录到flash。

当然,具体的文件个数看自己的需求了

注意

如果你手头现在已经有一个 kfpkg 文件,它是可以使用kflash直接下载到开发板的,下载到哪些地址在文件中已经指定了,不需要再次打包。比如:

有一个只包含模型face.kmodel的文件 model.kfpkg, 有些用户错误地认为这个文件应该和固件firmware.bin一起被放到一个新的new.kgpkg里面,这样的做法是错误的!!
正确的做法是:

  • 可以直接使用kflash 先下载firmware.bin,然后再下载model.kfpkgfirmware.bin会下载到地址0x00000, 而模型文件会下载到model.kfpkg 里面指定的地址

  • 或者先将model.kfpkgzip格式解压,得到face.kmodel,然后按照上面的方法把firmware.binface.kmodel文件一起打包成一个new.kfpkg文件,然后使用kflash下载这个new.kfpkg,固件和模型会按顺序下载到flash

发表评论