重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

怎样进行Linux驱动开发注册

怎样进行Linux驱动开发注册,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

成都创新互联公司主要从事成都网站制作、做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务新源,十多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108

模块注册

你必须记住一件事, 在注册内核设备时, 注册可能失败,即便最简单的动作常常需要内存分配, 分配的内存可能不可用,因此模块代码必须一直检查返回值, 并且确认要求的操作实际上已经成功。

如果证实你的模块在一个特别类型的失败后完全不能加载, 你必须取消任何在失败前注册的动作。

错误恢复有时用 goto 语句处理是最好的。我们通常不愿使用 goto, 但是在我们的观念里, 这是一个它有用的地方。在错误情形下小心使用 goto 可以去掉大量的复杂, 过度对齐的"结构形" 的逻辑,因此在内核里goto 是处理错误经常用到。

模块清理函数必须撤销任何由初始化函数进行的注册, 并且惯例(但常常不是要求的)是按照注册时相反的顺序注销设施。

使代码重复最小和所有东西流线化, 你应当做的是无论何时发生错误都从初始化里调用清理函数,清理函数接着必须在撤销它的注册前检查每一项的状态。

注意清理函数当由非退出代码调用时不能标志为 __exit。

不要注册任何设备, 直到所有的需要支持那个设备的你的内部初始化已经完成。cdev_add 一返回, 你的设备就是"活的"并且内核可以调用它的操作。除非你的驱动完全准备好处理设备上的操作, 你不应当调用 cdev_add。

字符设备的注册,内核在内部使用类型 struct cdev 的结构来代表字符设备,在内核调用你的设备操作前, 你编写分配并注册一个或几个这些结构。

  • 分配和初始化:cdev_init(...)

  • 通知内核:cdev_add(...)

  • 去除:cdev_del(...)

模块参数

任何使用它们的细节见 moduleparam.h,所有的模块参数应当给定一个缺省值; insmod 只在用户明确告知它的时候才改变这些值。模块可检查明显的参数, 通过对应它们的缺省值检查这些参数。

最后的 module_param 字段是一个权限值,你应当使用 中定义的值,这个值控制谁可以存取这些模块参数在 sysfs 中的表示. 如果 perm 被设为 0, 就根本没有 sysfs 项。否则它出现在 /sys/module下面,带有给定的权限。使用 S_IRUGO 作为参数可以被所有人读取, 但是不能改变; S_IRUGO|S_IWUSR 允许 root 来改变参数。注意如果一个参数被 sysfs 修改, 你的模块看到的参数值也改变了, 但是你的模块没有任何其他的通知。你应当不要使模块参数可写, 除非你准备好检测这个改变并且因而作出反应。

看完上述内容,你们掌握怎样进行Linux驱动开发注册的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!


新闻名称:怎样进行Linux驱动开发注册
URL网址:http://cqcxhl.com/article/giocis.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP