2398|2

1372

帖子

2

TA的资源

五彩晶圆(初级)

楼主
 

【NXP Rapid IoT评测】在线生成工程的本地编译 [复制链接]

  在 rapid-iot-studio.nxp.com 在线IDE创建的工程的网页界面上,有一个 "Download" 图标("Program" 图标的左边),(如果网络顺畅的话)点了过后等一会儿,浏览器会弹出下载文件的提示,网站传来一个 .zip 压缩包,是这个工程的源代码。
  第一次下载的时候,我注意到这个源代码压缩包居然超过了 10MB 大小,感到奇怪。解开察看发现其实它并不只是工程源代码,它把所有的依赖的库(源文件或编译过的)都带上了,不需要再另外下载SDK就能用。这里面东西不少:


  其中真正属于在线生成的“工程代码”部分有多少呢?我下载了两个不同工程的代码包,可以比较一下:

  diff一番就清楚了——这两个工程的差异,主要在于 app_src 目录里面的内容不同,另外 .project 文件(可能是 MCUExpresso 用的)里面不同的地方只是工程名称。至于两个用到的 fxos8700.c 为何不一样我还没搞清楚。

  我本来就没打算弄 MCUExpresso IDE 来编译它,准备扒目录分析需要用到的代码如何编译的,忽然发现目录下面有 makefile 文件。再查看其内容正好是调用 GCC 工具链的,所以直接执行 make 命令看看效果了,遇到问题也是很可能的。
  果不其然,编译过程用到 ccache 命令(程序)没有,但看其作用也无关紧要,因为后面跟的就是 arm-none-eabi-gcc. 我开始还自己写了一个 ccache.exe 来把命令行参数传递给后面指定的程序,后来发现其实直接改 makefile 引用的 source.mk 文件更简单(把ccache文本替换掉就是了)。这样 make 就直接调 gcc 来编译。
  然后又遇到错了,gcc报告 redlib.spec 找不到,因为命令行上有 -D__REDLIB__ -specs=redlib.specs 指定spec文件. 厄,Redlib 是啥我都没听说过。于是我先把 -specs=redlib.specs 这个选项删掉再说(在 source.mk 文件里改),重新尝试编译。
  gcc给了一个警告, 说makefile不是一个目录。仔细看,命令行上出现了 -I"makefile" 这条选项,没有道理,改 source.mk 删掉。之后就没有编译错误了,但是 make 只编译了一个 C 文件就停下了,奇怪?
  我看了 makefile 中写的编译目标,觉得应该执行 make main-build,于是make开始编译很多个文件……
  过了一会,出现一个error,是 gcc 说 struct timeval 重复定义了,这错出现在 RapidIot_Base/middleware/wireless/nwk_ip/core/interface/sockets.h 中,而 struct timeval 已经在 C 标准库中定义了。我想起来 Redlib 这茬,很可能就是和我的编译器使用的 Newlib 的差异造成。目前我干脆修改下 sockets.h, 沿用C标准库中的定义:(加上条件编译指令)
#ifndef _SYS__TIMEVAL_H_
struct timeval
{
  uint32_t tv_sec;      /*!< seconds */
  uint32_t tv_usec;     /*!< microseconds */
}; /*!< Structure containing time information */
#endif

  这样编译继续下去了,到最后链接的时候出了错:找不到 MK64FN1M0xxx12_connectivity.ld 这个脚本。不过这是小问题,我见过目录树下面有这个文件的,在 boards/rpk/mcux 目录下面,copy过来即成。
  链接也通过了,得到一个 .axf 的文件,实际上就是 ELF 文件嘛。我用 objcopy 得到 .bin 文件,就可以用于下载了。
  我编译下载的 "Rapid-IoT Out Of Box Demo",烧写进去运行正常,和原来自带的功能一样。


  后来又查了一下 Redlib 是什么,解释:

此帖出自RF/无线论坛

最新回复

牛,直接模拟了一把云端编译服务器,逆向了一把单机的IDE。   详情 回复 发表于 2019-1-17 10:14
点赞 关注
 

回复
举报

6069

帖子

4

TA的资源

版主

沙发
 
谢谢分享
此帖出自RF/无线论坛
 
 

回复

98

帖子

5

TA的资源

一粒金砂(中级)

板凳
 
牛,直接模拟了一把云端编译服务器,逆向了一把单机的IDE。
此帖出自RF/无线论坛
个人签名尽吾志也而不能至者,可以无悔矣。——王安石
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
快速回复 返回顶部 返回列表