Linux设备驱动程序实现的功能包括驱动程序的注册与注销、设备的打开与释放、设备的读写操作、设备的控制操作等
当用户需要通过设备文件与硬件通信时,必须通过调用open、read、write、close、ioctl等系统函数实现,这些函数都由file_operations结构体的函数指针成员给出入口地址,file_operations结构体的每一个成员名都对应一个系统函数嗍
用户进程利用系统调用在对设备文件进行诸如read、write操作时,系统调用通过设备文件的主设备号找到相应的设备驱动程序,然后读取该数据结构相应的函数指针,接着把控制权交给该函数
因此,编写设备驱动程序就是编写file_operations数据结构的各个函数指针对应的各个函数,随着Linux设备驱动程序的复杂程度越来越高,fileoperations结构体的成员数越来越多,但并不是每种设备的驱动程序都需要利用file_operations中的全部功能,大多数驱动程序只是利用其中一部分,对于驱动程序中无需提供的功能,只需将相应位的数值设为NULL
本系统将ADS8364作为字符型设备设计驱动程序,对于字符设备来说,file_operations结构体中要提供的主要入口有:打开设备文件open()、释放设备文件release()、读取A/D转换的数据read()、启动A/D转换和选取A/D转换的读数通道号write()、A/D转换参数快速设置ioctl()
结合ADS8364与S3c24lO的接口电路,设计驱动程序时,采用中断方式或者查询方式读取转换数据
采用查询方式在驱动程序中需将通用输入输出引脚GPF4设置成输入模式,在应用程序中反复查询GPF4的输入状态,当查询到低电平时表明A/D转换器完成一次转换,此时可调用驱动程序中的read()函数读取转换结果;采用中断方式需在驱动程序中将GPF4设置中断方式,将