开发驱动程序的过程

开发驱动程序的过程
开发驱动程序的过程

编写内核模式的代码于应用程序的代码是不同的,因为驱动程序是操作系统的信任的部分。它的代码必须遵循特殊的规则,小心的编写......

Content:编写内核模式的代码于应用程序的代码是不同的,因为驱动程序是操作系统的信任的部分。它的代码必须遵循特殊的规则,小心的编写。

驱动程序开发策略

像大多数的软件,驱动程序也使用有组织的开发方法。这个部分将介绍一些技巧来尽量减少开发时间。使用规范的开发方法

一般的,如果编写一个设备驱动程序没有一个开发策略。而是去匆忙的测试全新的硬件,往往测试代码会成为驱动程序的基础部分。也许设备驱动程序是被一些对操作系统不熟悉的程序员编写的,第一个驱动程序的编写会是一个驱动程序作者全面了解系统构架的旅程。

幸运的,疯狂的软件编写的日子过去了。在复杂的硬件和操作系统的环境下,想怎幺编写就怎幺编写的代码是不会运行的。

下面是一个简短的开发技术(它们中的一些是来自实时设计技术)列表。

1.数据流图可以将一个驱动程序分成独立的函数部分。通过这个图可以容易的看出各个部分的联系,和数据的流向。

2.状态机模型是一个描述驱动过程控制流的好的方法,特别是管理复杂的硬件和软件协议的驱动程序。在验证状态机的过程中,可能发现驱动程序中的同步问题。

3.分析期待的数据的重复率或者输入输出的响应将得到一系列定量的时序条件。对于确定驱动程序的总性能是非常重要的。

4.另一个有用的工具是外部事件和驱动程序响应动作的列表。这个列表应该包括设备的硬件事件和用户通过I/O管理器的软件事件。

使用这些技术分解一个驱动程序成为一个定义好的函数部分。有时,这些意味着分解一个简单的,单片的驱动程序一些硬件相关的端口和硬件无关的类驱动程序。在任何时候,在工程的开始,分析一个驱动程序的设计所花费的时间多于设计工程它自己,这样可以减少调试和维护的时间。

使用渐进的开发方法

一旦最初的分析和设计完成,就要开始编写代码了。按照以下的步骤进行可以减少调试的时间:

1.确定驱动程序需要哪些内核模式对象。

2.确定驱动程序需要哪些上下文环境或者状态信息和这些信息的存储位置。

3.首先编写DriverEntry和Unload例程,最初不要增加即插即用支持,这样允许通过控制面板手动的测试驱动程序的装载和卸载。

4.添加处理IRP_MJ_CREATE和IRP_MJ_CLOSE的操作和一些不需要进行设备的访问例程。然后可以使用一个简单的WIN32程序调用CreateFile和CloseHandle来测试。

5.添加寻找和分配驱动程序的硬件的代码,还有在驱动程序被卸载后的重新分配硬件的代码。如果硬件支持即插即用,这一步测试硬件和驱动程序的自动加载能力。

6.添加处理IRP_MJ_XXX函数的派遣例程,最初的例程应该没有使用物理设备,后来新的代码应该使用简单的WIN32程序进行测试,例如ReadFile和WriteFile调用,或者其它支持的函数。

7.最后完成Start I/O例程,ISR和DPC例程。现在可以使用真实的数据和硬件进行测试。

应一个有用的提示:当硬件的确切行为是不能肯定的时候,增加一个DeviceIoControl函数,这个例程直接访问设备的寄存器,这时可用一个简单的WIN32程序直接控制设备寄存器。记得在发布最后的驱动程序版本的时候删除这个功能。

使用驱动程序实例

Windows 2000驱动程序开发包(DDK)里面有相当多的驱动程序实例。有许多方法使用者些代码来使驱动程序的开发变的更容易,微软鼓励从这些代码实例中剪切和粘贴。

编码技术与习惯

编写一个信任的内核模式部分和编写应用程序是不同的。这个部分提供一些编码技术与习惯,使编写代码更加容易一些。

一般性的建议

首先,在编写驱动程序的时候应当遵循一些一般性的指导方针:

1.尽量避免使用汇编语言。因为它使代码难于阅读,没有移植性,维护困难。HAL宏提供一个安全的机制去访问I/O设备寄存器。因此,在驱动程序中级少使用汇编语言。

2.对于特定平台的代码,提供一个单独的模块,至少要用#ifdef/#endif语句将它们括起来。

3.不要使用标准的C运行时库连接驱动程序。它除了浪费存储器空间之外,一些库的例程的状态或者上下文环境不是线程安全或者驱动程序安全的方式。

4.这一条可能不适合编写设备驱动程序。天天使用运行库环境的C语言程序员,常常不清楚C程序和C运行库的差别。C运行库需要初始化,它尝试初始化一个堆区域和调用全局对象的构造器(使用C++时)。所有的这些任务防碍驱动程序的操作。

5.Windows 2000提供它自己的环境支持内核模式代码。包括RtlXxx函数(运行库)等多个公用的C语言运行库服务支持。

6.用某种源代码控制管理驱动程序工程。微软的Visual Source Safe是一个好的选择。对于大的跨平台的工程Rational公司的ClearCase也值得考虑。

命名规范

所有的大的软件工程应该为例程和变量定义制定一些标准的命名规范,设备驱动程序也不例外。好的命名规范提高开发,调试,除错和维护的效率。

微软为DDK提供一个命名规范,NTDDK.H定义所有的数据类型,结构,常数,宏。按照DDK规范,所有这些类型的名字都是大写的。甚至是C语言数据类型也提供一个相应的DDK名字。例如,C语言的数据类型void*在NTDDK.H中是PVOID。这些定义可以很容易的扩展到未来的64Bits的平台。

微软推荐将每个驱动程序例程的名字加上一个特殊的前缀。例如,编写一个鼠标类驱动程序,Start I/O 例程的名字可能是MouseClassStartIo。同样的缩写成为两个或者三个字符通常用在内部数据的命名。这样一个例程的名字可能是MouConfiguration。

头文件

除了包含NTDDK.h或者WDM.h,一个驱动程序应当使用私有的头文件去隐藏硬件和平台依赖的变量。例如,寄存器访问宏应该存储在一个私有的头文件,这些宏应该被#ifdef包括。这个技术解决在不同的I/O空间和存储器空间访问寄存器的问题。

甚至可解决移植性,寄存器访问宏是驱动程序容易阅读和维护。下列代码片段是一个并行端口设备访问的宏,这个实例假定驱动程序的一些初始化代码已经把第一个设备寄存器的地址放到设备Extension的PortBase中。

// 定义设备计存器为偏移地址

#define PAR_DATA 0

#define PAR_STATUS 1

#define PAR_CONTROL 2

//为寄存器定义访问宏,每个宏使用指向设备Extension的指针作为参数

#deinfe ParWriteData( pDevExt, bData ) \

(WRITE_PORT_UCHAR( pDevExt->PortBase + PAR_DATA, bData ) )

#define ParReadStatus( pDevExt ) \

(READ_PORT_UCHAR( pDevExt->>PortBase + PAR_STA TUS ))

#define ParWriteControl( pDevExt, bData ) \

(WRITE_PORT_UCHAR( pDevExt->PortBase + PAR_CONTROL, bData ) )

状态返回值

WIN2000的内核模式部分使用32Bits的状态值去描述一个特殊操作的结果。这些代码的数据类型是NTSTATUS,在三种情况下使用这个状态代码。

1. 使用任何WIN2000内部函数的时候,NTSTATUS值汇报调用成功或者失败。

2. I/O管理器调用一个驱动程序支持的回调例程,例程通常返回一个NTSTATUS值给系统。

3. 在完成I/O请求的处理之后,驱动程序必须用一个NTSTA TUS值标记IRP,这个值最终被映射到一个Win32 ERROR_XXX代码。NTSTATUS代码于Win32 error代码不是同一回事。I/O管理器提供它两个之间的映射。DDK的帮助描述它们的映射关系,它值得一读。

NTSTATUS.h中描述大量的NTSTA TUS值的符号名。所有的这些名字是STA TUS_XXX的形式,XXX 描述真正的状态信息。STATUS_SUCCESS,STATUS_NAME_EXISTS都是这些名字的实例。

当一个系统例程返回一个NTSTATUS值,DDK头文件提供一个方便的宏去测试调用的成功于失败信息。下面的代码片段解释了这个技术:

NTSTATUS status;

:

status = IoCreateDevice ( ... );

if ( !NT_SUCCESS( status )) { // 产生错误,清除和退出

: }

一定要检查系统例程调用的返回值,否则错误将传送给驱动程序代码的其它部分,也可能是系统代码。尽早的捕捉到错误是软件工程师的主要的规则。

开发驱动程序的过程[3]

Windows 2000驱动程序支持的例程

I/O管理器和WIN2000其它的内核模式部分提供大量的供驱动程序调用的函数。DDK文文件描述了这些函数。现在,指出WIN2000支持的例程种类已经足够。如表5.1所示:

表5.1WIN2000支持的例程种类

Executive :存储器分配,互锁队列区域,监控列表,系统工作者线程,ExXxx()

HAL:设备寄存器,总线访问,HalXxx()

I/O Manager:普通驱动程序支持,IoXxx()

Kernel:DPC,同步,KeXxx()

Memory Manager:虚拟存储器到物理存储器的映射,存储器分配,MmXxx()

Object Manager:句柄管理,ObXxx()

Process Manager:系统线程管理,PsXxx()

Runtime library:字符串操作,大整数运算,寄存器访问,安全性函数,时间和日期函数,队列和列表支持,RtlXxx() (大部分的例程)

Security Monitor:特权检查,安全描述符函数,SeXxx()

(Miscellaneous)

内部系统服务

ZwXxx()

ZwXxx函数需要更多的说明。它们实际上是为所有的NtXxx用户模式系统服务的内部调用接口。用户模式和内核模式接口时不同的,ZwXxx函数不执行任何参数校验。虽然这样的函数有很多,DDK文件仅仅描述很少一部分。使用无正式文件的函数是一个冒险,因为微软在未来可能改变或者删除这些函数。

I/O管理器提供几个方便的函数,它们包装了一个或者多个对其它内核模块的低级的调用,应该尽量使用它们。

丢弃初始化例程

一些编译器支持声明某些函数函数可以丢弃的选项。被选中的函数在驱动程序完成加载后被移出存储器,这样使驱动程序更小。最好使用这种开发环境。

可以丢弃的函数是DriverEntry和那些只是被DriverEntry调用的子程序。以下的代码片段描写怎样利用可以丢弃的代码(使用微软的C程序开发环境):

#ifdef ALLOC_PRAGMA

#pragma alloc_text( init, DriverEntry )

#pragma alloc_text( init, FuncCalledByDriverEntry )

#pragma alloc_text( init, OtherFuncCalledByDriverEntry )

#endif

alloc_text pragma必须出现在函数名声明之后,定义之前。在pragma声明中的函数必须在同一个编辑单元。

控制驱动程序分页

没分页的系统存储器是宝贵的资源。驱动程序可以定义适当的例程到分页的存储器来减少非分页存储器的负担,任何IRQL是PASSIVE_LEVEL的函数可以在分页的存储器中运行,包括Reinitialize例程,Unload 例程,Shutdown例程,Dispatch例程,线程函数以及任何运行在PASSIVE_LEVEL IRQL的帮助函数。再一次,是alloc_text pragma执行这个声明,例子如下:

#ifdef ALLOC_PRAGMA

#pragma alloc_text( page, Unload )

#pragma alloc_text( page, Shutdown )

#pragma alloc_text( page, DispatchRead )

#pragma alloc_text( page, DispatchHelper )

#endif

最后,如果整个驱动程序很少使用,它可以被暂时的被翻出存储器。MmPageEntireDriver例程不管驱动程序声明的存储器管理属性,就将整个模块暂时的翻页。这个函数应该在DriverEntry例程的末尾调用和当不再打开任何它的设备句柄时从IRP_MJ_CLOSE的派遣例程,当使用这个驱动程序的时候,就在IRP_MJ_CREATE的派遣例程中调用MmResetDriverPaging来使驱动程序的页属性恢复正常。

当使用者个技术的时候,注意两件事:

1.调用MmPageEntireDriver时,确定没有IRP被驱动程序的高级IRQL部分处理。

2.当ISR被分页的时候,确定没有设备中断到达。

开发驱动程序的过程[4]

程序设计涉及的一个重大的方面是分配存储单元。不幸的是,驱动程序不能简单的调用malloc和 free,或者new和delete。要确定分配正确类型的存储器,使用完毕后必须释放分配的存储器,因为内核模式代码没有自动清除机制......

驱动器存储器分配

程序设计涉及的一个重大的方面是分配存储单元。不幸的是,驱动程序不能简单的调用malloc和 free,或者new和delete。要确定分配正确类型的存储器,使用完毕后必须释放分配的存储器,因为内核模式代码没有自动清除机制。

驱动程序可用的存储器

驱动程序有三种分配存储器的选择。标准的分配存储器的选择依靠持续事件,大小,IRQL来确定。可用的选择是:

1.内核堆栈:内核模式堆栈在驱动程序例程执行期间给局部变量提供有限数量的非分页存储空间。

2.分页池:运行在DISPATCH_LEVEL IRQL以下的例程可以有一个称作分页池的堆。这个区域的存储器是可分页的,当它访问的时候可能产生缺页故障。

3.非分页池:运行在提高IRQL的例程需要从一个称作非分页池的堆空间中分配暂时的存储空间。系统保证非分页池中的虚空间总是在物理存储器空间中。I/O管理器创建的设备和控制器Extension就存储在这个区域。

因为驱动程序必须是可重入的,所以除了只读数据之外从不分配全局变量。否则,一个线程尝试存储数据到的全局变量,与另一个线程的读写将可能是同一个数据。

当然,驱动程序的局部静态变量同样糟糕。驱动程序的状态信息必须存储在其它的地方,例如像以前介绍的设备Extension。

使用内核堆栈

在80X86的平台上,内核堆栈的大小仅仅是12Kbyte,在其它的平台上,内核堆栈的大小是16Kbyte。因此,内核堆栈是宝贵的资源,内核堆栈溢出将导致异常。遵循以下指导方针可以避免内核堆栈溢出:

1.不要设计有很深的嵌套的内部例程,保持调用树尽量平坦。

2.应尽量避免递归,必须的时候应当限制递归的深度。驱动程序不是进行Fibonacci级数运算的地方。

3.不要使用内核堆栈来创建大的数据结构,大的数据结构应该在池中创建。

另一个内核堆栈的特性是它存在于高速缓冲存储器中,所以它不能用作DMA操作,DMA的缓冲区应该在非分页池中。

使用缓冲池

使用内核例程ExAllocatePool和ExFreePool在缓冲池中分配存储空间。

这些函数允许分配下列存储空间:

1. NonPagedPool:IRQL高于或者等于DISPATCH_LEVEL的驱动程序例程可用的存储器。

2. NonPagedPoolMustSucceed:驱动程序继续操作的重要的临时存储空间。在紧急的情况下使用这种存储空间,使用后要尽快释放。实际上,如果分配失败将会产生异常。

3. NonPagedPoolCacheAligned:保证CPU高速缓存线的自然边界对齐的存储器,驱动程序使用这中存储器作为永久的I/O缓冲区。

4. NonPagedPoolCacheAlignedMustS:对驱动程序重要的操作的临时缓冲区。末尾的S表示成功。像之

前的MustSucceed操作这个请求大概从没有被使用过。

5. PagedPool:有被IRQL低于DISPATCH_LEVEL的例程使用。通常,这些包括驱动程序的初始化,清除,派遣例程和任何内核模式的线程。

6. PagedPoolCacheAligned:它是文件系统使用的I/O缓冲区存储空间。

使用系统存储器的时候,记得下列几点:

1.缓冲池是珍贵的系统资源,不要太奢侈,尤其是非分页区域。

2.当分配或者释放非分页存储器驱动程序必须在或者高于DISPA TCH_LEVEL的IRQL上执行。驱动程序必须执行在或者低于below APC_LEVEL的IRQL上分配或者释放分页存储器。

3.尽快释放不再使用的存储器,否则系统在缺少存储器的情况下运行效率会变低。特别的,要确认在卸载驱动程序的时候归还空间给缓冲池。

存储器再分配

一般地,驱动程序应当避免常常分配和释放小于PAGE_SIZE bytes的缓冲池,这样使缓冲池中产生碎片而不能被其它内核模式代码使用。如果必须这样的话,就分配一个大块的存储区域和提供一个再分配子程序去分配它们。

实际上,一个C程序员可能编写自己的在一个大的缓冲池中分配和释放存储空间的子程序,一个C++程序员可能重载new和delete操作。

一些驱动程序需要管理一些小的固定尺寸的存储块。例如,SCSI驱动程序必须提供一个SCSI请求块(SRBs),它被用来发送命令给SCSI设备。内核提供两个不同的处理在分配的机制:区域缓冲区

区域缓冲区是一块驱动程序分配的缓冲池。Executive例程提供管理分页或者非分页存储器中的固定尺寸的存储块。

使用区域缓冲区时要注意同步,特别的,如果一个中断服务,DPC,派遣例程都需要访问统一个区域缓冲区,这时要使用一个Executive自旋锁来同步。如果所有的访问操作在统一个IRQL水平,可以使用一个互斥体代替。

在安装区域缓冲区之前,必须了解ZONE_HEADER数据结构。区域缓冲区或者快速互斥体对象必须声明和初始化。下面是管理区域缓冲区的步骤:

1.调用ExAllocatePool请求区域缓冲区,然后使用ExInitializeZone初始化它,这个步骤常常在DriverEntry例程中执行。

2.调用ExAllocateFromZone或者ExInterlockedAllocateFromZone从区域缓冲区分配一个块,后者使用一个自旋锁去同步访问区域缓冲区。前者的同步工作留给了驱动程序代码。

3.调用ExFreeToZone或者InterlockedFreeToZone释放分配的块。

4.在驱动程序的Unload例程,使用ExFreePool释放整个区域缓冲区的存储空间。在释放区域缓冲区的时候,必须确定区域缓冲区中的块都被释放。

一个区域缓冲区应该不大于必要的空间,MmQuerySystemSize可以得到可用的系统存储空间的总数,另一个Executive函数MmIsThisAnNTAsSystem是用来检查当前的平台是否是WIN2000的服务器版本,运行在服务器版本的驱动程序可以分配稍微大一点的空间。

如果在区域缓冲区中分配存储块失败,驱动程序将使用标准的缓冲池去得到请求的块,这个策略需要一个清楚的结构去指出分配是来自区域缓冲区还是缓冲池。这样才能调用合适的例程释放这个块。

通过ExExtendZone或者ExInterlockedExtendZone可以使存在的区域缓冲区的更大,但是这些函数很少被使用,系统好象不能正确的分配额外的区域缓冲区,实际上,微软有考虑过废除整个区域缓冲区的抽象。WIN2000提供一个更加有效的监视列表构架。

监视列表

监视列表(Lookaside List)是一个固定尺寸存储块的一个连接列表,不像区域缓冲区,根据系统状态的不同监视列表可以动态的增大或者减小。因此合适大小的监视列表可能较少的浪废存储空间。

于区域缓冲区相比,在监视列表上使用同步机制更加有效,如果CPU构建中有一个8-byte比较交换指令,Executive使用它去使访问监视列表的操作连续。在没有这个指令的平台上,对于非分页池就使用一

个自旋锁,对于分页池就使用一个互斥体。

在使用监视列表之前,必须声明一个NPAGED_LOOKASIDE_LIST或者

PAGED_LOOKASIDE_LIST(依赖于存储空间是否分页)结构,下面介绍监视列表的管理过程:

1.使用ExInitializeNPagedLookasideList或者ExInitializePagedLookasideList函数初始化列表的头结构,通常DriverEntry或者AddDevice例程执行这个任务。

2.调用ExAllocateNPagedLookasideList或者ExAllocatePagedLookasideList从监控列表分配一个块,可以在驱动程序的任何地方调用这两个例程。

3.调用ExFreeTonPageLookasideList或者ExFreeToPageLookasideList释放块。

4.调用ExDeleteNPagedLookasideList或者ExDeletePagedLookasideList释放任何于监控列表相关联的资源,这个函数通常在驱动程序的Unload或者RemoveDevice例程中执行。

监控列表初始化函数简单的设置列表头,它们不实际的分配存储器给列表。初始化函数请求列表可以拥有的最大数量(称作列表的深度)的块。

当使用分配函数的时候,系统才分配需要数量的存储空间,当块被释放,他们被添加到监控列表,直到最大允许深度。任何块的释放将导致存储空间被释放到系统,这样一段时间之后,在监控列表中的块数量将趋近于列表深度附近。

要小心控制监控列表的深度,如果太浅,系统会常常执行昂贵的分配和释放的动作,如果太深,会造成存储空间的浪费。列表头结构的统计数字可以帮助决定列表深度。

(整理)嵌入式系统的以太网接口设计及linux内核网络设备驱动.

嵌入式系统的以太网接口设计及linux驱动 1 以太网概述 以太网(Ethernet)是当今局域网采用的最通用的通信协议标准。在以太网中,所有计算机被连接在一条电缆上,采用带冲突检测的载波侦听多路访问(CSMA/CD)方法,采用竞争机制和总线拓扑结构。基本上,以太网由共享传输媒体,如双绞线电缆或同轴电缆、多端口集线器、网桥或交换机构成。 按照OSI(Open System Interconnection Reference Model,开放式系统互联参考模型)7层参考模型,以太网定义的是物理层(PHY)和数据链路层(对应以太网的MAC层)的标准。 2 嵌入式处理器上扩展以太网接口 以太网接口控制器主要包括MAC乘PHY两部分,如图1所示为嵌入式处理器集成MAC层控制器。 MAC层控制器和PHY的连接是通过MII、RMII等接口实现的。在IEEE802的标准系列中,数据链路层包括LLC和MAC两个子层。其中MAC负责完成数据帧的封装、解封、发送和接受功能。PHY层的结构随着传输速率的不同而有一定的差异。对于1OBaseT等网络,从以太网PHY芯片输出的就是传输所需的差分信号。但是还需要一个网络隔离变压器组成图2的结构。网络隔离变压器可起到抑制共模干扰、隔离线路以及阻抗匹配等作用。 本文介绍一种新款网络接口芯片DM9000A,它可以很方便的实现与嵌入式CPU的接口,实现扩展以太网口的功能。DM9000A是中国台湾DAVICOM公司推出的一款高速以太网接口芯片,其基本特征是:集成10/100M物理层接口;内部带有16K字节SRAM用作接收发送的FIFO缓存;支持8/16bit两种主机工作模式:

监控软件设备驱动程序的编程与实现

监控软件设备驱动程序的编程与实现 0 前言 在专业监控软件出现以前,自动控制系统集成人员的一个重要任务就是编写专门的系统上位监控程序。但是,在实际工程中我们发现:一方面,由于各编程人员的水平参差不齐,许多软件的功能和可靠性都存在问题;另一方面,由于每个编程人员的编程习惯和编程思路都不同,程序的可读性和功能的扩展性都比较差。因此,功能强大、实用面广的专业监控软件就应运而生。如MCGS监控软件、组态王控软件等。由于现场智能仪表、采集板的多种多样,监控软件自带的设备驱动程序毕竟有限,因此编制设备驱动程序就成了自控系统集成工程师的重要工作之一。 本文以北京昆仑通态公司开发的MCGS为例来说明监控软件设备驱动程序的一般思路。MCGS是基于Windows95和WindowsNT平台,为用户提供了从数据采集到数据处理、报警处理、流程控制、动画显示、报表输出等解决实际工程问题的完整方案和操作工具。MCGS允许用户在VisualBasic中操作MCGS中的对象,提供了一套开放的可扩充接口,用户可根据自己的需要用VB编制特定的功能构件来扩充系统的功能。 1接口原理 许多组态软件提供了设备驱动程序软件开发包,支持用户用VB、VC、Delphi等高级编程语言编制设备驱动程序。MCGS组态软件驱动程序编程原理框图如图1所示: 几乎所有的PLC、智能仪表、采集板卡都提供了驱动软件,有的在说明书中还提供了驱动软件的核心代码、函数或数据结构。而监控软件也提供了开放性的可扩充接口,一般包括属性函数、方法函数、IO端口操作函数和串口操作函数等。在运行模式下,监控软件定时或在事件激发时调用设备驱动程序,而设备驱动程序根据需要,再调用设备核心函数。例如,MCGS在组态模式下按在线帮助按钮就会调用GetDevHelp接口,显示设备构件的在线帮助;按内部属性按钮时就会调用SetDevPage接口,显示设备构件的特定属性页。在运行环境下,MCGS首先调用一次InitDevRun接口对设备进行一些必须的初始化工作。

驱动程序

linux 驱动程序设计实验 一实验目的 1.了解LINUX操作系统中的设备驱动程序的组成 2.编写简单的字符设备驱动程序并进行测试 3.编写简单的块设备驱动程序并进行测试 4.理解LINUX操作系统的设备管理机制 二准备知识 1. LINUX下驱动程序基础知识 Linux抽象了对硬件的处理,所有的硬件设备都可以像普通文件一样来看待:它们可以使用和操作文件相同的、标准的系统调用接口来完成打开、关闭、读写和I/O控制操作,而驱动程序的主要任务也就是要实现这些系统调用函数。在Linux操作系统下有两类主要的设备文件:一类是字符设备,另一类则是块设备。字符设备是以字节为单位逐个进行I/O操作的设备,在对字符设备发出读写请求时,实际的硬件I/O紧接着就发生了,一般来说字符设备中的缓存是可有可无的,而且也不支持随机访问。块设备则是利用一块系统内存作为缓冲区,当用户进程对设备进行读写请求时,驱动程序先查看缓冲区中的内容,如果缓冲区中的数据能满足用户的要求就返回相应的数据,否则就调用相应的请求函数来进行实际的I/O操作。块设备主要是针对磁盘等慢速设备设计的,其目的是避免耗费过多的CPU时间来等待操作的完成。一般说来,PCI卡通常都属于字符设备。 我们常见的驱动程序就是作为内核模块动态加载的,比如声卡驱动和网卡驱动等,这些驱动程序源码可以修改到内核中,也可以把他们编译成模块形势,在需要的时候动态加载. 而Linux最基础的驱动,如CPU、PCI总线、TCP/IP协议、APM (高级电源管理)、VFS等驱动程序则编译在内核文件中。有时也把内核模块就叫做驱动程序,只不过驱动的内容不一定是硬件罢了,比如ext3文件系统的驱动。当我们加载了设备驱动模块后,应该怎样访问这些设备呢?Linux是一种类Unix系统,Unix的一个基本特点是“一切皆为文件”,它抽象了设备的处理,将所有的硬件设备都像普通文件一样看待,也就是说硬件可以跟普通文件一样来打开、关闭和读写。 系统中的设备都用一个设备特殊文件代表,叫做设备文件,设备文件又分为Block (块)型设备文件、Character(字符)型设备文件和Socket (网络插件)型设备文件。Block设备文件常常指定哪些需要以块(如512字节)的方式写入的设备,比如IDE硬盘、SCSI硬盘、光驱等。而Character型设备文件常指定直接读写,没有缓冲区的设备,比如并口、虚拟控制台等。Socket(网络插件)型设备文件指定的是网络设备访问的BSD socket 接口。 设备文件都放在/dev目录下,比如硬盘就是用/dev/hd*来表示,/dev/hda表示第一个IDE 接口的主设备,/dev/hda1表示第一个硬盘上的第一个分区;而/dev/hdc 表示第二个IDE接口的主设备。对于Block和Character型设备,使用主(Major)和辅(minor)设备编号来描述设备。主设备编号来表示某种驱动程序,同一个设备驱动程序模块所控制的所有设备都有一

windows驱动开发和调试环境搭建

Windows驱动开发和环境搭建 【文章标题】: Windows驱动开发和调试的环境设置 【文章作者】: haikerenwu 【使用工具】: VC6.0,VMware6.0.3,Windbg 【电脑配置】: 惠普笔记本xp sp3 (一)VMWare安装篇 VMWare的安装一路Next即可,关于其序列号,百度一下就能找到,虚拟机安装完成之后,需要安装操作系统,我在虚拟机中安装的是windows xp sp2系统。 点击“文件”----“新建”----“虚拟机” 进入新建虚拟机的向导,配置虚拟系统参数

选择虚拟系统文件的兼容格式(新手推荐选择默认选项) 按照默认设置继续点击下一步,选择好您需要的操作系统,此处我选择的是Windows XP Prefessional。 设置虚拟机名称和虚拟操作系统安装路径,我单独空出来一个F 盘,将虚拟机和虚拟操作系统全部装在该盘。

配置网络模式(推荐选择NA T,一般主机不用做任何的设置虚拟机就可以利用主机上网)。 配置虚拟磁盘的容量。在这里可以直接单击完成,来完成基本操作设置,磁盘默认空间是8GB,用户可以根据自己的实际使用情况来调整大小,也可以自定义分区。

操作完成之后,在“VM”菜单下有个“setting。。。”菜单,点击此菜单,在CD-ROM中选择合适的选项,我使用的是Use ISO image 选项,将我的xp sp2操作系统的ISO映像路径设置好,安装操作系统。点击ok之后,启动虚拟机,即开始安装操作系统,安装过程跟普通装机过程相同。安装完成之后,启动操作系统,然后在VM菜单下点击“Install VMWare Tools”,把虚拟操作系统的驱动装好。 (二)VMWare设置篇

设备驱动程序

驱动程序 驱动程序一般指的是设备驱动程序(Device Driver),是一种可以使计算机和设备通信的特殊程序。相当于硬件的接口,操作系统只有通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。 因此,驱动程序被比作“硬件的灵魂”、“硬件的主宰”、和“硬件和系统之间的桥梁”等。 中文名 驱动程序 外文名 Device Driver 全称 设备驱动程序 性质 可使计算机和设备通信的特殊程序 目录 1定义 2作用 3界定 ?正式版 ?认证版 ?第三方 ?修改版 ?测试版 4驱动程序的开发 ?微软平台 ?Unix平台 5安装顺序 6inf文件 1定义 驱动程序(Device Driver)全称为“设备驱动程序”,是一种可以使计算机和设备通信的特殊程序,可以说相当于硬件的接口,操作系统只能通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。 惠普显卡驱动安装 正因为这个原因,驱动程序在系统中的所占的地位十分重要,一般当操作系统安装完毕后,首要的便是安装硬件设备的驱动程序。不过,大多数情况下,我们并不需要安装所有硬件设备的驱动程序,例如硬盘、显示器、光驱等就不需要安装驱动程序,而显卡、声卡、扫描仪、摄像头、Modem等就需要安装驱动程序。另外,不同版本的操作系统对硬件设

备的支持也是不同的,一般情况下版本越高所支持的硬件设备也越多,例如笔者使用了Windows XP,装好系统后一个驱动程序也不用安装。 设备驱动程序用来将硬件本身的功能告诉操作系统,完成硬件设备电子信号与操作系统及软件的高级编程语言之间的互相翻译。当操作系统需要使用某个硬件时,比如:让声卡播放音乐,它会先发送相应指令到声卡驱动程序,声卡驱动程序接收到后,马上将其翻译成声卡才能听懂的电子信号命令,从而让声卡播放音乐。 所以简单的说,驱动程序提供了硬件到操作系统的一个接口以及协调二者之间的关系,而因为驱动程序有如此重要的作用,所以人们都称“驱动程序是硬件的灵魂”、“硬件的主宰”,同时驱动程序也被形象的称为“硬件和系统之间的桥梁”。 戴尔电脑驱动盘 驱动程序即添加到操作系统中的一小块代码,其中包含有关硬件设备的信息。有了此信息,计算机就可以与设备进行通信。驱动程序是硬件厂商根据操作系统编写的配置文件,可以说没有驱动程序,计算机中的硬件就无法工作。操作系统不同,硬件的驱动程序也不同,各个硬件厂商为了保证硬件的兼容性及增强硬件的功能会不断地升级驱动程序。如:Nvidia显卡芯片公司平均每个月会升级显卡驱动程序2-3次。驱动程序是硬件的一部分,当你安装新硬件时,驱动程序是一项不可或缺的重要元件。凡是安装一个原本不属于你电脑中的硬件设备时,系统就会要求你安装驱动程序,将新的硬件与电脑系统连接起来。驱动程序扮演沟通的角色,把硬件的功能告诉电脑系统,并且也将系统的指令传达给硬件,让它开始工作。 当你在安装新硬件时总会被要求放入“这种硬件的驱动程序”,很多人这时就开始头痛。不是找不到驱动程序的盘片,就是找不到文件的位置,或是根本不知道什么是驱动程序。比如安装打印机这类的硬件外设,并不是把连接线接上就算完成,如果你这时候开始使用,系统会告诉你,找不到驱动程序。怎么办呢参照说明书也未必就能顺利安装。其实在安装方面还是有一定的惯例与通则可寻的,这些都可以帮你做到无障碍安装。 在Windows系统中,需要安装主板、光驱、显卡、声卡等一套完整的驱动程序。如果你需要外接别的硬件设备,则还要安装相应的驱动程序,如:外接游戏硬件要安装手柄、方向盘、摇杆、跳舞毯等的驱动程序,外接打印机要安装打印机驱动程序,上网或接入局域网要安装网卡、Modem甚至ISDN、ADSL的驱动程序。说了这么多的驱动程序,你是否有一点头痛了。下面就介绍Windows系统中各种的不同硬件设备的驱动程序,希望能让你拨云见日。 在Windows 9x下,驱动程序按照其提供的硬件支持可以分为:声卡驱动程序、显卡驱动程序、鼠标驱动程序、主板驱动程序、网络设备驱动程序、打印机驱动程序、扫描仪驱动程序等等。为什么没有CPU、内存驱动程序呢因为CPU和内存无需驱动程序便可使用,不仅如此,绝大多数键盘、鼠标、硬盘、软驱、显示器和主板上的标准设备都可以用Windows 自带的标准驱动程序来驱动,当然其它特定功能除外。如果你需要在Windows系统中的DOS 模式下使用光驱,那么还需要在DOS模式下安装光驱驱动程序。多数显卡、声卡、网卡等内置扩展卡和打印机、扫描仪、外置Modem等外设都需要安装与设备型号相符的驱动程序,否则无法发挥其部分或全部功能。驱动程序一般可通过三种途径得到,一是购买的硬件附

触摸屏接口硬件编写驱动程序

尽管触摸屏正在迅速普及开来,但大多数开发人员以前从来没有开发过触摸屏产品。本文详细介绍了触摸屏产品的设计步骤,指导读者了解使触摸屏首次工作需要的软硬件细节。 触摸屏如今随处可见。工业控制系统、消费电子产品,甚至医疗设备上很多都装备了触摸屏输入装置。我们平时不经意间都会用到触摸屏。在ATM机上取款、签署包裹,办理登机手续或查找电话号码时都可能会用到触摸屏。 本文介绍了二种较新的CPU,它们都内建了对触摸屏输入的支持。本文将介绍如何编写软件驱动程序,从而能够使用这些微处理器配置、校准触摸屏以及对触摸屏输入持续响应。最终将提供可免费下载和使用的工作代码,作为读者进一步设计的基础。 触摸屏作为输入手段的优点和缺点 没有一种输入方式是十全十美的,对某些特定的应用和产品类型来说,触摸屏不是最好的输入手段。为了让读者清楚的了解触摸屏的特性,下面先概括使用触摸屏作为输入手段的优点和缺点。 首先是优点:触摸屏不可否认的具有酷的感觉,立刻就能使产品的使用变得更有乐趣。同时触摸屏也非常直观。当用户想要选择A选项时,他伸出手指碰一下A 选项就可以了。这还不够直观吗?连两岁的婴儿都知道怎样伸手去触摸他(或她)想要的东西。 最后要说的是,触摸屏作为输入装置和系统固定在了一起。如果用户忘记遥控器或鼠标放的位置,就会无法进行输入。而如果具有触摸屏的设备放在用户前面,用户马上就可以用触摸屏进行输入。 再说缺点,触摸屏可能会在不合适的场合下被错误的使用。这里我是指对安全性要求严格的设备,对于这些设备,如果没有适当的预防措施,使用触摸屏会非常危险。下面我将概括一些最明显的潜在的问题,如果读者想作更进一步的了解,可以参考更多的资料。 第一个问题是视差,即屏幕上看到的对象的位置与其在触摸面板上的实际有效位置之间的差异。图1说明了这个问题。我能想到的最佳例子是典型的“免下 车”ATM机。这种ATM机不会根据汽车的高度升高或降低自己的高度,因此如果你坐在较高的SUV或卡车里,那么你就会从抬高的位置俯视显示屏。为了保护昂贵的显示器件免受恶意破坏,ATM机都会在用户和显示屏之间放置几层强化玻璃。 触摸屏是不能这样保护的。如果真这样做的话,用户就无法进行触摸了。因此触摸屏放在表层上,而显示屏放在表层下的几层玻璃后面。这就造成了触摸层和显示层之间的物理隔离。如果用户以某个角度观看屏幕,就意味着用户按压触摸屏进行选择的位置会与用户接口软件预期的输入位置之间存在一定的距离偏差。

Windows驱动开发培训

Windows驱动开发培训 培训流程: 一、基础知识 在开始驱动开发之前,您应该知道操作系统原理以及驱动程序是如何在操作系统中进行工作的,了解这些基本原理将有助于您做出正确的设计决策并简化您的开发过程。 1、了解Windows操作系统构造\\ 可以链接进去 2、安装WDK,参考相关文档,熟悉WDK的内容\\ 可以链接进去 二、Windows驱动开发\\ 可以链接进去 一、基础知识 在开始驱动开发之前,您应该知道操作系统原理以及驱动程序是如何在操作系统中进行工作的,了解这些基本原理将有助于您做出正确的设计决策并简化您的开发过程。 1、了解Windows操作系统构造 (1)培训目标 深入了解Windows操作系统的系统结构以及工作原理 (2)培训内容 阅读书籍《深入解析Windows操作系统》的第3、4、6、7、9章,重点关注第九章“I/O系统” (3)培训任务 ①掌握Windows操作系统的系统结构 ②理解ISR、IRP、IRQL、DCP等概念的含义 ③了解注册表的用法,掌握注册表数据的查看和修改方法 ④了解进程和线程的内部机理以及线程的调度策略 ⑤了解I/O系统的内容,理解I/O请求以及I/O处理过程 注:以上相关内容,请在一周内完成。

2、安装WDK,参考相关文档,熟悉WDK的内容 (1)培训目标 了解WDK的安装过程,熟悉WDK的编译环境,掌握如何使用WDK的相关帮助文档;了解WDM驱动程序的基本结构 (2)培训内容 ①.阅读文档\\10.151.131.12\book\windows\MSWDM.chm,掌握WDM驱动程序的基本结构以及基本的编程技术。 ②.参考WDK的帮助文档:WDK documentation ,了解WDK的基本内容 (3)培训任务 ①理解分层驱动结构的含义,掌握设备和驱动程序的层次结构 ②理解“驱动对象”和“设备对象”的概念 ③理解2个基本例程:DriverEntry 和addDevice ④了解IRP的结构以及IRP处理的流程 ⑤初步了解I/O的控制操作 注:以上相关内容,请在一周内完成。 二、Windows驱动开发 学习如何基于WDK进行驱动程序的开发 1、培训目标 (1)学会根据WDK开发一个基本的Windows驱动程序和测试程序 (2)学会利用不同的IOCTL方式在内核模式和用户模式之间进行通讯 (3)学会如何在内核模式下和用户模式下访问注册表 (4)利用WinDbg跟踪程序,学会使用WinDbg进行调试 2、培训内容 (1)阅读\src\general\ioctl中的示例代码 (2)build并运行应用程序和驱动程序

接口技术-基于MPC860 PCMCIA的双以太网接口驱动设计

基于MPC860 PCMCIA的双以太网接口驱动设计 (华中科技大学)郝东,杜旭 摘要:MPC860芯片因其强大的通信处理能力和多种协议的支持而被广泛应用于通信领域。但其内部模块仅支持一个10/100M自适应以太网口,限制了应用。本文提出了一种基于其PCMCIA接口扩展的双100M以太网接口的方案,分析了相关驱动程序设计的关键问题。 关键词:嵌入式系统,MPC860,PCMCIA, Linux设备驱动 中图分类号:TP302.1 文献标识码: A 国家十五科技攻关计划:2001BA205A08-09 The Driver Design Of Dual Ethernet Ports Based On MPC860 PCMCIA Interface HAO Dong,DU Xu Abstract: Due to the strong ability of communication processing and support to many protocols, MPC860 is widely used in communication area. But it can only provide one 10/100M adaptable Ethernet interface directly by its internal modules, which limits its application. This paper gives out a solution based on the PCMCIA interface of MPC860 and analyzes key problems of the related driver design. Key words:Embedded System,MPC860,PCMCIA,Linux Device Driver 1.引言 MPC860是互联网络和数据通信及控制领域使用较多、性能相当优越的嵌入式微处理器,其内部集成的CPM (Communication Processor Module) 能完成UART、HDLC、Ethernet 等多种协议的通信控制和处理。然而当应用系统需要两个以上的10M/100M自适应以太网口时, 仅靠片内的通信控制模块便不能满足需求,这是因为:MPC860内部仅有FEC(Fast Ethernet Controller)能实现一个10/100M自适应以太网口,而SCC(Serial Communication Controller)仅支持10M以太网。为了达到应用要求,可以通过MPC860的双PCMCIA接口扩展出两个10/100M自适应以太网口。本文基于这种双PCMCIA扩展以太网口的硬件结构分析了相关驱动程序设计中的关键问题。 2.电路分析和设计 应用中我们选用了ASIX公司的AX88790芯片。AX88790芯片内部集成了10/100M MAC (Media Access Control) 控制器、PHY(Physical Layer Device)和收发器,符合IEEE802.3 / IEEE802.3u标准,提供兼容PCMCIA 2.1+规范的PCMCIA接口,完全满足我们的应用需求。 注:x为A/B对应第A/B路PCMCIA接口;DIR为缓冲方向控制信号,/OE1,/ OE2分别为高字节,低字节输出使能信号,G1,G2,OC,G为使能或片选输入信号 图 1 扩展以太网口的硬件结构 在MPC860的PCMCIA读写控制信号中, /IORD、/IOWR、/OE、/WE和/REG信号由两个PCMCIA接口所共用,而/CE1,/CE2信号为每个接口分别一组, PCMCIA数据信号

驱动程序的接口设计

驱动程序的接口设计 WinCE下的驱动皆以动态链接库的形式存在。驱动实现中可以调用所有的标准API。WinCE的两种驱动模型——本机驱动模型和流接口驱动模型——其中本机驱动模型用于低级、内置设备,实现一组特定的接口函数;而流接口驱动模型是基本的驱动类型,提供一组通用设备接口,适用于多种设备。本设计采用的ADC驱动为数据采集驱动,是整个数据采集系统的核心。首先介绍几个流接口驱动的接口函数: (1)ADC_Init: 函数原型:DWORD ADC_Init(LPCTSTR Identifier) 功能描述:软件资源初始化,硬件地址空间映射,硬件初始化,中断注册。 参数描述:Identifier为字符串指针,指向本驱动在注册表标识符路径键值。 实现要点:本函数的关键部分在于对硬件地址空间的映射,通Virtualalloc,Viirtualcopy将I/O寄存器、中断寄存器、PWM寄存器和存储器地址空间映射到系统内存空中去;此外还要对硬件进行系统启动后的第一次初始化,包括中断硬件初始化和注册、fifo的清零和采集的禁止等。注意为保证系统的稳定和低功耗,在本函数运行后,数据采集器处于禁止中断和电源关闭状态。 具体使用:ADC_Init会把设备内容指针传递给ADC_Open。 (2)ADC_Deinit: 函数原型:BOOL ADC_Deinit(PADC_Info pContext) 功能描述:软件资源释放,硬件反初始化,中断屏蔽。 参数描述:pContext是驱动软件结构体指针。 实现要点:本函数为ADC_Init的逆向操作。 具体使用:释放了ADC_Init中分配的资源。 (3)ADC_Open: 函数原型:DWORD ADC_Open(DWORD pContext,DWORD AccessCode,DWORD ShareMode) 功能描述:打开设备,AD上电,禁止中断,禁止触发,清除FIFO,数据缓冲区初始化。 参数描述:pContext是驱动软件结构体指针;AccessCode为读写访问权限。 制模式码:ShareMode为共享访问权限控制模式码。 应用接口:CreateFile 实现要点:本函数主要功能是开启设备电源,并确保其初始化状态可靠,因此其中部分操作与系统初始化阶段类似。注意在本操作结束后,采集器仍处于禁

USB驱动程序安装说明

USB编程电缆驱动程序安装说明 概述 USB编程电缆或USB接口产品是通过将电脑的USB接口模拟成传统的串行口(通常为COM3),从而使用现有的编程软件或通信软件,通过编程电缆与PLC 等设备的传统接口进行通信。 功能 ●支持的操作系统Windows2000/Windows XP ●完全兼容USB 2.0规范 ●USB总线供电(非隔离产品)、或USB总线供电与PLC的编程口同时供 电(隔离型产品) ●波特率:300bps~1Mbps自动适应 ●每台PC只支持一个USB接口转换产品(如一台电脑需使用多个USB 接口产品,需为各个USB接口产品设置不同的序列号,请咨询生产厂家 索取序列号设置工具软件) 系统要求 请在使用USB编程电缆之前确认你的电脑是IBM PC兼容型并具备以下最低系统要求: ●Intel兼容586DX4-100MHz中央处理器或更高 ●一个标准的USB接口(4-pin A型插座) ●运行操作系统为Windows2000或Windows XP 驱动程序的安装 驱动程序的安装非常简单,只需按提示进行即可,以Windows XP为例,按以下步骤进行: 1、打开将要连接USB编程电缆或USB接口产品的电脑电源,并确认电脑 的USB口已经启动并正常工作。 2、将USB编程电缆或USB接口产品插入电脑的USB接口,Windows将检 测到设备并运行添加新硬件向导帮助你设置新设备,插入驱动程序光盘 并单击下一步继续。 如果Windows没有提示找到新硬件,那么在设备管理器的硬件列表中, 展开“通用串行总线控制器”,选择带问号的USB设备,单击鼠标右键 并运行更新驱动程序。

emc存储,外部接口规范

竭诚为您提供优质文档/双击可除emc存储,外部接口规范 篇一:emc设计规范 印制电路板的电磁兼容性设计规范 引言 本人结合自己在军队参与的电磁兼容设计工作实践,空军系统关于电子对抗进行的两次培训(雷达系统防雷、电子信息防泄露)及入司后参与706所杨继深主讲的emc培训、701所周开基主讲的emc培训、自己在地方电磁兼容实验室参与emc整改的工作体验、特别是国际ieee委员发表的关于emc有关文章、与地方同行的交流体会,并结合公司的实验情况,对印制电路板的电磁兼容性设计进行了一下小结,希望对印制电路板的设计有所作用。 需要提醒注意的是:总结中只是提供了一些最基础的结论,对具体频率信号的走线长度计算、应考虑的谐波频率、波长、电路板级屏蔽、屏蔽体腔的设计、屏蔽体孔径的大小、数目、进出导线的处理、截止导波管直径、长度的计算及静电防护,雷电防护等知识没有进行描述。或许有些结论不一

定正确,还需各位指正,本人将不胜感谢。 一、元器件布局 印刷电路板进行emc设计时,首先要考虑布局,pcb工程师必须和结构工程师、emc工程师一起协调进行,做到两者兼顾,才能达到事半倍。 首先要考虑印刷电路板的结构尺寸大小,考虑如何对器件进行布置。如果器件分布很散,器件之间的传输线可能会很长,印制线路长,阻抗增加,抗噪声能力下降,成本也会增加。如果器件分布过于集中,则散热不好,且邻近线条易受耦合、串扰。因此根据电路的功能单元,对电路的全部元器件进行总体布局。同时考虑到电磁兼容性、热分布、敏感器件和非敏感器件、i/o接口、复位电路、时钟系统等因素。 一般来说,整体布局时应遵守以下基本原则: 1、当线路板上同时存在高、中、低速电路时,应该按逻辑速度分割:布置快速、中速和低速 逻辑电路时,高速的器件(快逻辑、时钟振荡器等)应安放在靠近连接器范围内,减少天线效应、低速逻辑和存储器,应安放在远离连接器范围内。这样对共阻抗耦合、辐射和交扰的减小都是有利的。 接口 2、在单面板或双面板中,如果电源线走线很长,应每隔3000mil对地加去耦合电容,电容取

嵌入式系统接口设计与Linux驱动程序开发

嵌入式系统接口设计和Linux驱动程序开发 书名:嵌入式系统接口设计和Linux驱动程序开发 作者:刘淼 出版社:北京航天航空大学出版社 ISBN:9787810778619 定价:39.00 元 出版日 2006-5-1 期: 编辑推荐 Linux是源码开放的操作系统,它发展迅速,爱好者众多,同时也是主流的嵌入式操作系统之一。以ARM 为核心的处理器使用广泛,成本低廉,软件支持好,也是当今市场占有率最高的32位嵌入式处理器。本书Linux和ARM处理器平台为例,结合两大主流软件和硬件,讲述嵌入系统开发的相关知识,是对深入学习嵌入式系统很有借鉴意义的书。 内容简介 本书针对ARM处理器为核心的主流嵌入式系统平台,主要讲述嵌入式Linux驱动程序的设计和开发过程。内容同时涵盖嵌入式系统的软硬件两个方面:一方面是嵌入式系统常用的硬件接口时序、电气特性等内容的分析;另一方面讲述对应硬件的Linux驱动程序实现方法。本书共分为16章。第1、2章介绍嵌入式系统和Linux驱动程序的基础性知识。从第3章开始,详细讲述硬件平台及其对应的Linux驱动程序。硬件包括I/O口、CAN总线、触摸屏、I2CPS/2、异步串口、音频、显示、IDE、PCMCIA、USB、以太网以及Flash 的使用等内容。软件涉及针对上述硬件的各种驱动程序在Linux下的体系结构,Linux的字符设备、块设备和网络设备驱动程序,ARM Linux的中断处理,BootLoader和内核的启动过程等。 本书可作为机器人技术、机电控制系统、信息家电、工业控制、手持设备、智能玩具、医疗仪器等方面嵌入式系统开发和使用的参考书,也可作为高等院校有关嵌入式系统教学的本科生或研究生的教材。 作者简介 刘焱,吉林省吉林市人。2000年开始从事嵌入式系统方面的研发工作,参加过多项国家863、自然基金研究项目,熟练掌握ARM等RISC微处理器系统的硬件设计及LinuxWinCEVxWorks等操作系统的软件设计.尤其擅长硬件接口和驱动程序等系统底层架构设计。先后主持过基于S3C4480、S3C2410、PXA270等多款嵌入式教学实验平台及基于HMS30C7202.AT91 RM9200的工业测控系统的开发工作,作为主要研究人员完成的嵌入式数控系统已在企业成功使用。曾担任过清华大学软件学院、北京航空航天大学软件学院嵌入式系统课程的实验教学工作及南开大学软件学院的嵌入式系统专业课程教学工作。现任中国电子学会嵌入式系统培训中心ESTC认证讲师。 目录 第1章典型的嵌入式系统体系结构 1.1嵌入式系统概述1 1.2嵌入式系统的组成1 1.2.1嵌入式平台的硬件架构2 1.2.2板级支持包和嵌入式系统2 1.2.3嵌入式系统上的使用程序3 1.3嵌入式系统的开发流程和优势3 1.4嵌入式系统的方案选择5

USB适配器驱动程序安装说明

USB适配器驱动程序安装说明 概述 USB适配器是通过将电脑的USB接口模拟成传统的串行口(通常为COM3或COM4),从而使之能使用现有的编程软件或通信软件,通过适配器与PLC、MMI等设备的传统接口进行通信。 功能 ●支持的操作系统Windows2000/Windows XP ●完全兼容USB V1.1、USB2.0、USB CDC V1.1和USB CDC V2.0规范 ●USB总线供电(非隔离型)、或USB总线供电与PLC的编程口同时供电 (隔离型) ●波特率:300bps~1Mbps自动适应 系统要求 请在使用USB适配器之前确认你的电脑是IBM PC兼容型并具备以下最低 系统要求: ●Intel兼容586DX4-100MHz中央处理器或更高 ●一个标准的USB接口(4-pin A型插座) ●运行操作系统为Windows2000或Windows XP 驱动程序的安装 驱动程序的安装非常简单,只需按提示进行即可,以Windows XP为例,按以下步骤进行: 1、启动所需连入的主机,进入系统。 2、将USB适配器连入主机的USB埠,系统将检测到设备并运行添加新硬 件向导帮助你设置新设备,插入驱动程序光盘并单击下一步继续。 如果Windows没有提示找到新硬件,那么在设备管理器的硬件列表中, 展开“通用串行总线控制器”,选择带问号的USB设备,单击鼠标右键 并运行更新驱动程序。 3、Windows将检测到安装信息,显示“USB-Serial Controller”设备,

4、选中安装驱动文件的路径,让Windows拷贝驱动程序文件到你的硬盘。 5、Windows XP 系统时,有可能提示下图要求认证,此时点击进入下 一步即可

Windows驱动开发入门

接触windows驱动开发有一个月了,感觉Windows驱动编程并不像传说中的那么神秘。为了更好地为以后的学习打下基础,记录下来这些学习心得,也为像跟我一样致力于驱动开发却苦于没有门路的菜鸟朋友们抛个砖,引个玉。 我的开发环境:Windows xp 主机+ VMW ARE虚拟机(windows 2003 server系统)。编译环境:WinDDK6001.18002。代码编辑工具:SourceInsight。IDE:VS2005/VC6.0。调试工具:WinDBG,DbgView.exe, SRVINSTW.EXE 上面所有工具均来自互联网。 对于初学者,DbgView.exe和SRVINSTW.EXE是非常简单有用的两个工具,一定要装上。前者用于查看日志信息,后者用于加载驱动。 下面从最简单的helloworld说起吧。Follow me。 驱动程序的入口函数叫做DriverEntry(PDRIVER_OBJECT pDriverObj,PUNICODE_STRING pRegisgryString)。两个参数,一个是驱动对象,代表该驱动程序;另一个跟注册表相关,是驱动程序在注册表中的服务名,暂时不用管它。DriverEntry 类似于C语言中的main函数。它跟main的差别就是,main完全按照顺序调用的方法执行,所有东西都按照程序员预先设定的顺序依次发生;而DriverEntry则有它自己的规则,程序员只需要填写各个子例程,至于何时调用,谁先调,由操作系统决定。我想这主要是因为驱动偏底层,而底层与硬件打交道,硬件很多都是通过中断来与操作系统通信,中断的话就比较随机了。但到了上层应用程序,我们是看不到中断的影子的。说到中断,驱动程序中可以人为添加软中断,__asm int 3或者Int_3();前者是32位操作系统用的,后者是64位用的。64位驱动不允许内嵌汇编。下面是我的一个helloworld的源码:

二代身份证读卡器接口规范

竭诚为您提供优质文档/双击可除二代身份证读卡器接口规范 篇一:二代身份证读卡器安装及使用说明 二代身份证读卡器安装及使用说明 一.说明 为方便各旅馆单位更快捷的录入人员信息,现本系统提供第二代居民身份证验证(阅读)设备。将第二代居民身份证置于机具感应区,与之相连的计算机可即时显示该证件持有人的彩色照片及文字信息,既有利于方便、快捷的录入人员信息,又保证了录入信息的准确性和安全性。 二.安装 1.机具连接 本系统当前所使用的机具使用usb通讯方式,连接时请必须按照如下顺序连接: 1.首先将usb插头插入计算机的usb插口。 2.将mini-b接口插入二代身份证阅读机具插口。 当机具连接后,如果机具上的电源指示灯变为红色,工作指示灯变为绿色,故障灯不亮,表示机具连接成功;如果机具上的电源指示灯变为红色,故障指示灯红灯闪烁或长亮,

请确认是否为电源问题,如计算机电源供电不足等。 2.设备驱动安装 当机具初次连接至计算机时,需要按照机具的驱动程序。请按如下顺序操作: 1.从旅馆业系统的“从业人员信息登记”或“国内旅客入住登记”页面下载驱动程序usbdriver.exe。 https://www.360docs.net/doc/e24370720.html,bdriver.exe为自解压格式文件,打开后请指定一 个目标文件夹,而后点击“安装”。 3.当机具初次连接至计算机时,将弹出如下页面: 4.点击“下一步”,选择第一项“搜索适于我的设备的 驱动程序” 5.点击“下一步”,选择“指定一个位置” 6.点击“下一步”,在弹出的对话框中点击“浏览”按钮,而后在查找文件对话框中选择驱动程序解压后所在目录,并根据当前计算机的系统选择对应目录下的usbdiv.inf文件。 7.选中驱动文件后,点击查找文件框中的“打开”按钮,点击“找到新的硬件设备向导”中的“确定”按钮,点击“下一步”。 8.点击“下一步”,此时即完成驱动程序的安装。 三.使用 当安装完驱动程序后,连接好机具,进入旅馆业系统的

实时数据库与驱动程序开发接口-解析

实时数据库与驱动程序开发接口 V1.0 2006/12/29发布 1引言 根据整个组态的结构描述,在驱动程序与实时数据库之间交换的内容包括采集的实时数据及由实时数据库向驱动发送的控制命令串,驱动程序要求实时数据库或其他驱动支持的功能。 2实现方式 具体的实现方式是能过共享内存的方式进行数据传送。系统驱动所使用的共享内存全部编号使用,编号从0开始顺序递增,不同的驱动使用不同的共享内存编号,一般一个驱动使用一个共享内存,特殊情况下一个驱动可以使用一个以上的共享内存号。系统提供若干函数对共享内存的创建及使用进行支持。并且提供完整的温巡驱动程序,使用纯C语言编写。二次开发人员可以阅读,参照完成其他驱动的编写工作。另外对每一个驱动的开发需要在drive目录下建立一个单独的文件存储驱动的应用程序与设置文件.以omron为例,需在drive下建立omron 目录.对每一个驱动程序写一个readme.txt文件和一个config.txt文件来描述开发的目的及驱动的用法及驱动程序的参数设置. 系统占用的共享享内存编号有如下几个, 其他程序请不要占用. 100 声音驱动使用 102 短信程序使用 103 电话语音报警使用 80web驱动使用 3驱动程序编写说明

3.1 数据区 驱动程序采集的量一般分为两种形式一种是实时数据量如遥信,遥测与遥脉等. 另一种类型是结构量,如SOE, 保护动作记录等。 实时数据量采用0 - 1999进行编号, 驱动程序开发人员可自行安排其中的某一段为遥信,遥测或遥脉, 例如0 - 100 为遥信, 101-200 为遥脉, 201 - 300 为遥测.对于遥信多的,将更多的编号分配给遥信,对于遥测多的将更多的编号分配给遥测。采集上来的量在组态的参数配置中按驱动编写的情况进行配置. 3.2 上传结构变量 结构型变量采用如下方法进行传送,系统提供若干个结构串位置,当将指定形式的若干个结构串放入结构串中时,同时将串个数告诉实时数据库。则实时数据库程序读入所有的串,并根据指定的格式进行存盘操作或命令操作。结构串的格式一般为一个特征码附加若干有效字串参数。 3.3 命令区 驱动程序从实时数据库中接收的内容一般是命令串,命令串中包括命令特征码及命令附带的数据,当收到退出命令时驱动程序应自动安全地退出. 退出命令是命令字符串"EXIT"。 3.4 下行结构变量 下传结构变量一般是由实时数据库传送到驱动程序的下行结构变量。接收下行结构变量的程序一般有声音报警,电话报警,及调度程序等。 4类接口说明 4.1 支持函数文件列表 1)ramdrive.h 2)ramdrive.c 4.2 使用步骤 1)使用方法bool CreateRam( int ramid ); 完成共享内存的建立,参数为数据共享区的编号. 2)设置实时数据 void SetValue( int id, int iValue ) id 编号iValue 实时值

【项目管理知识】管理信息系统开发的项目管理

管理信息系统开发的项目管理 实行项目管理,规范其组织模式和管理过程对于保证管理信息系统的开发成功很重要,但更重要的是管理过程中的质量控制及协调工作,这是控制开发成本、提高开发效率和保证开发成果质量的有效手段。 管理信息系统开发的项目管理是为了使开发项目能够按照预定的成本、进度和质量顺利完成,根据管理科学的理论,对需求、成本、人员、进度、质量、风险等进行科学分析和有效管理及控制,并利用工程化开发方法所进行的系统活动。 1项目管理的组织模式 管理信息系统开发可以是企业管理信息系统的开发,也可以是为实现企业某一管理职能而进行的一个单独的开发项目。对于前者,需成立企业的项目委员会,委员会下设项目管理组、项目评审组和项目开发组;如果是后者,则可以根据职能所涉及的范围,召集相关部门人员成立开发项目组,项目组中分设系统开发小组和项目评审小组,由项目负责人进行统一管理和协调。 项目管理负责人可以为多人,由职能部门和信息部门管理人员组成。主要职责为:拟定项目管理的进度安排;组织项目阶段评审;协调整体开发工作;加入收藏对项目管理采取优化措施。 项目评审小组一般由企业技术专家组成。主要职责为:对项目的需求分析进行评审;对系统选型和开发计划进行评审;对系统开发进行阶段性评审;对项目总结报告进行评审。 开发项目组有开发技术人员构成。主要职责是:根据项目负责人的安排具体负责项目的软件开发工作;项目结束后提交开发成果并形成技术文档。

2管理信息系统项目管理过程 一个完整的管理信息系统开发项目通常包括三大阶段:需求分析、系统选型和系统实施。从具体的项目执行过程上来讲,项目管理可分为项目的项目授权、需求分析、项目选型、开发计划制定与实施、项目评估及更新和项目完成验收六个步骤。 2.1项目授权 在管理信息系统的开发要求提出后,需要确定开发项目管理的责任者,由其负责项目的可行性分析、需求评估,并进行项目开发的总体规划和管理与质量控制等,即将项目开发与管理的权限授予某一部门。一般而言,如果是针对企业的某项管理职能而进行的系统开发,应由具备此项管理职能执行能力的部门来负责;若是企业的总体管理信息系统开发,设为首页这应由成立的项目管理委员会负责。 2.2需求分析 需求分析可分为三个过程: 1)可行性评估:根据项目所期望达到的目标,明确项目开发所需要投入的企业资源,并从企业现行的管理方式和理念、人力资源、技术支持等方面考虑,考|试/大确定项目开发成果能否被使用者接受,能否促使工作流程的合理化,提高工作效率,降低企业管理运行成本。 2)需求评估:对管理信息系统开发的整体需求和期望做出分析和评估,详细考虑需求的实现方式,确定系统的各个功能模块及模块间的关系,对系统的信息标准进行统一确定,并据此明确管理信息系统项目成果的期望和目标。

Windows驱动程序开发环境配置

Windows驱动程序开发笔记 一、WDK与DDK环境 最新版的WDK 微软已经不提供下载了这里:https://https://www.360docs.net/doc/e24370720.html,/ 可以下并且这里有好多好东东! 不要走进一个误区:下最新版的就好,虽然最新版是Windows Driver Kit (WDK) 7_0_0,支持windows7,vista 2003 xp等但是它的意思是指在windows7操作系统下安装能编写针对windows xp vista的驱动程序, 但是不能在xp 2003环境下安装Windows Driver Kit (WDK) 7_0_0这个高版本,否则你在build的时候会有好多好多的问题. 上文build指:首先安装好WDK/DDK,然后进入"开始"->"所有程序"->"Windows Driver Kits"->"WDK XXXX.XXXX.X" ->"Windows XP"->"x86 Checked Build Environment"在弹出来的命令行窗口中输入"Build",让它自动生成所需要的库 如果你是要给xp下的开发环境还是老老实实的找针对xp的老版DDK吧,并且xp无WDK 版只有DDK版build自己的demo 有个常见问题: 'jvc' 不是内部或外部命令,也不是可运行的程序。 解决办法:去掉build路径中的空格。 二、下载 WDK 开发包的步骤 1、访问Microsoft Connect Web site站点 2、使用微软 Passport 账户登录站点 3、登录进入之后,点击站点目录链接 4、在左侧的类别列表中选择开发人员工具,在右侧打开的类别:开发人员工具目录中找到Windows Driver Kit (WDK) and Windows Driver Framework (WDF)并添加到您的控制面板中 5、添加该项完毕后,选择您的控制面板,就可以看到新添加进来的项了。 6、点击Windows Driver Kit (WDK) and Windows Driver Framework (WDF),看到下面有下载链接,OK,下载开始。下载后的文件名为: 6.1.6001.18002.081017-1400_wdksp-WDK18002SP_EN_DVD.iso将近600M大小。

相关文档
最新文档