背景 在进行bsp适配的时候,在bsplpc55sxxlpc55s36_nxp_evk下输入命令scons —dist,
等待导出成功,然后以dist文件下的工程开始开发,注意此时dist文件夹可以放置在任意地方,此时在distproject下scons编译,会出现如下错误,为了更清楚的复现报错,这里并没有使用多线程编译
发现问题
当然对至于这样的报错。必然先确认在dist下是否真的存在这个文件,结果是没有的,那就去bsp下寻找,这里使用了everything搜索工具
在查找到文件之后,复制过去到dist下,然后接着编译,会继续发现报错缺少其他文件,而且很显然,这些文件都在一个文件夹下,即bsplpc55sxxLibrariesCMSISCoreInclude,那么可以肯定的是,同时对比dist目录,可以肯定的是,CMSIS整个文件夹都没有被scons —dist打包出去
那么到这里基本就明确了问题,现在有两个思路可以去解决这个问题:
修改env中的scons —dist脚本,这样就不用动CMSIS目录,不用去修改控制文件编译的SConscript脚本
移动CMSIS文件夹的位置,然后需要修改SConscript文件才可以编译成功,这样就不用动env
那么这两种方案呢,修改env需要考虑到其他bsp的导出问题,同时需要考虑顶层的设计,这里呢,仅仅把env中控制scons —dist的位置指明,具体位置在 这里 ,而且其他bsp没有出现这个问题,足以证明是改bsp出现了问题,就此可以确定我们需要修改的是CMSIS的路径
如何解决
修改CMSIS文件夹的位置
那么现在确定了我们将要移动CMSIS文件夹,那么把它移向哪里呢,显然我们目前不知道,怎么办,看 STM32
嗯就是这么直接,stm32放哪里我们放哪里,可以明确看到CMSIS是在drivers下的,那么很直接,我们复制过去同样的位置就可以了,将两个路径都放出来了,我们可以对比一下
到此是不是就结束了呢,显然并不是,还需要编译一下去测试才可以提交pr,诶这个时候我们会发现编译通不过了,仍然找不到”core_cm33.h”文件,让我们想想是哪里出了问题,现在文件有了,我们是不是该考虑一下编译器为什么找不到,很显然我们应该去看SConscript脚本了,在那里为编译器寻找文件指明了路径,但是那么多的SConscript脚本,我们应该去寻找哪一个,这里呢,笔者的想法是找最近的,显然lpc55sxxLibrariesdriversSConscript最近,遂,看!!!!
看来里边是没有的,全是对.c文件的控制,等等,我们CMSIScoreinclude下的可都是.h文件,我们应该从上层向下寻找,来到bsp根目录下
这里我就直接用vscode打开了SConscript,大家注意看路径,是bsp根目录下,很显然这个SConscript就是 了,第五行很明显确定了CMSIS的路径,(这里是我修改之后的),那么接下来开始编译
很好一遍成功!!!
似乎就到此为止了,我们可以提交pr了
解决一个问题是没有那么容易的,这里(LPC55sxx里)还有其他使用CMSIS的bsp,他们的SConscript脚本我们也需要一并修改了
到此呢,就真的结束了见 pr,我还不小心将CMSIS下的LICENSE.txt文件删掉了,又加了一个commit才解决这件事情,最后的pr长这样
在满鉴霆大佬和杨熙大佬的建议下,最终的解决办法采用了另一种解决方案
修改sdk_dist.py文件
sdk_dist.py文件在bsplpc55sxxtools下,env在接受到scons —dist之后会调用该脚本
只需要在脚本里添加一句话即可
print("=> copy bsp CMSIS")
bsp_copy_files(os.path.join(library_path, 'CMSIS'), os.path.join(library_dir, 'CMSIS'))
然后scons —dist的效果是这样的
然后编译测试一下
|