LuaDB 文件格式#

LuaDB 并非数据库, 而是一种广泛用于LuatOS固件的文件打包格式.

其作用相当于一个只读文件系统.

文件格式定义#

typedef struct header_tld {
    uint8_t type;
    uint8_t len;
    uint8_t data[len]; // 长度取决于前一个len值
}header_tld_t;

typedef struct file_tld {
    uint8_t type;
    uint32_t len;
    uint8_t data[len];
}file_tld_t;

typedef struct luadb {
    header_tld_t[] headers;
    file_tld_t[] files;
}luadb_t;

header_tld.type的取值及含义#

  • 0x01 文件头 len固定为4, 值为 0xA5 0x5A 0xA5 0x5A, 固定为头部区的第一个TLD

  • 0x02 版本号 len固定为2, 值为 0x00 0x02

  • 0x03 头部长度 len固定为4, headers的总长, uint32_t

  • 0x04 文件数量 len固定为2, 文件区的数据数量, uint16_t

  • 0xFE 校验值 len固定为2, CRC16. 这是头部区的最后一个TLD

虽然从定义上非0x01/0xFE的位置可以随意, 但实际实现通常都是按以上列出的顺序给出.

file_tld.type的取值及含义#

  • 0x01 魔数, len 固定为4, 值为 0xA5 0x5A 0xA5 0x5A

  • 0x02 文件名 len不固定, 值为文件名数据

  • 0x03 文件数据长度 len的数据长度为4, 这点与其他不同. 内容是文件数据的长度, uint32_t, 然后是文件数据

  • 0xFE 校验值 len固定为2, CRC16

特殊约定#

  • 文件区的末尾, 会是一个名为 “.airm2m_all_crc#.bin”, 内容是当前文件数据之前的所有数据的md5的hex值.

格式的固定限制#

  • 文件数量限制在255个文件