![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux 驱动
文章平均质量分 81
花一样的阿衰
不思进取的底层码农
展开
-
【0】驱动测试环境搭建
驱动测试环境搭建原创 2019-04-13 17:08:43 · 464 阅读 · 0 评论 -
【1】hello wrold驱动程序
hello world驱动程序原创 2019-05-04 10:59:46 · 887 阅读 · 2 评论 -
【2】模块参数与模块之间的通信
模块参数和模块调用原创 2019-05-04 12:23:45 · 2566 阅读 · 0 评论 -
【3】如何创建字符设备
创建一个字符设备原创 2019-07-29 10:21:37 · 2775 阅读 · 0 评论 -
【4】字符设备的read/write
字符设备的read和write操作原创 2022-09-10 11:44:03 · 774 阅读 · 0 评论 -
【5】字符设备ioctl操作
字符设备的ioctl操作原创 2019-07-31 10:17:20 · 2768 阅读 · 0 评论 -
【6】内存分配
kmalloc内存分配原创 2019-08-02 10:32:46 · 330 阅读 · 0 评论 -
file_operations、file、inode结构释义
file_operations、file、inode结构释义原创 2019-07-25 18:17:19 · 619 阅读 · 0 评论 -
Linux内核通知链
Linux内核中各个子系统相互依赖,当其中某个子系统状态发生改变时,就必须使用一定的机制告知使用其服务的其他子系统,以便其他子系统采取相应的措施。为满足这样的需求,内核实现了事件通知链机制(notificationchain)。通知链只能用在各个子系统之间,而不能在内核和用户空间进行事件的通知。组成内核的核心系统代码均位于kernel目录下,通知链表位于kernel/notifier.c中,对应的...原创 2019-08-02 17:21:29 · 849 阅读 · 0 评论 -
高级字符设备驱动操作(wait_event/poll/访问控制)
wait_event阻塞指的是当执行操作的时候,如果条件未满足,则挂起线程直至条件满足之后在进行操作,被挂起的线程进入睡眠状态。当一个进程被置为休眠状态的时候,它会被标记为一种特殊状态并且从运行队列中移除。直到某些情况下修改了这个状态,进程才会继续运行。休眠的进程会被搁置到一边,等待将来某个事件的发生。说明如何进入休眠状态前,请牢记两条规则:1、永远不要在原子上下文中进入休眠。2、当我们被...原创 2019-07-31 17:54:30 · 1357 阅读 · 0 评论 -
驱动与硬件通信
每种外设都是通过读写寄存器进行控制。外设寄存器也被称为I/O端口,通常包括:控制寄存器、状态寄存器和数据寄存器三大类,不管是在内存地址还是在I/O地址空间,这些寄存器的访问地址都是连续的。在硬件层,内存区域和I/O区域没有概念上的区别,它们都是通过向地址总线和控制总线发送电平信号进行访问,再通过数据总线读写数据。控制的方式分为I/O端口和I/O内存,它们的定义说明如下:I/O端口:当一个寄存器...原创 2020-01-13 17:21:34 · 614 阅读 · 0 评论 -
时间、延迟以及延缓操作
HZ和jiffies内核通过定时器中断来跟踪时间流。时钟中断由系统定时器一周期性的间隔产生,这个间隔有内核根据HZ的值决定。HZ是一个与体系结构有关的常数,定义在<linux/param.h>或者该文件包含的某个子平台的相关文件中。HZ是用来定义每一秒中有多少次时钟中断。例如HZ为1000,代码每秒产生1000次时钟中断。全局变量jiffies用于记录系统启动以来产生的节拍的总数,...原创 2019-08-01 16:10:23 · 1687 阅读 · 0 评论 -
kobject和sysfs
kobject结构拓扑结构:由点和线组成的结构,描述位置关系。统一设备模型:提供一个独立的机制专门来表示设备,并描述其在系统中的拓扑结构。kobject设备模型的核心部分就是kobject,它由struct kobject结构体表示,定义于<linux/kobject.h>中。kobject类似于面向对象语言中的对象(object)类,提供了诸如引用计数、名称和父指针等字段,可...原创 2019-08-09 10:46:12 · 560 阅读 · 0 评论 -
并发和竞态
竞态:假设有两个进程(A和B),正在独立的尝试向同一片共享的数据进行操作,例如下面的示例代码中,假设在同一时间两个进程都到到了if判断的位置,那么两个进程都会分配内存,而每个进程都会将结果指针赋值给dptr->data[s_pos]。最终的结果就是谁后赋值谁会赋值成功,假设B赋值成功,那么A分配的内存将失去管理,造成内存泄露。if (!dptr->data[s_pos]) { dp...原创 2019-07-30 11:26:40 · 130 阅读 · 0 评论 -
将模块加入内核
可以去看看内核下面的驱动目录,所有的目录下面都会包含一个Makefile和一个Kconfig。这个Kconfig的作用就是在执行make menuconfig的时候会从中读出相应的菜单,Makefile自然是编译脚本了。我们准备在drivers目录下面添加我们的hello模块,首先我们为我们的模块需要添加一个配置项。1、在drivers下面加入一个hello模块的配置项在drivers下面添...原创 2020-01-13 17:20:22 · 122 阅读 · 0 评论 -
内核线程
#include <linux/module.h>#include <linux/init.h>#include <linux/atomic.h>#include <linux/sched.h>#include <linux/kthread.h>#include <linux/delay.h>static str...原创 2020-01-13 17:21:11 · 63 阅读 · 0 评论 -
input子系统
input驱动#include <linux/module.h>#include <linux/init.h>#include <linux/atomic.h>#include <linux/sched.h>#include <linux/kthread.h>#include <linux/delay.h>#i...原创 2019-06-03 16:53:00 · 250 阅读 · 0 评论 -
platform设备驱动
platform_busplatform_bus是一种虚拟总线,作用就是将设备信息和驱动程序进行分离,platform_bus会维护两条线,一条是设备,一条是驱动。当一个设备被注册到总线上面的时候,总线会去搜索对应的驱动,反之如果驱动被注册到总线,总线也会去找对应的驱动。描述设备信息的方式有2种,一种是通过手动填充paltform_device结构体的方式进行,另一种是通过设备树的方式进行。&...原创 2019-06-17 18:53:03 · 1925 阅读 · 0 评论 -
中断处理
中断类型根据中断的来源分为外部中断和内部中断,外部中断来源于CPU外部,由外设发出,内部中断就是CPU内部触发(软件中断指令、溢出、除法错误等)。根据中断能否被屏蔽分为可屏蔽中断和不可屏蔽中断,可屏蔽中断就是可以被屏蔽,被屏蔽之后中断不再响应。不可屏蔽中断就是不能被屏蔽。 中断触发方式在<linux/interrupt.h>中定义了中断的触发方式宏定义,在申请irq的...原创 2019-08-07 16:52:02 · 327 阅读 · 0 评论