TrueFFS文件系统在VxWorks系统中本身是不支持非2的n次幂容量的,比如只支持16MB、32MB、64MB等容量。对于非2的整数次幂容量,官方驱动提供了一个bootSize的参数,可以保留一部分空间,但只能从低地址空间预留。但对于powerPC架构CPU的很多应用场景中,更常见的是从高地址空间部分预留,此时只能通过修改VxWorks内核源码才能实现,下面介绍修改方法。
以下是我的应用场景:
系统:VxWorks 6.9
CPU: NXP P2020(powerPC架构)
编译器:PPC32e500v2gnu
内核源码修改位置:
经检查内核源码后发现,是在执行地址映射(物理地址单元映射成逻辑地址单元)的时候做了地址限定,故具体修改方法如下:
打开InstallDir\vxworks-6.9\target\src\tffs\flsocket.c文件,其中InstallDir为vxWorks安装目录(例如我的安装目录为E:\WindRiver69),找到flMap函数,将:
return addToFarPointer(vol.window.base,address & (vol.window.size - 1));
修改为:
return addToFarPointer(vol.window.base,address);
修改完成后,需要重新编译内核库文件才能生效,编译方法如下:
1) 打开 VxWorks Development Shell命令行工具;
2) 执行如下命令进入需要生成系统库的源码目录:
cd vxworks-6.9\target\src\tffs
3) 执行如下命令进行编译:
make CPU=PPC32 TOOL=e500v2gnu
如下图所示:
编译成功后,会在"InstallDir\vxworks-6.9\target\lib\ppc\PPC32\e500v2common"目录下生成新的libtffs.a库文件。
最后再重新编译自己的vxWorks镜像即可。