打开之前做wince内核定制烧写的工程,把驱动文件,假设叫A.dll, 拷贝到工程目录下,D:\WINCE420\PUBLIC\wince工程\RelDir\SAMSUNG_SMDK2410_ARMV4Release 这个下边.然后在pb工作环境中,找到ParameterView区,展开树型列表,找到project.bib和project.reg两个文件,要对他们进行修改.
修改 project.bib 添加 A.dll $(_FLATRELEASEDIR)\A.dll NK SH 这样一行 .
将产家提供的reg文件里的内容copy到project.reg里.
以上做好后,因为我是pb4.2的环境,这时候点bulide菜单下的make image.等完成后,再重新烧写一遍镜像文件(nk) 到开发板上就可以了。注意我这里选make image而不是build platform。如果选build platform会抱错的,说找不到dll等等几个错误。我买的周立功的一本书上是在pb5.0环境下,到这一步时说 在菜单buuild os中,不选clean before building。然后再选择sysgen重新编译生成新的wince映像
物理地址映射方法分为两种,一种静态映射另一种为动态映射。在OEMAddressTable中定义了物理地址与虚拟地址的映射关系属于静态映射,用VirtualCopy映射属于动态映射,采用哪种办法都可以。问题中提到的属于静态映射,2440的BSP在map.a文件中定义了IIC控制寄存器的物理起始地址和对应的虚拟地址如下:
DCD 0x91400000, 0x54000000, 1 ;
在OEMAddressTable中定义的虚拟地址范围在0x8000 0000—0x9FFF FFFF,这部分可缓存,适合内核程序和应用程序使用,同时WINCE内核在0xA000 0000—0xBFFF FFFF中映射了另一份,指向了同样的物理地址,这部分不可缓存,适合驱动程序使用。三星ARM处理器带有L1级高速缓存,可缓存会提高执行效率。对于特殊的设备寄存器适合映射到不可缓存的虚拟地址。
当驱动程序调用VirtualCopy对0xB1400000地址读写时,WINCE自动将这个地址减去0x2000 0000,也就是0x91400000,对应的物理地址就是0x54000000,也就是IIC控制寄存器的物理起始地址。
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』