Linux驱动开发笔记
文章平均质量分 95
云雨歇
一枚在校的嵌入式菜鸟,不定时更新自己的学习笔记,感兴趣的读者可以和我一起加油
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Linux驱动开发笔记(十九)文件系统的构建
上节我们在mdev实验进行配置时,利用了busybox,这里着重对这部分进行学习。文件系统可直观的理解为Windows上的文件资源管理器,Linux启动后一定要挂载一个文件系统,这样程序才能被执行。文件系统可大可小,通过构造文件系统可衍生QT,ubuntu,android等系统。Linux还有一个重要思想:一切皆文件,像串口,led,按键等这些硬件设备,都可以归结为像文件一样的操作,如read,write,open,close。原创 2024-07-17 00:31:38 · 1568 阅读 · 0 评论 -
Linux驱动开发笔记(十八)热插拔
前面已经学习了很多外设,但是这些设备都存在一个问题,无法在运行的过程中自动检测设备的插入或移除,所以这里引入了热插拔的概念。在Linux操作系统中,热插拔(Hot Plug)指的是在不关闭系统电源的情况下,动态地插入或移除硬件设备的能力。这对于服务器和其他需要高可用性的系统非常重要,因为它允许在运行时更换或添加设备而不影响系统的正常运行。热插拔机制有很多,目前来说一般是在嵌入式设备上使用mdev,在x86上使用udev,当然也可以在嵌入式设备上使用udev。原创 2024-07-17 00:31:07 · 2349 阅读 · 0 评论 -
Linux驱动开发笔记(十七)设备模型总结
本文是对设备模型的一次总结,笔者回顾最近的笔记时发现一直缺少这部分内容,这期是对前面内容的查漏补缺。kobject是Linux内核中用于管理内核对象的基础组件,它提供了引用计数、层次结构、sysfs集成和uevent支持等功能,帮助开发者更好地管理和操作内核对象。我们可以将kobject结构体类比为一个组织中的员工记录系统,每个员工记录包含员工的基本信息、职位信息、部门信息以及一些管理功能。在设备模型中,kobject起到了核心作用,使得设备和驱动的管理变得更加系统化和灵活。原创 2024-07-16 00:46:06 · 2118 阅读 · 0 评论 -
Linux驱动开发笔记(十六)网络设备驱动
Linux的驱动主要分为三大类:字符驱动、块设备驱动和网络设备驱动,今天我们进行最后一类——网络驱动的学习。原创 2024-07-16 00:45:52 · 1498 阅读 · 0 评论 -
Linux驱动开发笔记(十五)块设备驱动
字符设备的学习我们暂时告一段落了,这部分内容我们主要进行块设备驱动的学习。原创 2024-07-15 10:34:35 · 1427 阅读 · 0 评论 -
Linux驱动开发笔记(十四)PWM子系统
PWM子系统用于管理PWM波的输出,与我们之前学习的其他子系统类似,PWM具体实现代码由芯片厂商提供并默认编译进内核, 而我们可以使用内核(pwm子系统)提供的一些接口函数来实现具体的功能,例如使用PWM波控制显示屏的背光、控制无源蜂鸣器、伺服电机、电压调节等等。原创 2024-07-15 10:34:08 · 3007 阅读 · 0 评论 -
Linux驱动开发笔记(十三)Sysfs文件系统
前面章节驱动学习中,我们测试驱动时经常使用/sys目录下文件,我们本章就简单介绍下Sysfs文件系统。原创 2024-06-22 16:09:12 · 3464 阅读 · 1 评论 -
Linux驱动开发笔记(十二)并发与竞争
Linux的子系统我们已经大致学习完了,笔者最近相到似乎一直没有好好学习一下并发和竞争这一部分内容(在网络编程中曾经简单提到过Linux应用开发笔记(五)网络编程(二)多线程编程。原创 2024-06-22 13:53:59 · 1166 阅读 · 0 评论 -
Linux驱动开发笔记(十一)tty子系统及其驱动
之前已经讲过应用层的应用,接下来我们继续进行驱动的学习。其实实际上我们很少主动进行串口的驱动编写,通常情况下只需要进行应用层的应用就可以了,网络上相关的驱动内容介绍也较少,这里仅作了解并简单了解一下架构即可。原创 2024-06-22 13:53:53 · 1711 阅读 · 0 评论 -
LInux驱动开发笔记(十)SPI子系统及其驱动
前章我们已经学习了iic子系统驱动,这部分我们继续spi子系统驱动的学习。原创 2024-06-20 15:38:49 · 3294 阅读 · 0 评论 -
Linux驱动开发笔记(九)IIC子系统及其驱动
IIC我们已经学习过很多次了,在应用部分我们已经介绍过其应用层的开发,这章我们将继续驱动部分的开发。本次实验采用MPU6050,使用了input子系统及IIC子系统构成。MPU6050是全球首例整合性6轴(3轴陀螺仪+3轴加速度计)运动处理组件,也可以通过扩展实现9轴运动处理(在连接三轴磁传感器后)。它集成了三轴MEMS陀螺仪和三轴MEMS加速度计,以及一个可扩展的数字运动处理器DMP(Digital Motion Processor)。原创 2024-06-20 15:38:37 · 1597 阅读 · 0 评论 -
Linux驱动开发笔记(八)输入子系统
Linux 的 input 子系统是一个用于处理和管理输入设备(例如键盘、鼠标、触摸屏、游戏控制器等)的框架。它的作用是将硬件输入设备产生的原始输入数据转换成系统可以识别和使用的输入事件,并将这些事件传递给用户空间的应用程序。原创 2024-06-14 21:19:09 · 1751 阅读 · 0 评论 -
Linux驱动开发笔记(七)软中断
前节我们已经进行了外部中断的学习,这部分进行进阶内容——软中断。在Linux内核中,tasklet是一种特殊的软中断机制,被广泛用于处理中断下文相关的任务。它是一种常见且有效的方法,在多核处理系统上可以避免并发问题。Tasklet绑定的函数在同一时间只能在一个CPU上运行,因此不会出现并发冲突。然而,需要注意的是,tasklet绑定的函数中不能调用可能导致休眠的函数,否则可能引起内核异常。//初始化一个 work_struct 结构体,并指定工作函数。原创 2024-06-14 21:19:02 · 1411 阅读 · 0 评论 -
Linux驱动开发笔记(六)中断子系统及实验
本章我们将讲解下和中断相关的知识,了解内核中断的框架和中断的概念,对于arm的中断控制器(GIC v3)相关内容,主要是借鉴参考手册简单解释下。原创 2024-06-06 00:34:49 · 1565 阅读 · 0 评论 -
Linux驱动开发笔记(五) 基于设备树与GPIO子系统(含单总线)的操作实验
前两章我们学习了平台设备和设备树的相关内容,接下来将对这部分进行结合学习。本章分为两部分,即有、无通过平台设备借由设备树对GPIO进行操作,大家可以自行比对。注册平台驱动时会用到平台设备结构体,在平台设备结构体主要作用是指定平台驱动的.probe函数、指定与平台驱动匹配的平台设备, 使用了设备树后就是指定与平台驱动匹配的设备树节点。//定义匹配表},//定义平台设备结构体。原创 2024-06-06 00:34:35 · 1624 阅读 · 0 评论 -
Linux驱动开发笔记(四)设备树进阶及GPIO、Pinctrl子系统
在早期笔者已经简单介绍过设备树的相关信息,本章将详细展开学习一下这部分内容。原创 2024-05-30 16:08:39 · 2102 阅读 · 0 评论 -
Linux驱动开发笔记(三)平台设备驱动
随着科技的飞速发展,平台设备已成为现代计算机系统不可或缺的重要组成部分。无论是智能手机、平板电脑,还是嵌入式系统、数据中心服务器,平台设备都承载着系统运行的核心功能。因此,平台设备驱动的开发与优化,对于保障系统稳定性、提升性能以及满足用户日益增长的需求具有至关重要的作用。在接下来的章节中,我们将详细介绍该驱动的设计思路、实现原理、功能特性以及使用方法,希望能够为广大读者提供有价值的参考和借鉴。//定义一个resource结构体,用于存放上述的寄存器地址,提供给驱动使用。原创 2024-05-30 16:07:29 · 1881 阅读 · 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 · 1788 阅读 · 0 评论 -
Linux驱动开发笔记(一)字符驱动
本文将通过字符驱动正式展开Linux驱动开发的学习。原创 2024-04-19 17:59:34 · 1871 阅读 · 0 评论 -
Linux驱动开发笔记(零)驱动基础知识及准备
在简单结束应用层的开发学习后,本系列将开启驱动层的学习,本文作为该系列第一期旨在归纳前期需要准备的知识。Linux内核模块是Linux内核向外部提供的一个插口,也被称为动态可加载内核模块(Loadable Kernel Module,LKM)。它是一个具有独立功能的程序,可以被单独编译,但不能独立运行。在运行时,内核模块被链接到内核作为内核的一部分在内核空间运行。内核模块的主要作用是扩展内核的功能,而无需重新编译整个内核。例如,内核模块通常用于添加新的设备驱动程序、文件系统或其他功能到内核中。原创 2024-04-19 17:13:07 · 5022 阅读 · 0 评论
分享