摆在桌上的文章有只有11页长,是关于所谓动态地软件更新。
摘要
关键字
1引论
2相关工作
3结构
3.1仓库管理器
3.2映像管理器和内存管理器
3.3引导装入器
4模块化与依赖分析
5动态代码更新
5.1对函数的引用
5.2活动的函数
5.3调用栈上的函数
5.4变量的更新
6结论和当前状态
引用
从3开始,我认为有启发的思想就是对功能的抽象,他们根据不同阶段的功能抽象了6个-er——ELFextractor, RepositoryManager, MemoryManager, Linker, Image Manager, Bootloader。
ELFextractor, 是为了从ELF文件中提取符号表和重定位表,看看有哪些函数和数据;
RepositoryManager用ELFextractor的结果,从而获得依赖关系——函数调用了哪些函数?函数使用了哪些数据?"ImageManager"这个名字起的不好,根据他们的定义,其功能只是描述target内存中已经加载的模块,以此来刻画target的“状态”;
按照他们的本意,MemoryManager是指工作在host上,决定模块需要加载到target的那个位置上,是“a part of cross linker”,但是我们工作在ppc+vw上有很强的计算能力,所以这个MM不能控制分配出的内存的位置,但是可以做记录。
我们的思路与他们的不一样,运行在vw上,想充分使用loadModuleAt和unld的功能。但是想做到完全Dsu还是有困难:
1我们使用了函数指针。这在后面很难处理;
2vx在发布时要用静态链接,可是我们依赖动态链接。
无聊之际我把他们文献中提到的依赖图关系的生成方案写出来了。我觉得搞不好我们的思路要推倒重来,可能还是要做一些编译的手脚。有可能要参照别人的文献。
附,我这次看的这篇是德国人写的,有2个长句子愣是看了好几遍才搞明白语法结构。看来欧洲人的英语也是怪怪的。