Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1422163
  • 博文数量: 124
  • 博客积分: 4078
  • 博客等级: 中校
  • 技术积分: 3937
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-21 11:28
个人简介

新博客:http://sparkandshine.net/

文章分类

全部博文(124)

分类: 嵌入式

2012-04-10 17:17:00

摘要:

    本文讲述了Contiki\core\loader\目录下的文件关系,理清这些关系,有助于移植、应用开发。


一、文件清单

[1]cle.h ——Contiki动态链接编辑器(dynamic Link Editor)头文件

[2]cle.c ——Contiki动态链接编辑器实现

[3]cle_avr.c ——avr平台的Contiki动态链接编辑器实现

[4]cle_msp430.c ——msp430平台的Contiki动态链接编辑器实现


[5]cmod.h ——cmod头文件

[6]cmod.c ——cmod实现


[7]elf32.h ——elf文件定义了结构体:文件头、段描述符(段表的项)、重定位表、符号(符号表的项)


[8]dlloader.h ——动态加载头文件

[9]dlloader.c ——动态加载实现(dlloader_load)


[10]elfloader-arch.h ——硬件相关的ELF loader头文件

[11]elfloader-avr.c ——avr平台的ELF loader底层实现

[12]elfloader-msp430.c ——msp430平台的ELF loader底层实现

[13]elfloader-stub.c ——桩平台(其他平台实现的模板)的ELF loader底层实现

[14]elfloader-x86.c ——x86平台的ELF loader底层实现


[15]elfloader.h ——通用的ELF loader头文件(包括链接、重定位、加载)

[16]elfloader.c ——通用的ELF loader实现


[17]elfloader_compat.h ——与elfloader.c相兼容的elfloader头文件

[18]elfloader_compat.c ——与elfloader.c相兼容的elfloader实现


[19]sym.h ——符号头文件(比symbols.h更具体)

[20]sym.c ——符号实现(比symbols.h更具体)


[21]symbols.h ——符号头文件(定义符号结构体)

[22]symbols-def.h ——符号头文件(定义符号结构体)


[23]symtab.h ——符号表头文件

[24]symtab.c ——符号表查找实现(symtab_lookup)

[25]symtab-avr.c ——avr平台符号表查找实现


二、详情说明 

2.1 动态链接编辑器

    [1]~[4]是Contiki动态链接编辑器(dynamic Link Editor)声明及实现,也只有cmod.c及elfloader_compat.c调用它。

2.2 cmod

    [5][6]声明实现了cmod_load、cmod_unload函数,没找到Contiki源码哪里调用了这两个函数,源码也没注释,不晓得是什么意思,难道是Contiki module?

2.3 elf32.h

    [7]定义了ELF文件头相关结构体,而这些定义在elfloader.c也定义了,直接include "elf32.h"不就完了吗,真是多此一举。

2.4 dlloader

    [8][9]动态加载dlloader_load函数声明及实现。

2.5 硬件相关elfloader

    考虑到不同处理器的ELF格式轻微不同,Contiki将ELF loader分成两部分:硬件相关和通用,硬件相关给通用的提供接口。硬件相关完成内存分配、代码和数据重定位、ELF代码写回程序存储器。将

    Contiki移植到新处理器(Contiki 2.5已支持avr、msp430、x86、arm,有的在core/loader,有的在cpu/arm/),需要实现elfloader-arch.h的函数。底层elfloader-arch.c为上层通用elfloader(elfloader.c)提供接口。

2.6 通用elfloader

    [15][16]是通过ELF loader声明及实现,包括链接、重定位、加载,也是给上层应用提供的接口。[17][18]实现的功能与[15][16]类似,声称是与elfloader.c兼容,源代码注释如下:

  1. This code is plug-in compatible with elfloader.c and is an example of how the Contiki dynamic Link Editor (CLE) can be used.

2.7 符号表

    ELF文件中的符号表往往是文件中的一个段,段名一般叫.symtab[1]。符号表是由符号结构体组成的一个数组,Contiki符号只有两个属性(名和值)。

    [21][22]内容完全一样,定义了符号的结构体,相对于Linux的ELF简单多了,只有两个成员(符号名和符号对应的值),在loader/systab.c使用。[19][20]也是符号相关的一些定义,但比symbols.h更具体,差别在于,symbols.h只是将符号的值简单定义为void型指针(void *value),而sym.h将符号值定义为联合体:对象指针或者函数指针。除此之外,sym.h还提供符号查找、对象指针与函数指针转换功能。[23][24][25]仅仅是符号表查找函数声明及定义。

    从代码来看,[19][20]与[21]~[25]实现的功能类似,都是符号结构体定义、符号查找。


参考资料:

[1]《程序员的自我修养——链接、装载与库》[M].

[2] 本博文的TXT格式文件 contiki_loader_list.txt   

阅读(3125) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~