MIPS ARM elf loader
源码下载:Tiny_elf_loader(source code download)
ARM i.mx6ull (裸机)运行效果:
MIPS (RTOS)运行效果:
tiny_elf_loader支持mips/arm/i386的ELF 格式module动态链接加载:
#MIPS mod在下面3种gcc做过测试:
CC = mips-linux-gnu-gcc
CC = mips-mti-linux-gnu-gcc
CC = mips-sde-elf-gcc
#ARM mod在下面1种gcc有做过测试:
CC = arm-linux-gnueabihf-gcc
#使用tiny elf loader前,参考user_define.c文件中各个接口配置:
例如:
int user_symbol_init(void)
{
//example:
/* define for test */
define_symbol(NULL, “test_xx”, define_null_test);
define_symbol(NULL, “printf1”, printf);
…
}
#提供给外部接口调用open
void mod_open(void)
{
}
#提供给外部接口调用释放
void mod_close(void)
{
}
#提供3种加载module的方式
#从mem中加载
void *mem_load_file(char *file, size_t *size)
{
}
#从usb中加载
void *usb_load_file(char *file, size_t *size)
{
}
#从网络中加载
void *http_load_file(char *file, size_t *size)
{
}
注意:
MIPS:
cpu硬件浮点型的支持和软件浮点型的支持;
如果遇到浮点数运算死机问题,检查硬件浮点有没有开启,
或者出现浮点开启后有UNDEFINE问题,可以相应调整gcc配置选项解决;
mips的汇编重定位类型还不支持R_MIPS_GPREL16,
默认的makefile配置gcc选项会将R_MIPS_GPREL16
转成R_MIPS_HI16和R_MIPS_LO16(RTOS)测试OK;
ARM(imx6ull):
cpu开启硬件浮点型的支持;
使用默认的makefile配置编译使用,(裸机)测试OK;
其它,注意加载内存地址的对齐问题,注意icache,dcache刷新问题(如果需要);
————————————————————————–
此代码参考了一位叫Yury Ossadchy的作者的i386 elfloader源码,
在此基础上加入了MIPS与ARM的部分并做多处改进,
由于此份代码年代久远,本想给该作者寄去一份修改的源码,github也已找不到其本人,
在此感谢Yury Ossadchy。
如果你有改进的版本,也非常欢迎寄一份给我lizhiliang06@qq.com。
暂无评论