掌叔
2009-02-22 08:58:38
摘自:[url]www.fw211.com[/url]
作者:火精灵
DLDI是动态链接设备接口的英文缩写,其实就是一种patch机制。做过soc固件的朋友都知道,在设计固件的时候会留下一个接口,通过这个接口,芯片可以执行外部程序,以达到修改固件内部错误或者扩充固件功能的作用。DLDI就是使用这种方法,来使得NDS自编程序能够支持不同的烧录卡。在写 NDS程序的时候需要把DLDI的模板程序编译进来,这样patch的时候dlditool就会找到DLDI的部分,进行程序替换。DLDI的模板中只包含DLDI头、接口的空函数,和预留的空间。其中头中除了DLDI的标识和版本信息外,最重要的就是地址信息。dlditool会根据地址信息重定位 patch中的相应接口函数的地址。那么除了基址重定位外patch中的代码又是如何能被执行的呢?我们知道ARM946E-S只有MPU,不能进行虚拟地址映射。那么patch中的代码只能被编译成PIC代码,就是位置无关程序代码。在ADS中选项-apcs /ropi,GNU中选项 -fPIC,就会编译成位置无关的代码。这样的代码在执行的时候与被加载到的地址无关,取址的时候根据PC进行偏移。现在好多烧录卡支持自动打补丁,如果遇到不支持的可以用dlditool来手动打补丁。如果不想使用DLDI的这种方式,大家可以下载到烧录卡的读卡接口程序,放到自己的代码中直接使用,其实我比较喜欢这种方式。
Isword
2009-08-29 23:38:07
火精灵和雷精灵的关系是什么?