hdf文件时逻辑工程师交给驱动工程师工作 的最重要的文件,但是有时候我们需要手动修改hdf文件,这样子驱动工程师不用再手动修改内部内容了。
首先想到的是hdf文件是一个压缩包,直接解压,然后修改内容,最后再压缩就行了,但是这样子是有问题的,因为sdk读进去hdf文件时会做一个校验,猜测vivado导出的时候,会对hdf文件做一个处理。
所以我找了一下hdf文件产生的过程:
.hdf----->.sysdef---->package of hwdef & bitfile & bmm file;
.hwdef---->package of psu_init.c , psu_init.h......;
即hdf文件时sysdef文件的一个copy(猜测加了一些头和尾信息),sysdef文件是hwdef,bitfile,bmm文件打包后的文件,hwdef文件是psu_init.c....的打包文件,上面这些打包及copy过程均可以用vivado中的tcl命令产生,所以如果要修改psu_init.c......中的文件,那么重点就是如何修改一个vivado识别的hwdef文件,然后试了一种方法是可以的(这里用7zip解压软件为例):
1.将vivado工程写impl下的.hwdef文件提取到当前目录,然后删除掉解压之前的hwdef文件,然后修改内容;
2.然后选中当前目录中上一步解压出来的文件和修改的文件,添加到*.zip压缩,压缩后修改zip文件为hwdef文件;
3.最后vivado tcl下输入
write_sysdef -hwdef "d:/system_wrapper.hwdef" -bitfile "d:/system_wrapper.bit" -file "d:/system_wrapper.sysdef"
从而产生sysdef文件
file copy -force d:/system_wrapper.sysdef d:/system_wrapper.hdf
从而产生一个sdk导进去没有问题的hdf文件。
还需要补充的内容是hdf各个文件的作用。
hdf文件内容有
1.psu_init.tcl,用于debug模式;
2.psu_init.c,用于FSBL;