GPIO设备程序开发步骤
发布时间:2008/12/25 0:00:00 访问次数:680
gpio驱动可以归类为linux设备驱动的字符设备驱动,以下是开发它的一些具体步骤。
(1)模块化驱动程序
不失linux驱动开发的一般性,在写字符设备的驱动程序时,也要遵守模块化编程的一般规范。设备模块在用户空间的初始化和终止:
●init mnodule()向内核注册模块提供数据结构、局部和全局变量。
●cleanup_module()取消所有init_module在内核中的注册。
(2)设备模块在内核空间的内存申请和释放
kmalloc()函数分配一段内存,这样就实现了chrdevs向量表中指向设备驱动程序名称的指针。使用kfree释放内存。
(3)字符设备主设备号和次设备号的分配
主设备号标志设备对应的驱动程序,内核利用主设备号将设备与相应的驱动程序对应起来。主设备号的取值范围是0~255,如果不善加规划,则容易造成主设备号的冲突。主设备号的分配有静态和动态之分,从开发设备的角度来看,推荐静态设备号的分配。
次设备号由驱动程序使用,内核的其他部分并不使用它,仅将它传递给驱动程序。一个驱动程序控制若干个设备,次设备号提供了一种区分它们的方法。
(4)设备模块在内核空间的注册与注销
字符设备的注册有2种方法,一种是常用注册方法,通过系统函数register_chrdev()将设备加入到系统设备列表中;另一种方法是devfs技术,通过系统函数devfs ̄register()实现设备的注册。注销与注册相反,分别调用unregister_chrdev()函数和devfs_unregister()函数。
(5)设备模块在内核空间提供系统调用的函数
设备驱动程序在注册成功以后,用户可以通过访问设备特殊文件(一般情况在/dev目录下)实现系统调用。
gpio驱动程序只需要一个file_operati。ns数据结构体就可以了。这是因为gp10本身在设计阶段就定制好了接入的物理设备,接入到gpio端口的物理设备并不需要即插即用。因此可以在开发阶段定制该接口的物理设备`也可以担这个接口的设各作为该产品的标配外设发布。
这样,在编写驱动程序的过程中,只要写好应用程序使用标准系统调用打开、读取、写和关闭等处理函数,就可以完成驱动程序的开发。其中,标准系统调用处理函数在所有的字符设备里面具有同样的功能。
欢迎转载,信息来自维库电子市场网(www.dzsc.com)
gpio驱动可以归类为linux设备驱动的字符设备驱动,以下是开发它的一些具体步骤。
(1)模块化驱动程序
不失linux驱动开发的一般性,在写字符设备的驱动程序时,也要遵守模块化编程的一般规范。设备模块在用户空间的初始化和终止:
●init mnodule()向内核注册模块提供数据结构、局部和全局变量。
●cleanup_module()取消所有init_module在内核中的注册。
(2)设备模块在内核空间的内存申请和释放
kmalloc()函数分配一段内存,这样就实现了chrdevs向量表中指向设备驱动程序名称的指针。使用kfree释放内存。
(3)字符设备主设备号和次设备号的分配
主设备号标志设备对应的驱动程序,内核利用主设备号将设备与相应的驱动程序对应起来。主设备号的取值范围是0~255,如果不善加规划,则容易造成主设备号的冲突。主设备号的分配有静态和动态之分,从开发设备的角度来看,推荐静态设备号的分配。
次设备号由驱动程序使用,内核的其他部分并不使用它,仅将它传递给驱动程序。一个驱动程序控制若干个设备,次设备号提供了一种区分它们的方法。
(4)设备模块在内核空间的注册与注销
字符设备的注册有2种方法,一种是常用注册方法,通过系统函数register_chrdev()将设备加入到系统设备列表中;另一种方法是devfs技术,通过系统函数devfs ̄register()实现设备的注册。注销与注册相反,分别调用unregister_chrdev()函数和devfs_unregister()函数。
(5)设备模块在内核空间提供系统调用的函数
设备驱动程序在注册成功以后,用户可以通过访问设备特殊文件(一般情况在/dev目录下)实现系统调用。
gpio驱动程序只需要一个file_operati。ns数据结构体就可以了。这是因为gp10本身在设计阶段就定制好了接入的物理设备,接入到gpio端口的物理设备并不需要即插即用。因此可以在开发阶段定制该接口的物理设备`也可以担这个接口的设各作为该产品的标配外设发布。
这样,在编写驱动程序的过程中,只要写好应用程序使用标准系统调用打开、读取、写和关闭等处理函数,就可以完成驱动程序的开发。其中,标准系统调用处理函数在所有的字符设备里面具有同样的功能。
欢迎转载,信息来自维库电子市场网(www.dzsc.com)
上一篇:Flash数据存储操作流程