rt-thread里似乎只能把想要运行的程序编进elf里,求问为什么不能支持运行外部编译好的可执行文件?
开RT_USING_LWP选项编译的时候会报错:
而可执行文件在外部编译比较方便。求问是否有对应的解决方法?
要使用你想要的功能,就涉及到mul-bin的范畴了。
简单来说,就是有多个bin,烧录在flash的不同区域,他们都是独立的运行代码,都可以有自己的main函数入口。
如果要发生代码的相互调用,得使用function table这种技术。
最典型的应用就是,很多嵌入式平台都有bootloader+firmware的架构,
这里bootloader就是一个独立的bin,它一般是完成对firmware的验签和把firmware拉起来的功能;
而firmware也是独立的bin,它就是我们常规所说的固件(应用程序)。
bootloader是不依赖于firmware而存在的,仅仅有bootloader也是可以运行的。
回到你的问题,看报错应该是某个实现函数未找到,你还需要去参考下RT-THREAD有没有这种用法。
以上回答,提供点思路,希望能够帮助到你。
谢谢,我其实只是想要一个能支持外部编译bin并且能够在msh中运行这个bin的功能。。。原因是因为rt-thread某个平台使用的toolchain不能完成我这个bin的编译(这个bin不支持使用rt-thread对应平台所要求的工具链进行编译)。
至于报错很简单,就是因为rt-thread对应平台所使用的libc里不支持这种函数实现,简而言之在这个platform下就不能用这个syscall来完成想要的功能。。。感觉只能放弃。。
你的解决思路就有问题:APP动态加载的前提是,内核跟APP要用同一套工具链编译,编译选项也应该一致。
@ufbycd 也奇怪了,这个人在论坛里的回答,多数花狸狐哨,答非所问。
一个文件想被动态加载执行,还需要一套结构,目前主流的 pe 和 elf 两种也是同一种规范衍生出来的。楼下提示 RT-Thread Smart 是多进程系统。看了一下文档也是使用的 elf,几乎是linux的翻版。
但是,想实现动态加载bin文件运行,想法太simple了。