实验八 I/O口驱动实验 【实验目的】 1、了解 PXA270 微处理器 GPIO 的功能 2、熟悉 PXA270 微处理器 GPIO 驱动程序的编写方法 3、掌握驱动程序的加载过程和方法 【实验原理】 Linux以模块的形式加载设备类型,通常来说一个模块对应一个设备驱动,因此是可以分类的。将模块分成不同的类型或者类并不是一成不变的,开发人员可以根据实际工作需要在一个模块中实现不同的驱动程序。一般情况,一个设备驱动对应一类设备的模块方式,这样便于多个设备的协调工作也利于应用程序的开发和扩展。 设备驱动在准备好以后可以编译到内核中(参考实验四的内容),在系统启动时和内核一起启动,这种方法在嵌入式 Linux系统中经常被采用。通常情况下设备驱动的动态加载更为普遍(参考实验七的内容),开发人员不必在调试过程中频繁启动机器就能完成设备驱动的开发工作。 设备驱动在加载时首先调用入口函数 init_module(),该函数完成设备驱动的初始化工作,比如寄存器置位、结构体赋值等一系列工作,其中最重要的一个工作就是向内核注册该设备,对于字符设备调用 register_chrdev()完成注册,对于块设备需要调用 register_blkdev()完成注册。注册成功后,该设备获得了系统分配的主设备号、自定义的次设备号,并建立起于文件系统的关联。设备在卸载时需要回收相应的资源,令设备的响应寄存器复位并从系统中注销该设备,字符设备调用 unregister_chrdev()、块设备调用 unregister_blkdev()。系统调用部分则是对设备的操作过程,比如 open、read、write、ioctl 等。图 8-1 为一个设备驱动模块动态挂载、卸载和系统调用的全过程。 insmodrmmod内核空间用户空间register_XXX设备驱动内核模块unregister_XXX模块Init_module()系统调用Clearup_module() 图 8-1 设备驱动在内核中的挂载、卸载和系统调用过程 设备驱动程序负责将应用程序如读、写等操作正确无误的传递给相关的硬件,并使硬件能够做出正确反应的代码,因此在编写设备驱动程序时,必须要了解相应的硬件设备的寄存器、IO 口及内存的配置参数。 1 、硬件接口电路介绍 (1)、LED 和八段数码显示接口电路 目标板 LED 和八段数码显示接口电路如图 8-2 所示,74HC574 为 D 锁存器,在时钟信号 CLK 作用下,该锁存器将输入信号进行锁存,即 xQ=xD(x=1~8)。从图中可以看出,LED 和八段数码显示电路将74HC574 的时钟信号输入端作为片选信号,其中 LED 显示的片...