大家好,本人新手一枚,关于动态模块编译,因为对里面一些脚本还不熟悉,目前遇到了如下疑问,请知道的大神给予解惑下,谢谢
本人在rt-thread里面使用了bsp工程,采用了scons —dist生成的自己的开发工程,正个开发调试,实际上是将dist下除zip包的工程复制出来独立开发的,复制出来的工程目录为rt-thread_stm32_demo
1、当我编译动态模块时,依据官方文档,配置了menuconfig,然后在.ld文件里面添加了
/ section information for modules / . = ALIGN(4); __rtmsymtab_start = .; KEEP((RTMSymTab)) __rtmsymtab_end = .;
2、因为对
也需要在bsp对应的rtconfig.py中设置动态模块编译时需要用到的配置参数:
M_CFLAGS = CFLAGS + ‘ -mlong-calls -fPIC ‘ M_CXXFLAGS = CXXFLAGS + ‘ -mlong-calls -fPIC’ M_LFLAGS = DEVICE + CXXFLAGS + ‘ -Wl,—gc-sections,-z,max-page-size=0x4’ +\ ‘ -shared -fPIC -nostartfiles -nostdlib -static-libgcc’ M_POST_ACTION = STRIP + ‘ -R .hash $TARGET
‘ + SIZE + ‘ $TARGET
‘ M_BIN_PATH = r’E:\qemu-dev310\fatdisk oot’
这里的编译配置没有理解清楚,所以没有修改
3、编译动态模块:
1)首先在工程目录下 scons —target=ua -s
2)然后 在rtthread-apps 下,我是linux环境 通过export BSP_ROOT=/xxx/thread_stm32_demo 和 export RTT_ROOT=/xxx/thread_stm32_demo/rt-thread
来配置环境变量 ,这样操作是给予我对
“进入控制台命令行后,进入到这个rtthread-apps repo所在的目录(同样的,请保证这个目录所在全路径不包含空格,中文字符等字符),并设置好两个变量:* RTT_ROOT - 指向到RT-Thread代码的根目录;
这一段话的理解,但是“指向到RT-Thread代码的根目录” 这句话我理解不是很透彻,因为我的开发工程不是存放在rt-thread 仓库的bsp下面的,我是拷贝出来的,所以不知道对不对
但是编译出来的.mo模块也可以运行,不过在.mo模块里面添加头文件 rtthread.h 时,编译时就出现无法找到rtconfig.h文件,我尝试过用绝对路径在rtthread.h里面定义rtconfig.h的位置,
但是我修改编译,发现整个工程里面凡是涉及到rtconfig.h的地方都提示error,找不到,所以停止了修改,感觉这样应该是不对的
问题:1、我设置BSP_ROOT 和RTT_ROOT的方式对吗?因为我是单独拷贝dist里面的代码出来开发的,请知道的提示下
2、为什么我在rtthread-apps 里面调用rtthread.h时就会出问题,请问下,正确的调用方式是什么?我上面的操作流程是不是那里不对?
建议先按照应用笔记的方式来运行吧 https://www.rt-thread.org/document/site/rtthread-application-note/components/dlmodule/an0023-rtthread-components-dlmodule/;
需要留意下动态模块只支持 GCC 编译器的。
[i=s] 本帖最后由 misonyo 于 2018-11-23 16:45 编辑 [/i]
在dist 后的BSP目录下面运行 scons —target=ua -s 这个命令没有???我windows测过没问题,看你两个环境变量的设置是没有问题的。你可以根据应用笔记重新运行一遍看看。
在dist 后的BSP目录下面运行 scons —target=ua -s 这个命令没有???我windows测过没问题,看你两个环境 …
我是先在在dist 后的BSP目录下面运行 scons —target=ua -s 的,然后再设置两个环境变量,其实我的动态模块在板子上也运行起来了的,只是调用例如