
Linux驱动开发
文章平均质量分 95
橘猫.exe
喜欢c/c ++ stm32/51单片机 嵌入式Linux。“舞台再大,你不上台,永远只是一个观众”;“平台再好,你不参与,永远是局外人”;“能力再大,你不行动,你只能看别人成功”。没有人会关心你付出多少,努力撑的累不累,捧得痛不痛,他们只会看你最后站在什么位置,然后羡慕或鄙夷
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【Linux 并发与竞争实验】
之前学习了四种常用的处理并发和竞争的机制:原子操作、自旋锁、信号量和互斥体。本章我们就通过四个实验来学习如何在驱动中使用这四种机制。原创 2025-04-16 21:35:24 · 893 阅读 · 0 评论 -
【Linux 并发与竞争】
Linux是一个多任务操作系统,肯定会存在多个任务共同操作同一段内存或者设备的情况,多个任务甚至中断都能访问的资源叫做共享资源,就和共享单车一样。在驱动开发中要注意对共享资源的保护,也就是要处理对共享资源的并发访问。比如共享单车,大家按照谁扫谁骑走的原则来共用这个单车,如果没有这个并发访问共享单车的原则存在,只怕到时候为了一辆单车要打起来了。在 Linux 驱动编写过程中对于并发控制的管理非常重要,本章我们就来学习一下如何在 Linux 驱动中处理并发。原创 2025-04-16 20:51:52 · 884 阅读 · 0 评论 -
【Linux驱动开发】pinctrl 和 gpio 子系统实验
Linux 驱动讲究驱动分离与分层,pinctrl 和 gpio 子系统就是驱动分离与分层思想下的产物,驱动分离与分层其实就是按照面向对象编程的设计思想而设计的设备驱动框架,关于驱动的分离与分层我们后面会讲。我们先来回顾一下《设备树下的LED驱动实验》是怎么初始化 LED 灯所使用的 GPIO,步骤如下:①、修改设备树,添加相应的节点,节点里面重点是设置 reg 属性,reg 属性包括了 GPIO相关寄存器。②、获取 reg 属性中和。原创 2025-03-30 08:00:00 · 857 阅读 · 0 评论 -
【Linux设备树–IMX6ULL】设备树下的 LED 驱动实验
从可以看出,alpahled 这个节点找到了,并且 compatible 属性值为“atkalpha-led”,status 属性值为“okay”,reg 属性的值为“0X20C406C 0X4 0X20E0068 0X4 0X20E02F4 0X4 0X209C000 0X4 0X209C004 0X4”,这些都和我们设置的设备树一致。本章我们使用设备树来向 Linux 内核传递相关的寄存器物理地址,Linux 驱动文件使用OF函数从设备树中获取所需的属性值,然后使用获取到的属性值来初始化相关的 IO。原创 2025-03-30 07:00:00 · 847 阅读 · 0 评论 -
【Linux设备树–IMX6ULL】(二)设备树下
关于设备树常用的 OF 函数就先讲解到这里,Linux 内核中关于设备树的 OF 函数不仅仅只有前面讲的这几个,还有很多 OF 函数我们并没有讲解,这些没有讲解的 OF 函数要结合具体的驱动,比如获取中断号的 OF 函数、获取 GPIO 的 OF 函数等等,这些 OF 函数我们在后面的驱动实验中再详细的讲解。④、关于设备树的 OF 操作函数,也是重点,因为设备树最终是被驱动文件所使用的,而驱动文件必须要读取设备树中的属性信息,比如内存信息、GPIO 信息、中断信息等等。原创 2025-03-29 08:00:00 · 673 阅读 · 0 评论 -
【Linux设备树–IMX6ULL】(一)简介和DTS语法
设备树(Device Tree),将这个词分开就是“设备”和“树”,描述设备树的文件叫做 DTS(DeviceTree Source),这个 DTS 文件采用树形结构描述板级设备,也就是开发板上的设备信息,比如CPU 数量、 内存基地址、IIC 接口上接了哪些设备、SPI 接口上接了哪些设备等等树的主干就是系统总线,IIC 控制器、GPIO 控制器、SPI 控制器等都是接到系统主线上的分支。原创 2025-03-29 07:00:00 · 867 阅读 · 0 评论 -
【字符设备驱动开发–IMX6ULL】新字符设备驱动实验
老字符设备驱动开发重点是使用函数注册字符设备,当不再使用设备的时候就使用函数注销字符设备,驱动模块加载成功以后还需要手动使用 mknod 命令创建设备节点。register_chrdev 和 unregister_chrdev 这两个函数是老版本驱动使用的函数。现在新的字符设备驱动已经不再使用这两个函数,而是使用Linux内核推荐的新字符设备驱动API函数。本节我们就来学习一下如何编写新字符设备驱动,并且在驱动模块加载的时候自动创建设备节点文件。原创 2025-03-28 07:45:00 · 1033 阅读 · 0 评论 -
【字符设备驱动开发–IMX6ULL】嵌入式 Linux LED 驱动开发实验–寄存器版
经过前面几步,GPIO1_IO03 已经配置好了,只需要向 GPIO1_DR 寄存器的 bit3 写入 0 即可控制 GPIO1_IO03 输出低电平,打开 LED,向 bit3 写入 1 可控制 GPIO1_IO03 输出高电平,关闭 LED。所以本章的 LED 灯驱动最终也是对 I.MX6ULL 的 IO 口进行配置,与裸机实验不同的是,在 Linux 下编写驱动要符合 Linux的驱动框架。Linux 内核启动的时候会初始化 MMU,设置好内存映射,设置好以后 CPU 访问的都是虚拟地址。原创 2025-03-28 07:00:00 · 819 阅读 · 0 评论 -
【字符设备驱动开发–IMX6ULL】(四)chrdevbase 字符设备驱动开发实验
本节我们就以 chrdevbase 这个虚拟设备为例,完整的编写一个字符设备驱动模块。chrdevbase 不是实际存在的一个设备,是笔者为了方便讲解字符设备的开发而引入的一个虚拟设备。chrdevbase 设备有两个缓冲区,一个为读缓冲区,一个为写缓冲区,这两个缓冲区的大小都为 100 字节。在应用程序中可以向 chrdevbase 设备的写缓冲区中写入数据,从读缓冲区中读取数据。chrdevbase 这个虚拟设备的功能很简单,但是它包含了字符设备的最基本功能。原创 2025-03-27 08:00:00 · 783 阅读 · 0 评论 -
【字符设备驱动开发–IMX6ULL】(三)字符设备驱动开发步骤
我们在学习裸机或者 STM32 的时候关于驱动的开发就是初始化相应的外设寄存器,在 Linux 驱动开发中肯定也是要初始化相应的外设寄存器,这个是毫无疑问的。只是在 Linux 驱动开发中我们需要按照其规定的框架来编写驱动,所以说学 Linux 驱动开发重点是学习其驱动框架。原创 2025-03-27 07:30:00 · 772 阅读 · 0 评论 -
【字符设备驱动开发–IMX6ULL】(二)Linux 设备号
注册字符设备的时候需要给设备指定一个设备号,这个设备号可以是驱动开发者静态的指定一个设备号,比如选择 200 这个主设备号。这 32 位的数据构成了主设备号和次设备号两部分,其中高 12 位为主设备号,低 20 位为次设备号。为了方便管理,Linux 中每个设备都有一个设备号,设备号由主设备号和次设备号两部分组成,主设备号表示某一个具体的驱动,次设备号表示使用这个驱动的各个设备。,在注册字符设备之前先申请一个设备号,系统会自动给你一个没有被使用的设备号,这样就避免了冲突。注销字符设备之后要释放掉设备号,原创 2025-03-26 11:12:19 · 841 阅读 · 0 评论 -
【字符设备驱动开发–IMX6ULL】(一)简介
字符设备是 Linux 驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节流进行读写操作的设备,读写数据是分先后顺序的。比如我们最常见的点灯、按键、IIC、SPI,LCD 等等都是字符设备,这些设备的驱动就叫做字符设备驱动。在详细的学习字符设备驱动架构之前,我们先来简单的了解一下 Linux 下的应用程序是如何调用驱动程序的,Linux 应用程序对驱动程序的调用如图所示:在 Linux 中一切皆为文件,驱动加载成功以后会在“/dev”目录下生成一个相应的文件,应用程序通过对这个名为。原创 2025-03-26 11:10:52 · 999 阅读 · 0 评论