查看: 603|回复: 1

[在线活动] [LPC55S6X]解决在--dist之后无法编译的问题的思路

[复制链接]

该用户从未签到

1

主题

2

帖子

0

新手上路

Rank: 1

积分
20
最后登录
2023-5-22
发表于 2023-3-3 10:41:02 | 显示全部楼层 |阅读模式
### 背景
在进行bsp适配的时候,在bsp\lpc55sxx\lpc55s36_nxp_evk下输入命令scons --dist,
![screenshot_image.png]()
等待导出成功,然后以dist文件下的工程开始开发,注意此时dist文件夹可以放置在任意地方,此时在dist\project下scons编译,会出现如下错误,为了更清楚的复现报错,这里并没有使用多线程编译
![screenshot_image.png]()

### 发现问题

当然对至于这样的报错。必然先确认在dist下是否真的存在这个文件,结果是没有的,那就去bsp下寻找,这里使用了everything搜索工具
![screenshot_image.png](.webp)
在查找到文件之后,复制过去到dist下,然后接着编译,会继续发现报错缺少其他文件,而且很显然,这些文件都在一个文件夹下,即bsp\lpc55sxx\Libraries\CMSIS\Core\Include,那么可以肯定的是,同时对比dist目录,可以肯定的是,CMSIS整个文件夹都没有被scons --dist打包出去
![screenshot_image.png]()
那么到这里基本就明确了问题,现在有两个思路可以去解决这个问题:

- 修改env中的scons --dist脚本,这样就不用动CMSIS目录,不用去修改控制文件编译的SConscript脚本
- 移动CMSIS文件夹的位置,然后需要修改SConscript文件才可以编译成功,这样就不用动env

那么这两种方案呢,修改env需要考虑到其他bsp的导出问题,同时需要考虑顶层的设计,这里呢,仅仅把env中控制scons --dist的位置指明,具体位置在 [这里](https://github.com/RT-Thread/rt- ... x/tools/sdk_dist.py) ,而且其他bsp没有出现这个问题,足以证明是改bsp出现了问题,就此可以确定我们需要修改的是CMSIS的路径

### 如何解决
#### 修改CMSIS文件夹的位置
那么现在确定了我们将要移动CMSIS文件夹,那么把它移向哪里呢,显然我们目前不知道,怎么办,看stm32
嗯就是这么直接,stm32放哪里我们放哪里,可以明确看到CMSIS是在drivers下的,那么很直接,我们复制过去同样的位置就可以了,将两个路径都放出来了,我们可以对比一下

![screenshot_image.png]()

![screenshot_image.png]()

到此是不是就结束了呢,显然并不是,还需要编译一下去测试才可以提交pr,诶这个时候我们会发现编译通不过了,仍然找不到"core_cm33.h"文件,让我们想想是哪里出了问题,现在文件有了,我们是不是该考虑一下编译器为什么找不到,很显然我们应该去看SConscript脚本了,在那里为编译器寻找文件指明了路径,但是那么多的SConscript脚本,我们应该去寻找哪一个,这里呢,笔者的想法是找最近的,显然lpc55sxx\Libraries\drivers\SConscript最近,遂,看!!!!

![screenshot_image.png](.webp)
看来里边是没有的,全是对.c文件的控制,等等,我们CMSIS\core\include下的可都是.h文件,我们应该从上层向下寻找,来到bsp根目录下

![screenshot_image.png](.webp)
这里我就直接用vscode打开了SConscript,大家注意看路径,是bsp根目录下,很显然这个SConscript就是 了,第五行很明显确定了CMSIS的路径,(这里是我修改之后的),那么接下来开始编译

[假装有图]

很好一遍成功!!!

似乎就到此为止了,我们可以提交pr了



解决一个问题是没有那么容易的,这里(LPC55sxx里)还有其他使用CMSIS的bsp,他们的SConscript脚本我们也需要一并修改了

到此呢,就真的结束了见 [pr](https://github.com/RT-Thread/rt-thread/pull/7006/files),我还不小心将CMSIS下的LICENSE.txt文件删掉了,又加了一个commit才解决这件事情,最后的pr长这样

![screenshot_image.png](.webp)

**在满鉴霆大佬和杨熙大佬的建议下,最终的解决办法采用了另一种解决方案**


#### 修改sdk_dist.py文件

sdk_dist.py文件在bsp\lpc55sxx\tools下,env在接受到scons --dist之后会调用该脚本
只需要在脚本里添加一句话即可

```c
    print("=> copy bsp CMSIS")
    bsp_copy_files(os.path.join(library_path, 'CMSIS'), os.path.join(library_dir, 'CMSIS'))
```

然后scons --dist的效果是这样的

![screenshot_image.png]()

然后编译测试一下

![screenshot_image.png]()

附上 [pr](https://github.com/RT-Thread/rt-thread/pull/7011)
到这里就真的结束啦

回复

使用道具 举报

  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3303

    主题

    6550

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32055
    最后登录
    2024-4-30
    发表于 2023-3-3 10:50:11 | 显示全部楼层
    点个赞
    签到签到
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-5-2 23:52 , Processed in 0.109261 second(s), 19 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表