【摘要】:使用动态加载器所需的唯一函数是elfloader_load()函数,该函数加载并且重定位对象文件到系统映像中。必须调用函数elfloader_load()加载文件,该函数以要打开文件的CFS 文件描述符fd 作为唯一的参数。如果动态加载模块成功,函数elfloader_load()返回ELFLOADER_OK,并且如果该模块包含Contiki 系统进程,则elfloader_loaded_process 变量指向这一进程。默认情况下,Contiki系统包含一个空符号表,以使得不会扩展不必要的代码规模。因此,必须生成符号表并包含在需要加载ELF 模块的固件中。
程序通过使用如下所示的动态加载器API函数加载模块,API函数的定义在程序文件core/loader/elfloader.h中。
使用动态加载器所需的唯一函数是elfloader_load()函数,该函数加载并且重定位对象文件到系统映像中。必须调用函数elfloader_load()加载文件,该函数以要打开文件的CFS 文件描述符fd 作为唯一的参数。要注意的是,elfloader_load()函数修改文件描述符指向的文件,如果要确保文件完整无损,则必须备份该文件,例如将原始文件发送给其他用户。
如果动态加载模块成功,函数elfloader_load()返回ELFLOADER_OK,并且如果该模块包含Contiki 系统进程,则elfloader_loaded_process 变量指向这一进程。如果动态加载失败,函数elfloader_load()返回下面列出的代码,这些返回值含义如下:(www.xing528.com)
其他可用的函数elfloader_init()通常在系统启动时调用,该函数仅初始化加载进程(elfloader_autostart_processes)的空表。默认情况下,Contiki系统包含一个空符号表,以使得不会扩展不必要的代码规模。因此,必须生成符号表并包含在需要加载ELF 模块的固件中。生成固件需要的命令如下所示,例子中省略了生成固件的目标说明。
必须为固件准备一个能够动态加载ELF 模块的符号表,以上三个步骤确保固件中所有可用符号以及指向其地址的指针在符号表中也是可见的。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。