摘要: 阅读全文
posted @ 2020-03-23 11:35 standardzero 阅读(99) 评论(0) 推荐(0) 编辑
摘要: 不是所有的驱动程序都必须有自己的工作队列。驱动程序可以使用内核提供的缺省工作队列。由于这个工作队列由很多驱动程序共享,任务可能会需要比较长一段时间才能开始执行。为了解决这一问题,工作函数中的延迟应该保持最小或者不要延时。 需要特别注意的是缺省队列对所有驱动程序来说都是可用的,但是只有经过GP许可的驱动程序可以用自定义的工作队列。 创建工作队列 每个工作队列有一个专门的线程,所有来自运行队... 阅读全文
posted @ 2020-03-23 11:31 standardzero 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 1. 相关接口2. 代码样例3. 编译运行TOC 1. 相关接口 module_param(参数名,参数类型,参数读/写权限) module_param_array(数组名,数组类型,数组长,参数读/写权限) 说明: 参数和参数类型,需保持一致 参数类型有: byte、short、ushort、int、uint、long、ulong、charp(字符指针)、bool 或 invboo... 阅读全文
posted @ 2020-03-23 11:30 standardzero 阅读(370) 评论(0) 推荐(0) 编辑
摘要: 旋锁和信号量都是解决互斥问题的基本手段,面对特定的情况,应该如何进行选择呢? 选择的依据是临界区的性质和系统的特点。 从严格意义上说,信号量和自旋锁属于不同层次的互斥手段,前者的实现依赖于后者。在信号量本身的实现上,为了保证信号量结构存取的原子性,在多CPU 中需要自旋锁来互斥。 信号量是进程级的,用于多个进程之间对资源的互斥,虽然也是在内核中,但是该内核执行路径是以进程的身份,代表进程来争... 阅读全文
posted @ 2020-03-23 11:29 standardzero 阅读(244) 评论(0) 推荐(0) 编辑
摘要: 短延时(忙等) void ndelay(unsigned long nsecs); void udelay(unsigned long usecs); void mdelay(unsigned long msecs); 长延时(忙等) void msleep(unsigned int millisecs); unsigned long msleep_interruptible(uns... 阅读全文
posted @ 2020-03-23 11:28 standardzero 阅读(182) 评论(0) 推荐(0) 编辑
摘要: 1. 相关接口和结构体2. 驱动代码示例3. 应用层测试代码TOC 1. 相关接口和结构体 接口: //初始化接口 int fasync _ helper(int fd, struct file *filp, int mode, struct fasync _ struct **fa); //释放信号接口 void kill _ fasync(struct fasync _ struct... 阅读全文
posted @ 2020-03-23 11:27 standardzero 阅读(219) 评论(0) 推荐(0) 编辑
摘要: 1. eventfd 事件通知 eventfd 事件通知不仅可以用于线程间的事件通知,还可以用于内核和用户空间的事件通知。 2. eventfd 用户空间API #include //创建事件通知句柄,可以被read 和 write 函数使用 int eventfd(unsigned int initval, int flags); Linux shell下 输入 man event... 阅读全文
posted @ 2020-03-23 11:22 standardzero 阅读(1190) 评论(0) 推荐(0) 编辑
摘要: 1. 定时器简介2. jiffies 变量3.定时器相关API4. 驱动例程TOC 1. 定时器简介 软件上的定时器最终要依靠硬件时钟来实现,简单的说,内核会在时钟中断发生后检测各个注册到内核的定时器是否到期,如果到期,就回调相应的注册函数,将其作为中断底半部来执行。实际上,时钟中断处理程序会触发TIMER_SOFTIRQ软中断,运行当前处理器上到期的所有定时器。设备驱动程序如要获得时间信息以... 阅读全文
posted @ 2020-03-23 11:20 standardzero 阅读(334) 评论(0) 推荐(0) 编辑
摘要: 1.ioctl 简介2.ioctl 函数实现模板TOC 1.ioctl 简介 ioctl是Linux专门为用户层控制设备设计的系统调用接口,这个接口具有极大的灵活性,我们的设备打算让用户通过哪些命令实现哪些功能,都可以通过它来实现,ioctl在操作方法集中对应的函数指针是long (*unlocked_ioctl) (struct file *, unsigned int, unsigned ... 阅读全文
posted @ 2020-03-23 11:18 standardzero 阅读(1049) 评论(0) 推荐(0) 编辑
摘要: 1.主设备号码和次设备号2.字符设备的注册3.字符设备驱动程序样例TOC 1.主设备号码和次设备号 dev_t dev_t 类型是定义在中定义用来保存设备编号(前12位用来表示主设备号,后20位表示次设备号) 注意:我们获取主设备号和次设备号应该使用内核提供的宏 MAJOR(dev_t):获取主设备号 MINOR(dev_t):获取次设备号 MKDEV(int major, ... 阅读全文
posted @ 2020-03-23 11:17 standardzero 阅读(221) 评论(0) 推荐(0) 编辑