为海思u-boot快速生成reg_info.bin文件

    在海思平台的底层开发中,SoC的引脚、时钟的配置是通过一个Excel表格生成的reg_info.bin来实现的,这个reg_info.bin文件是在编译u-boot过程中需要的,可以通过查看最终的u-boot镜像文件的生成过程得知:

为海思u-boot快速生成reg_info.bin文件_第1张图片

    为了快速生成reg_info.bin文件,需要抛弃Excel表格,在编译u-boot的过程中自动生成reg_info.bin,并重命名为.reg,放置在u-boot源码的根目录下。通过查找代码,可以确定reg_info.bin中每16个字节对应一个结构体;当u-boot启动时,会按这些结构体数据来读写Soc的一些寄存器:

为海思u-boot快速生成reg_info.bin文件_第2张图片

    如上图,这个结构体的名称为regentry。在这里我们选择lua语言脚本来实现这一功能。首先,在Windows平台上使用Excel软件生成原始的reg_info.bin:

为海思u-boot快速生成reg_info.bin文件_第3张图片

    查看此reg_info.bin的大小及MD5较验值:

    将该bin文件复制到GNU/Linux主机上,并将其转化为文件文件:

为海思u-boot快速生成reg_info.bin文件_第4张图片

    接下来,就是非常重要的操作,编写LUA语言脚本,并将每行的寄存器配置重写为调用regInfo的Lua函数:

为海思u-boot快速生成reg_info.bin文件_第5张图片

    然后,就可以使用lua解析器生成.reg文件了;经对比可知,生成的.reg与原先的reg_info.bin文件相同:

为海思u-boot快速生成reg_info.bin文件_第6张图片

    至此,我们就可以完全脱离Excel表格了。不仅如此,若需要频繁修改海思Soc的一些寄存器配置,此方法可以大幅度加快开发效率。

你可能感兴趣的:(杂谈)