Linux驱动开发笔记
文章平均质量分 95
云雨歇
一枚在校的嵌入式菜鸟,不定时更新自己的学习笔记,感兴趣的读者可以和我一起加油
展开
-
Linux驱动开发笔记(十三)Sysfs文件系统
前面章节驱动学习中,我们测试驱动时经常使用/sys目录下文件,我们本章就简单介绍下Sysfs文件系统。原创 2024-06-22 16:09:12 · 1266 阅读 · 1 评论 -
Linux驱动开发笔记(十二)并发与竞争
Linux的子系统我们已经大致学习完了,笔者最近相到似乎一直没有好好学习一下并发和竞争这一部分内容(在网络编程中曾经简单提到过Linux应用开发笔记(五)网络编程(二)多线程编程。原创 2024-06-22 13:53:59 · 917 阅读 · 0 评论 -
Linux驱动开发笔记(十一)tty子系统及其驱动
之前已经讲过应用层的应用,接下来我们继续进行驱动的学习。其实实际上我们很少主动进行串口的驱动编写,通常情况下只需要进行应用层的应用就可以了,网络上相关的驱动内容介绍也较少,这里仅作了解并简单了解一下架构即可。原创 2024-06-22 13:53:53 · 824 阅读 · 0 评论 -
LInux驱动开发笔记(十)SPI子系统及其驱动
前章我们已经学习了iic子系统驱动,这部分我们继续spi子系统驱动的学习。原创 2024-06-20 15:38:49 · 881 阅读 · 0 评论 -
Linux驱动开发笔记(九)IIC子系统及其驱动
IIC我们已经学习过很多次了,在应用部分我们已经介绍过其应用层的开发,这章我们将继续驱动部分的开发。本次实验采用MPU6050,使用了input子系统及IIC子系统构成。MPU6050是全球首例整合性6轴(3轴陀螺仪+3轴加速度计)运动处理组件,也可以通过扩展实现9轴运动处理(在连接三轴磁传感器后)。它集成了三轴MEMS陀螺仪和三轴MEMS加速度计,以及一个可扩展的数字运动处理器DMP(Digital Motion Processor)。原创 2024-06-20 15:38:37 · 1086 阅读 · 0 评论 -
Linux驱动开发笔记(八)输入子系统
Linux 的 input 子系统是一个用于处理和管理输入设备(例如键盘、鼠标、触摸屏、游戏控制器等)的框架。它的作用是将硬件输入设备产生的原始输入数据转换成系统可以识别和使用的输入事件,并将这些事件传递给用户空间的应用程序。原创 2024-06-14 21:19:09 · 1323 阅读 · 0 评论 -
Linux驱动开发笔记(七)软中断
前节我们已经进行了外部中断的学习,这部分进行进阶内容——软中断。在Linux内核中,tasklet是一种特殊的软中断机制,被广泛用于处理中断下文相关的任务。它是一种常见且有效的方法,在多核处理系统上可以避免并发问题。Tasklet绑定的函数在同一时间只能在一个CPU上运行,因此不会出现并发冲突。然而,需要注意的是,tasklet绑定的函数中不能调用可能导致休眠的函数,否则可能引起内核异常。//初始化一个 work_struct 结构体,并指定工作函数。原创 2024-06-14 21:19:02 · 678 阅读 · 0 评论 -
Linux驱动开发笔记(六)中断子系统及实验
本章我们将讲解下和中断相关的知识,了解内核中断的框架和中断的概念,对于arm的中断控制器(GIC v3)相关内容,主要是借鉴参考手册简单解释下。原创 2024-06-06 00:34:49 · 1097 阅读 · 0 评论 -
Linux驱动开发笔记(五) 基于设备树与GPIO子系统的操作实验
前两章我们学习了平台设备和设备树的相关内容,接下来将对这部分进行结合学习。本章分为两部分,即有、无通过平台设备借由设备树对GPIO进行操作,大家可以自行比对。注册平台驱动时会用到平台设备结构体,在平台设备结构体主要作用是指定平台驱动的.probe函数、指定与平台驱动匹配的平台设备, 使用了设备树后就是指定与平台驱动匹配的设备树节点。//定义匹配表},//定义平台设备结构体。原创 2024-06-06 00:34:35 · 959 阅读 · 0 评论 -
Linux驱动开发笔记(四)设备树进阶及GPIO、Pinctrl子系统
在早期笔者已经简单介绍过设备树的相关信息,本章将详细展开学习一下这部分内容。原创 2024-05-30 16:08:39 · 827 阅读 · 0 评论 -
Linux驱动开发笔记(三)平台设备驱动
随着科技的飞速发展,平台设备已成为现代计算机系统不可或缺的重要组成部分。无论是智能手机、平板电脑,还是嵌入式系统、数据中心服务器,平台设备都承载着系统运行的核心功能。因此,平台设备驱动的开发与优化,对于保障系统稳定性、提升性能以及满足用户日益增长的需求具有至关重要的作用。在接下来的章节中,我们将详细介绍该驱动的设计思路、实现原理、功能特性以及使用方法,希望能够为广大读者提供有价值的参考和借鉴。//定义一个resource结构体,用于存放上述的寄存器地址,提供给驱动使用。原创 2024-05-30 16:07:29 · 1149 阅读 · 0 评论 -
Linux驱动开发笔记(二) 基于字符设备驱动的GPIO操作
前段时间我们学习了字符驱动,并实现了字符的回环发送,这部分我们将进行I/O的操作学习,以万能的点亮LED为例。需要设置的寄存器的地址为base+offset,由下图可以知道GPIO1的基地址为:0xFE740000接下来就是确定GPIO的是输入还是输出,我们这里需要的是GPIO_SWPORT_DDR_L。可以看到GPIO_SWPORT_DDR_L的定义情况,这里我们可以重复上面提到的命令行,查看寄存器的设置情况,我们的b0应当是第1x7+1=8位。原创 2024-05-21 09:12:11 · 1049 阅读 · 0 评论 -
Linux驱动开发笔记(一)字符驱动
本文将通过字符驱动正式展开Linux驱动开发的学习。原创 2024-04-19 17:59:34 · 943 阅读 · 0 评论 -
Linux驱动开发笔记(零)驱动基础知识及准备
在简单结束应用层的开发学习后,本系列将开启驱动层的学习,本文作为该系列第一期旨在归纳前期需要准备的知识。Linux内核模块是Linux内核向外部提供的一个插口,也被称为动态可加载内核模块(Loadable Kernel Module,LKM)。它是一个具有独立功能的程序,可以被单独编译,但不能独立运行。在运行时,内核模块被链接到内核作为内核的一部分在内核空间运行。内核模块的主要作用是扩展内核的功能,而无需重新编译整个内核。例如,内核模块通常用于添加新的设备驱动程序、文件系统或其他功能到内核中。原创 2024-04-19 17:13:07 · 1110 阅读 · 0 评论