我正在开发一个项目,要求我使用专有协议将固件文件(.aff)加载到嵌入式设备。 Google表明aff代表增强文件格式,但我不确定这意味着什么。
答案 0 :(得分:0)
假设格式是“增强的固件文件”,如果你谷歌是,你将获得this page。此文件似乎正在加载一个aff文件并将其上传到控制器。
您可以看到该文件以css_header
结构开头(如果我没有记错,则为128字节),然后包含modulus
,signature
等内容,这意味着实际的固件数据从相当远的偏移处开始(距文件开始908个字节):
struct css_header {
u32 module_type;
u32 header_len;
u32 header_version;
u32 module_id;
u32 module_vendor;
u32 date; /* BCD yyyymmdd */
u32 size; /* in DWORDs */
u32 key_size; /* in DWORDs */
u32 modulus_size; /* in DWORDs */
u32 exponent_size; /* in DWORDs */
u32 reserved[22];
};
#define KEY_SIZE 256
#define MU_SIZE 8
#define EXPONENT_SIZE 4
/* the file itself */
struct augmented_firmware_file {
struct css_header css_header;
u8 modulus[KEY_SIZE];
u8 exponent[EXPONENT_SIZE];
u8 signature[KEY_SIZE];
u8 r2[KEY_SIZE];
u8 mu[MU_SIZE];
u8 firmware[]; // <--- 908 B from struct start
};
我建议使用十六进制编辑器打开aff文件(如上面评论中提到的HxD),然后搜索使用串口嗅探器捕获的字节,以查看它们在此文件中的位置。如果上述数据正确,您应该在文件中找到实际的固件数据。
答案 1 :(得分:0)
我缺少的关键信息是我正在使用的文件实际上是一个SRecord。一旦我理解了SRecord的格式,我就能够从记录中解析出正确的数据并成功加载固件映像。