5253|12

72

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于bsp 中 动态链接库 和 驱动 、应用程序的一些疑惑 [复制链接]


1
在bsp中可以放入应用程序:SOURCES,MAKEFILE,DIRS,应用程序代码。但是在platform.bib/.reg里并没有任何该应用程序的信息,所以这个应用程序,只能被编译,但并不会被加到nk里?如果要加到nk里,就要在platform.bib里将它导入?在bsp里的应用程序编程能够用到bsp里的资源吗?可以像驱动里的sources,导入一些库吗?还是和在vs2005下用SDK来编程是一样的?

2
在bsp中驱动会编译成dll,并且驱动有固定函数或格式(都是微软定义好的)。在应用程序里要用到驱动,也要用它在应用程序里对应的函数,这个转换由操作系统完成。
在bsp里驱动会被编译成dll,并通过platform.bib/.reg来将它导入到nk里,并在开机时按一定的顺序加载驱动。
在bsp里还有一些会被编译成dll的程序:makefile ,xxx.def,sources,代码。代码里有define xxx __declspec(dllexport)这样的定义,每个函数前也都会加这个,但是并没dllmain这个入口函数。代码里用到里gdi函数,也用到了MmMapIoSpace。在platform.bib里将它导入,在platform.reg里没有相关信息,说明它不会像驱动一样在开机时被加载?这个DLL算什么?它在应用程序里能被调用吗?或者要如何用它里边的函数呢?这些函数并没微软定义的。

3
MmMapIoSpace这个函数不是在驱动里才能用的吗?

4
如果在应用程序里要对芯片功能模块的物理寄存器进行操作,可以用virtualalloc和virtualcopy来做吗?在驱动里是可以用它们,在应用程序里用法有区别吗?在pb的help里只有一段驱动里的示例代码。
或者说,我只知道物理地址,并且一定要在应用程序里用,怎么办?nk已经固定了。

最新回复

不会的, 因为MmMapIoSpace申请的是堆内存,堆内存有点像链表存储,会自己增加的。 我们同一个IO会被不同的驱动覆盖就证明,这个重复映射是没有问题的。  详情 回复 发表于 2009-3-19 23:59
点赞 关注

回复
举报

80

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
1.驱动和应用都可以打包近内核。你找个BSP就可以看出,以2440为例子这个摄像头应用程序就是打包进去了。但是驱动和应用程序加载方式是不同的。这个看注册表就看的出来。

2.入口函数是可以自己定义的,在sources文件有,你仔细看看。驱动和应用是完全不同的东西,所以有蛮大饿差别。

3.MmMapIoSpace可以在驱动,也可以在应用使用,你看EVC帮助文档,其实很多函数都可以交互使用,比如一些注册表函数,尤其是wince5.0 驱动和应用同在用户空间,wince6.0据说有限制了,我还没有弄过。

4.可以在wince5.0上。MmMapIoSpace可以帮你迅速达到目的。
 
 

回复

54

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
谢谢。不过,
1.不是我问的答案。
2.入口函数是可以自己定义的。这个是对的。我描述那个dll是custom类型的。代码里用到gdi函数,也用到了MmMapIoSpace。这个dll应该不属于驱动吧?它在应用程序里能被调用吗?或者要如何用它里边的函数呢?因为之前有人说过,wince驱动都有标准的接口(微软定义好的),在应用程序里不能直接调用,微软会给出对应的函数让你调用。但是我描述的这个dll是custom型的,函数名都是自己定义的。所以有点困惑。
3.MmMapIoSpace,我看pb的帮助,只讲到驱动可以用它。所以不太确定,应用程序能不能用?
4.同3
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

4
 
virtualalloc和virtualcopy都可以在EVC中使用。前提是wince5.0
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

5
 
MmMapIoSpace是调用了virtualalloc和virtualcopy实现的。
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

6
 
在evc里能用,在vs2005里也能用吧。
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

7
 
试试不就知道了

你看帮助文档啊。
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

8
 
在wince5.0 下,MmMapIoSpace 在驱动和应用层都可以用,由于wince6.0内核重写了,驱动都被加载到内核空间里,MmMapIoSpace 就只能在驱动层用了,在应用层不行。
 
 
 

回复

89

帖子

0

TA的资源

一粒金砂(初级)

9
 
1. 必须在bib里合入,才会包含到nk里。
2. 用到gdi不能算标准意义上的驱动。
通常说底层驱动,是跟硬件直接相关,需要操作硬件的。这些驱动将操作硬件的方法封装起来,提供出系统API供应用层调用,目的就是屏蔽对硬件的操作,使得硬件对应用来说是透明的。
不过这种界定并不明晰,只是一般的工作领域的简单划分。因为还有中间层驱动,协议层驱动...
微软只提供了通用设备的标准接口(比如屏、触摸、电池、声音等等),在应用里建议用微软提供的标准接口,这样可保证应用的可移植性。
非通用设备(比如感光元件,加速感应器等等),就只能自己写驱动,应用就只能调用驱动接口,而没有标准接口可用了。
所以你描述的这个就直接调用驱动接口了。
3. MmMapIoSpace在ce4.2/ce5.0时,在应用中也可用。ce6.0不可在应用中使用。
4. ce4.2/5.0下在应用中对物理地址就像在驱动中一样,先映射后操作。
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

10
 
MARK
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

11
 
1,后来查看了编译的map文件,发现里边有dllmain这个函数,又google了一下,了解不写dllmain的话,编译时会自动加入空的.
2,以前我一直认为,在bsp里出现的dll都是驱动,而驱动都必须用到微软的标准接口(流驱动是最不标准的标准了^_^).但现在看来在bsp里出现的dll(不管是不是叫驱动),是可以导出用户定义的函数接口(非微软),在应用程序里可以直接调用这些函数.

不知道上面的理解是不是对的.


非通用设备(比如感光元件,加速感应器等等),就只能自己写驱动,应用就只能调用驱动接口,而没有标准接口可用了。
这里的自己写的驱动,不是只流驱动吧?
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

12
 
如果在驱动里已经用MmMapIoSpace来映射一个物理地址域,
那么在应用程序再用MmMapIoSpace来映射同一个物理域,会怎么样呢?失败吗?
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

13
 
引用 11 楼 wohuazhen 的回复:
如果在驱动里已经用MmMapIoSpace来映射一个物理地址域,
那么在应用程序再用MmMapIoSpace来映射同一个物理域,会怎么样呢?失败吗?


不会的,
因为MmMapIoSpace申请的是堆内存,堆内存有点像链表存储,会自己增加的。

我们同一个IO会被不同的驱动覆盖就证明,这个重复映射是没有问题的。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条
电源解决方案和技术 | DigiKey 应用探索站
当月好物、电源技术资源、特色活动、DigiKey在线实用工具,干货多多~

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表