Linux驱动
lw_yang
喜欢学习,努力工作,也享受生活,崇尚简单的快乐和幸福 ,为理想而奋斗
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
字符设备驱动程序快速参考
管理设备号#include<linux/types.h>dev_t 内核中用来表示设备编号的数据类型,32位,12位用来表示主设备号,其余20位表示次设备号int MAJOR(dev_t dev);int MINOR(dev_t dev);这两个宏从设备编号中抽取出主、次设备号dev_t MKDEV(unsigned int major, unsigned int...原创 2018-10-11 10:17:29 · 256 阅读 · 0 评论 -
Linux并发控制
作者: Sophisticated并发及其管理正在运行的多个用户空间进程可能以一种惊讶的组合方式来访问我们的代码。内核代码是可抢占的,因此,我们驱动程序的代码可能在任何时候丢失对处理器的独占,而拥有处理器的进程可能正在调用驱动程序代码。设备中断是异步事件,也会导致代码并发执行。只要可能,就应该避免资源的共享,如果没有并发的访问,也就不会有竞态产生,这种思想最明显的应用就是避免使用全局变...原创 2018-10-11 19:17:06 · 758 阅读 · 0 评论 -
Linux驱动ioctl的使用
一个字符设备驱动通常会实现常规的打开、关闭、读、写等功能,但在一些细分的情境下,如果需要扩展新的功能,通常以增设ioctl()命令的方式实现,其作用类似于“拾遗补漏”。在文件I/O中,ioctl扮演着重要角色,本文将以驱动开发为侧重点,从用户空间到内核空间纵向分析ioctl函...转载 2018-10-12 11:21:05 · 2147 阅读 · 0 评论 -
Linux驱动程序简介
设备驱动程序使某个特定硬件响应一个定义良好的内部编程接口,这些接口隐藏了设备的工作细节。用户的操作通过一组标准化的调用执行,而这些调用独立于特定的驱动程序。将这些调用映射到作用于实际硬件的设备特有操作上,则是设备驱动程序的任务。设备驱动程序的作用驱动程序作用在于提供机制,而不是策略。大多数编程问题实际上可以分成两部分:需要提供什么功能(机制),如何使用这些功能(策略)。这两个部分由程序不...原创 2018-10-09 15:30:52 · 1261 阅读 · 0 评论 -
构造和运行模块
Hello World 模块下面代码展示一个“hello world” 模块:#include&amp;lt;linux/init.h&amp;gt;#include&amp;lt;linux/module.h&amp;gt;MODULE_LICENSE(&quot;Dual BSD/GPL&quot;);static int hello_init(void){ printk(KE原创 2018-10-09 20:31:06 · 339 阅读 · 0 评论 -
用户空间和内核空间
内核模块和应用程序的对比应用程序是从头到尾执行单个任务。 模块只是预先注册自己以便服务于将来的某个请求,,模块初始化函数的任务就是为以后调用模块函数预先做准备,就像模块说:“我在这,并且我能做这些工作。”模块的退出函数将在模块被卸载前调用,他告诉内核:“我要离开了,不要再让我做任何事了。”应用程序在退出时,可以不管资源的释放或其他清除工作,但模块的退出函数必须仔细撤销初始化函数所做的一切。应...原创 2018-10-10 15:34:43 · 505 阅读 · 0 评论 -
驱动程序操作的三个内核数据结构(file_operations、file、inode)
文件操作将驱动程序操作连接到设备编号,结构定义在&amp;lt;linux/fs.h&amp;gt;,其中包含一组函数指针,每个打开的文件(在内部由一个file结构表示)和一组函数关联(通过包含指向一个file_operations结构的f_op字段)。struct file_operations { //指向拥有该结构的模块的指针 struct module *owner; //修改当前文件的读写位置...原创 2018-10-10 16:05:25 · 4037 阅读 · 0 评论 -
内核中新增驱动代码目录和子目录
假设我们要在内核源代码 drivers 目录下为 ARM 体系结构新增如下用于 test driver 的树型目录在内核中增加目录和子目录,我们需为相应的新增目录创建 Kconfig 和 Makefile 文件,而新增目录的父目录中的 Kconfig 和 Makefile 文件也需要修改,以便新增的 Kconfig 和 Makefile 文件能被引用在新增的 test 目录下,应该包含如下 ...原创 2019-03-06 20:20:04 · 981 阅读 · 0 评论 -
字符设备驱动模板
在字符设备驱动模块加载函数中应该实现设备号的申请和 cdev 的注册, 而在卸载函数中应实现设备号的释放和 cdev 的注销。工程师通常习惯将设备定义为一个设备相关的结构体,其包含该设备所涉及的 cdev、私有数据及信号量等信息。常见的设备结构体、模块加载和卸载函数形式如代码清单所示//设备结构体struct xxx_dev_t{ struct cdev cdev; ...} x...原创 2019-03-07 10:17:01 · 583 阅读 · 0 评论
分享