我想为资源非常有限的嵌入式设备(ESP8266)创建一个操作系统,它可以加载以下内容 ELF
文件作为程序或共享对象(共享对象是第二重要的)。
我想知道是否有可能将这个操作系统的任何程序链接到 map file
的OS?
例如我实现了 memcpy
并在OS中制作一个头文件,声明它为 extern
然后当我要写程序时,加入头文件使其编译成功,并使链接器偷看地址。memcpy
从操作系统的地图文件中获取。
操作系统是非独立的,它的功能总是在一个固定的地址,但程序是独立的ELF文件。
这绝不是一个在嵌入式目标上运行ELF的完整解决方案,但对于在链接过程中提供已知地址的具体问题,GNU LD允许你为定义为extern的代码中的符号提供地址,通过添加一个 PROVIDE
语句或对链接器脚本进行简单的赋值。LD不会直接读取地图文件,但你可以解析地图文件,找到相关的地址,生成一个有相应符号提供的链接器脚本,并在编译ELF时使用该链接器脚本。提供和赋值功能的文档可以在以下网站找到 https:/sourceware.orgbinutilsdocsldAssignments.html。