驱动开发之 用DeviceIoControl实现应用程序与驱动程序通信
1.
readfile和writefile可以实现应用程序与驱动程序通信,另外一个Win32 API 是DeviceIoControl。
应用程序自定义一中IO控制码,然后调用DeviceIoControl函数,IO管理器会产生一个MajorFunction 为IRP_MJ_DEVICE_CONTROL,MinorFun...
分类:
其他好文 时间:
2014-07-23 13:10:16
阅读次数:
220
上一节介绍了缓冲区方式读写,这一节咱们来看看直接方式读写设备。
1.
直接方式读写设备,操作系统会将用户模式下的缓冲区锁住,然后操作系统将这段缓冲区在内核模式地址再次映射一遍。这样,用户模式的缓冲区和内核模式的缓冲区指向的是同一区域的物理内存。无论操作系统如何切换进程,内核模式地址都保持不变。
创建好设备IoCreateDevice后,需要设置DO_DIRECT_IO, pDevObj...
分类:
其他好文 时间:
2014-07-23 00:12:37
阅读次数:
293
1.
设备对象一共有三种读写方式:缓冲区方式读写(Buffered方式);直接方式读写(Direct方式);Neither方式。这三种方式的Flags分别对应DO_BUFFERED_IO,DO_DIRECT_IO,0
在buffered方式中,I/O管理器先创建一个与用户模式数据缓冲区大小相等的系统缓冲区。而你的驱动程序将使用这个系统缓冲区工作。I/O管理器负责在系统缓冲区和用户模式缓冲区之间...
分类:
其他好文 时间:
2014-07-22 17:53:22
阅读次数:
255
不过根据我最近参与的某国外大型Java产品的经验(也在聊天中得到了朋友的印证),在现实中无论是用什么语言开发什么样的项目,都普遍存在一种方法论,并且还没有得到理论家的重视,被系统总结和提出过。
我准备将这种方法命名为“Bug驱动开发”( Bug-driven development)。虽然名字同样高大上,但实际上各位程序员对它都不陌生。简单地说就是发现bug——消除bug——发现新的bug,这样一个不断循环的过程驱动着开发,是谓Bug驱动开发。要运用这种方法论非常简单,只需做到以下若干条中的某一条:...
分类:
其他好文 时间:
2014-07-21 16:37:02
阅读次数:
213
引言: 看到某篇文章在说在微软8个月所学到的,想想自己也可以总结一下自己在实习的时候所学到的。半年前,我开始了在ThoughtWorks某项目的学习生涯,并在大学毕业(本科)后,在原来的团队中工作。确实对于一个刚毕业的本科学生来说在项目上有所作为,还是有些难度的。我们是作为BAU(Business as usual)程序员工作的,同样的列举一下我所学到的:那些值得称赞的敏捷开发的实践作为一家收费较...
分类:
其他好文 时间:
2014-07-19 18:17:20
阅读次数:
208
作为一个电机驱动开发方面的菜鸟,近日研究了一下通过MOS管对整流后的电源斩波用以驱动直流电机进行调速的方案。
在驱动的过程中,遇到了许多问题,当然也有许多的收获。
写下来以供自己将来查阅,也为其它菜鸟提供一些力所能及的帮助。
1.研究目标
公司使用的电机驱动原来是用的模拟电路,驱动220V的高压直流电机,但是模拟电路的构成看不懂,方案是直接“借鉴”而来(你懂的哈),所以一旦出现问题...
分类:
其他好文 时间:
2014-07-17 10:20:19
阅读次数:
183
本文摘自《嵌入式Linux驱动模板精讲与项目实践》一书中的“开发与调试技巧”。
Linux的强大威力就在于有很多开源项目可以使用,通常很多需求可以通过寻找相关的开源模块做为快速解决方案。要把这些开源模块应用到嵌入式中,其中一个关键点就是要使用交叉编译工具对开源项目进行交叉编译。
根据具体情况,下载的开源项目在组织上有很多情况,在此对各种情况进行归类介绍。
1. 下载的开源软件包找不到Ma...
分类:
系统相关 时间:
2014-07-12 18:57:32
阅读次数:
298
Debug (调试版) 汇编和 Release (发行版)
汇编的认识
调试版基本不优化,发行版则一般都优化到极致。
Windows驱动开发中,一般称为Check版本和Free版本
我们暂时只研究Debug(调试版)
for循环C实现:
int func(int a,int b)
{
int c=a+b;
int i;
for(i=0;i<50;i++){
...
分类:
编程语言 时间:
2014-07-10 23:42:14
阅读次数:
284
在做内核驱动开发的时候,可以使用/proc下的文件,获取相应的信息,以便调试。
大多数/proc下的文件是只读的,但为了示例的完整性,都提供了写方法。
方法一:使用create_proc_entry创建proc文件(简单,但写操作有缓冲区溢出的危险);
方法二:使用proc_create和seq_file创建proc文件(较方法三简洁);
方法三:使用proc_create_data和seq_file创建proc文件(较麻烦,但比较完整);
示例四:在proc文件中使用内核链表的一个示例(用的方法三)。
...
分类:
系统相关 时间:
2014-07-10 22:23:53
阅读次数:
5686
Linux驱动注册有多种方式,通常是以内核提供的表征数据结构封装后按照内核子系统提供的接口函数进行注册,还有一些是比较复杂的以链表方式进行维护。以下对几种驱动注册方式进行介绍:
一、子系统有专门的驱动注册函数:
例如RTC子系统,提供rtc_device_register注册接口函数。
例如:
rtc_device_register(client->name,&client->dev, &...
分类:
系统相关 时间:
2014-07-10 22:13:06
阅读次数:
519