自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 【Linux驱动】Linux字符设备框架

在 Linux 驱动开发中,字符设备(Character Device)是最常见的一类设备类型。它们通过字符流的方式和用户空间进行数据交互,比如串口、I2C、SPI、GPIO 控制接口等等。本文将带大家梳理 Linux 字符设备框架的整体流程。Linux 内核把设备分为三大类:字符设备(Character Device)按字节(字符流)顺序读写,例如串口 /dev/ttyS0。块设备(Block Device)按块读写,支持随机访问,例如磁盘 /dev/sda。网络设备(Network Device)

2025-09-20 22:49:26 1067

原创 Linux中select、poll 和 epoll的作用

在讲解具体接口前,我们需要先明确 I/O 多路复用的本质。简单来说,I/O 多路复用允许单个进程 / 线程同时监控多个文件描述符(FD),当其中任意一个或多个 FD 处于 “就绪状态”(如可读、可写、发生异常)时,内核会通知进程 / 线程进行相应处理。避免进程 / 线程因等待某个 FD 就绪而阻塞,同时减少多进程 / 线程切换的资源开销,尤其适合高并发场景(如 Web 服务器、即时通讯服务等)。而selectpollepoll正是实现这一机制的三种不同 “工具”,它们在效率、接口设计、适用场景上各有差异。

2025-09-19 22:55:34 925

原创 【系列文章】Linux系统中断的应用06-中断线程化

中断线程化是一种优化技术,用于提高多线程程序的性能。想象一下,你正在做一项任务,但是总是被别人的打扰所中断,每次都要停下手头的工作去处理别人的事情。这样频繁的中断会让你的工作效率变低,因为你需要反复切换任务,无法专心做好自己的工作。在多线程程序中,也存在类似的问题。有时硬件或其他事件会发出中断信号,打断正在执行的线程,需要切换到中断处理程序去处理这些事件。这种频繁的中断切换会导致额外的开销和延迟,影响程序的性能。为了解决这个问题,中断线程化提出了一种优化方案。

2025-09-18 22:58:32 832

原创 【系列文章】Linux系统中断的应用05-延迟工作

延迟工作是一种将工作的执行延迟到稍后时间点进行处理的技术。通常情况下,当某个任务需要花费较长时间,不需要立即执行或需要按时执行时,延迟工作就会派上用场。延迟工作的基本思想是将任务放入一个队列中,然后由后台的工作进程会任务调度程序来处理队列中的任务。任务可以在指定的延迟时间后执行,也可以根据优先级,任务类型或者其他条件进行排序和处理。延迟工作在许多应用场景中都非常有用,尤其是在需要处理大量任务,提供系统性能和可靠性的情况下。

2025-09-18 22:50:38 791

原创 【系列文章】Linux系统中断的应用04-共享工作队列实验

工作队列是实现中断下半部分的机制之一,是一种用于管理任务的数据结构或机制。它通常用于多线程,多进程或分布式系统中,用于协调和分配待处理的任务给可用的工作线程或工作进程。工作队列的基本原理是将需要执行的任务按顺序排列在队列中,并提供一组工作线程或者工作进程来处理队列中的任务。当有新的任务到达时,它们会被添加到队列的末尾,工作线程或工作进程从队列的头部获取任务,并执行相应的处理操作。工作队列和之前学习的 tasklet 有什么不同呢?tasklet 也是实现中断下半部分的机制之一。

2025-09-17 23:10:02 865

原创 【系列文章】Linux系统中断的应用03-软中断

enum*/以上代码定义了一个枚举类型,用于标识软中断的不同类型或优先级。每个枚举常量对应一个特定的软中断类型。以下是每个枚举常量的含义:HI_SOFTIRQ:高优先级软中断TIMER_SOFTIRQ:定时器软中断NET_TX_SOFTIRQ:网络传输发送软中断NET_RX_SOFTIRQ:网络传输接收软中断BLOCK_SOFTIRQ:块设备软中断IRQ_POLL_SOFTIRQ:中断轮询软中断TASKLET_SOFTIRQ:任务软中断。

2025-09-17 22:37:36 993

原创 【系列文章】Linux系统中断的应用02-中断下文 tasklet

在 Linux 内核中,tasklet 是一种特殊的软中断机制,被广泛用于处理中断下文相关的任务。它是一种常见且有效的方法,在多核处理系统上可以避免并发问题。Tasklet 绑定的函数在同一时间只能在一个 CPU 上运行,因此不会出现并发冲突。然而,需要注意的是,tasklet 绑定的函数中不能调用可能导致休眠的函数,否则可能引起内核异常。在 Linux 内核中,tasklet 结构体的定义位于 include/linux/interrupt.h 头文件中。

2025-09-16 22:59:10 719

原创 【系列文章】Linux系统中断的应用01-Linux内核中的中断概念

中断是指在 CPU 正常运行期间,由外部或内部事件引起的一种机制。当中断发生时,CPU会停止当前正在执行的程序,并转而执行触发该中断的中断处理程序。处理完中断处理程序后,CPU 会返回到中断发生的地方,继续执行被中断的程序。中断机制允许 CPU 在实时响应外部或内部事件的同时,保持对其他任务的处理能力。

2025-09-15 23:09:15 1062

原创 【系列文章】Linux系统中断的应用-导航页

本文章为【系列文章】----

2025-09-15 23:07:24 181

原创 Linux内核定时器

硬件为内核提供了一个系统定时器来计算流逝的时间(即基于未来时间点的计时方式,以当前时刻为计时开始的起点,以未来的某一时刻为计时的终点),内核只有在系统定时器的帮助下才能计算和管理时间,但是内核定时器的精度并不高,所以不能作为高精度定时器使用。并且内核定时器的运行没有周期性,到达计时终点后会自动关闭。本实验将实现五秒钟的计时,五秒钟之后将打印“this is function test”相关字符,为了实现循环打印还需要在定时处理函数中使用 mod_timer 函数重新设置定时时间。

2025-09-15 22:24:16 761

原创 【系列文章】Linux中的并发与竞争[05]-互斥量

中的第5篇。

2025-09-14 22:58:55 1893

原创 【系列文章】Linux中的并发与竞争[04]-信号量

中的第4篇。

2025-09-14 22:46:33 1083

原创 【系列文章】Linux中的并发与竞争[03]-自旋锁

中的第3篇。

2025-09-13 22:56:50 708

原创 【系列文章】Linux中的并发与竞争[02]-原子操作

在上一篇文章中,对并发与竞争进行了实验,两个 app 应用程序之间对共享资源的竞争访问引起了数据传输错误,而在 Linux 内核中,提供了四种处理并发与竞争的常见方法,分别是原子操作、自旋锁、信号量、互斥体,在之后的几篇文章中会依次对上述四种方法进行讲解文章首先对四种常见方法中的原子操作进行讲解。

2025-09-12 22:21:16 860

原创 【系列文章】Linux中的并发与竞争[01]-并发与竞争的概念

中的第六篇。

2025-09-10 22:58:15 1824

原创 【系列文章】Linux中的并发与竞争-导航页

【系列文章】Linux中的并发与竞争-导航页。

2025-09-10 22:52:35 429

原创 【系列文章】Linux系统中的lO模型[06篇]---信号驱动IO

信号驱动 IO 顾名思义与信号相关。系统在一些事件发生之后,会对进程发出特定的信号,而信号与处理函数相绑定,当信号产生时就会调用绑定的处理函数。例如在 Linux 系统任务执行的过程中可以按下 ctrl+C 来对任务进行终止,系统实际上是对该进程发送一个 SIGINT 信号,该信号的默认处理函数就是退出当前程序。具体到 IO 模型上,可以对 SIGIO 信号注册相应的信号处理函数,并打开对应描述符的信号驱动。

2025-09-08 23:44:28 857

原创 【系列文章】Linux系统中的lO模型[05篇]---IO多路复用

IO 多路复用是一种同步的 IO 模型。IO 多路复用可以实现一个进程监视多个文件描述符。一旦某个文件描述符准备就绪,就通知应用程序进行相应的读写操作。没有文件描述符就绪时就会阻塞应用程序,从而释放出 CPU 资源。在应用层 Linux 提供了三种实现 IO 多路复用的模型,分别是 select、poll 和 epoll。这里以 select 函数为例进行讲解,使用时可以对 select 传入多个描述符,并设置超时时间。

2025-09-08 23:27:39 696

原创 【系列文章】Linux系统中的lO模型[04篇]---非阻塞IO

中的第四篇。

2025-09-08 22:18:19 844

原创 【系列文章】Linux系统中的lO模型[03篇]---阻塞IO

在 Linux 驱动程序中,阻塞进程可以使用等待队列来实现。等待队列是内核实现阻塞和唤醒的内核机制,以双循环链表为基础结构,由链表头和链表项两部分组成,分别表示等待队列头和等待队列元素,如下图所示:等待队列头使用结构体//自旋锁struct list_head task_list //链表头等待队列项使用结构体。

2025-09-06 23:18:33 1932

原创 【系列文章】Linux系统中的lO模型[02篇]---Linux IO模型的引入

中的第二篇。

2025-09-05 22:09:57 809

原创 Linux内核符号模块导出

驱动程序编译生成的 ko 文件是相互独立的,即模块之间变量或者函数在正常情况下无法进行互相访问。而一些复杂的驱动模块需要分层进行设计,这时候就需要用到内核模块符号导出。内核符号导出指的是在内核模块中导出相应的函数和变量,在加载模块时被记录在公共内核符号表中,以供其他模块调用。符号导出所使用的宏为EXPORT_SYMBOL(sym)和 EXPORT_SYMBOL_GPL(sym)它们定义在 “内核源码/include/linux/export.h”文件中(

2025-09-04 23:40:00 913

原创 linux内核模块传参

驱动模块传参是一种可以随时向内核模块传递、修改参数的方法。例如可以传递串口驱动的波特率、数据位数、校验位、停止位等参数,进行功能的设置,以此节省编译模块的时间,大大提高调试速度。

2025-09-04 00:02:57 821

原创 【系列文章】Linux系统中的IO模型-导航页

本文章为【系列文章】----的导航页,可通过以下链接依此观看:00:Linux系统中的IO模型-导航页01:Linux系统中的IO模型[01篇]----同步、异步、阻塞、非阻塞到底有什么区别?

2025-09-02 23:43:54 345

原创 【系列文章】Linux系统中的IO模型[01篇]----同步、异步、阻塞、非阻塞到底有什么区别?

本文深入解析了Linux系统中的IO模型概念,重点区分了"同步/异步"与"阻塞/非阻塞"两组容易混淆的关键术语。

2025-09-02 23:42:59 1073

原创 【一文了解】Linux文件系统与设备文件

一切都是文件”是Linux系统的核心设计思想,掌握Linux文件系统、设备文件系统的知识就显得相当重要了。从应用层的角度看,驱动最终是通过与文件操作相关的系统调用,或者基于这些系统调用的 C 库函数来被访问的;因此,设备驱动的设计本质上是为了契合应用程序所使用的 API 接口。另一方面,对驱动开发者来说,设备文件系统几乎是绕不开的环节。从 Linux 2.4 内核中引入的 devfs,到 Linux 2.6 以后逐步取代它的 udev,驱动工程师都需要与这些机制打交道,以便正确管理和使用设备节点。

2025-08-30 22:25:23 899

原创 【Linux】Linux系统下各个目录的作用

常用目录示例:/sys/class(设备类别)、/sys/bus(总线信息)、/sys/devices(具体设备节点)。例如:用户use 的家目录为 /home/use,在用户家目录下包含该用户的数据文件和用户特定的配置文件。每个正在运行的进程在 /proc 下都有一个以 进程号(PID)命名的目录,包含该进程的详细信息(如 /proc/1234/status)。与 /bin、/sbin 不同,/usr 主要存放系统安装后提供的程序和库,而 /bin、/sbin 更偏向系统启动阶段必需的核心命令。

2025-08-29 23:04:45 880

原创 一文了解什么是Linux内核模块

本文带你快速了解 Linux 内核模块 的基本概念与开发方法。通过实例讲解了模块的 加载/卸载函数、参数传递、符号导出 等核心机制,掌握内核模块在驱动开发中的作用。

2025-08-27 22:22:08 671

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除