Linux
文章平均质量分 92
linux驱动开发入门笔记分享
嵌入~狮
一个慢慢努力提升的小趴菜
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Linux快捷指令——常用命令
此贴子主要记录一些常用的命令,可根据目录进行索引,会根据日常学习进行更新迭代。原创 2024-08-01 21:04:06 · 950 阅读 · 0 评论 -
嵌入式驱动开发详解20(IIO驱动架构)
IIO 全称是 Industrial I/O,翻译过来就是工业 I/O,IIO 就是为 ADC 类或者 DAC 类传感器准备的,大家常用的陀螺仪、加速度 计、电压/电流测量芯片、光照传感器、压力传感器等内部都是有个 ADC,内部 ADC 将原始的 模拟数据转换为数字量,然后通过其他的通信接口,比如 IIC、SPI 等传输给 SOC。当使用的传感器本质是 ADC 或 DAC 器件的时候,可以优先考虑使用 IIO 驱动框架。原创 2024-12-22 15:29:22 · 1861 阅读 · 0 评论 -
嵌入式驱动开发详解19(regmap驱动架构)
在前面学习 I2C 和 SPI 驱动的时候,针对 I2C 和 SPI 设备寄存器的操作都是通过相关 的 API 函数进行操作的。这样 Linux 内核中就会充斥着大量的重复、冗余代码,但是这些本质上都是对寄存器的操作,所以为了方便内核开发人员统一访问 I2C/SPI 等设备,引入了 Regmap 子系统。regmap:regmap 是 Linux 内核为了减少慢速 I/O 在驱动上的冗余开销,提供了一种通用的接口来操 作硬件寄存器。问题。原创 2024-12-18 21:15:25 · 1017 阅读 · 0 评论 -
嵌入式驱动开发详解18(USB驱动开发)
该专栏主要是讲解嵌入式相关的驱动开发,但是由于部分模块的驱动框架过于复杂,其内容量不是一个人能完成的,我们驱动开发人员主要是对其进行理解即可,所以本专栏对部分驱动代码相关内容不进行讲解,包括ALSA,Codec,CAN,USB,WIFI,4G模块等,这些只讲解相关的协议等基础知识USB 全称为 Universal Serial Bus,翻译过来就是通用串行总线。由英特尔与众多电脑公司 提出来,用于规范电脑与外部设备的连接与通讯。原创 2024-12-17 19:25:50 · 1363 阅读 · 0 评论 -
嵌入式驱动开发详解17(CAN驱动开发)
该专栏主要是讲解嵌入式相关的驱动开发,但是由于部分模块的驱动框架过于复杂,其内容量不是一个人能完成的,我们驱动开发人员主要是对其进行理解即可,所以本专栏对部分驱动代码相关内容不进行讲解,包括ALSA,Codec,CAN,USB,WIFI,4G模块等,这些只讲解相关的协议等基础知识CAN 是目前应用非常广泛的现场总线之一,主要应用于汽车电子和工业领域,尤其是汽车领域,汽车上大量的传感器与模块都是通过 CAN 总线连接起来的。原创 2024-12-16 21:09:49 · 1593 阅读 · 0 评论 -
嵌入式驱动开发详解16(音频驱动开发)
因此该专栏主要是讲解嵌入式相关的驱动开发,但是由于ALSA驱动框架过于复杂,实现音频编解码芯片的驱动不是一个人能完成的,所以没有对应具体的驱动代码相关内容,包括后面的CAN,USB,WIFI,4G模块这些都是比较复杂的,都只会讲解相关的协议等基础知识音频是我们最常用到的功能,音频也是 linux 和安卓的重点应用场合。由于音频驱动开发任务量巨大,不是一个人能全流程实现的,因此只是通过修改设备树和已写好的驱动进行修改开发,该专栏后面的USB驱动、网络驱动等都是如此,对基础感兴趣的可以参考专栏的前部分文章。原创 2024-12-14 10:58:37 · 2183 阅读 · 0 评论 -
嵌入式驱动开发详解15(电容触摸屏gt9147)
随着智能手机的发展,电容触摸屏也得到了飞速的发展。相比电阻触摸屏,电容触摸屏有 很多的优势,比如支持多点触控、不需要按压,只需要轻轻触摸就有反应。原创 2024-12-11 21:46:54 · 1653 阅读 · 0 评论 -
嵌入式驱动开发详解14(SPI驱动架构实现)
SPI 是很常用的串行通信协议,可以通过 SPI 来连接众多的传感器,相比 I2C 接 口,SPI 接口的通信速度很快,I2C 最多 400KHz,但是 SPI 可以到达几十 MHz。本文章主要讲解SPI串行通信协议相关的基本内容和在Linux操作系统下如何进行SPI外设的开发。SPI 全称是 Serial Perripheral Interface,也就是串行外围设备接口。原创 2024-12-09 16:58:25 · 1946 阅读 · 0 评论 -
嵌入式驱动开发详解13(IIC驱动架构实现)
本内容主要讲解在linux系统上开发I2C设备驱动,先讲解I2C相关的基础知识,再讲解I2C设备驱动框架,最后讲解I2C设备驱动具体实现。原创 2024-12-09 11:52:30 · 1190 阅读 · 0 评论 -
嵌入式驱动开发详解12(LCD驱动)
LCD 是现在最常用到的显示器,手机、 电脑、各种人机交互设备等基本都用到了 LCD,最常见就是手机和电脑显示器了。通过 LCD 可以显示绚丽的图形、界面等,提高人机交互的效率。分辨率:提起 LCD 显示器,我们都会听到 720P、1080P、2K 或 4K 这样的字眼,这个就是 LCD 显 示器分辨率。原创 2025-01-15 15:21:25 · 1595 阅读 · 0 评论 -
嵌入式驱动开发详解11(INPUT子系统)
按键、鼠标、键盘、触摸屏等都属于输入(input)设备,Linux 内核为此专门做了一个叫做 input 子系统的框架来处理输入事件。输入设备本质上还是字符设备,只是在此基础上套上了 input 框 架,用户只需要负责上报输入事件,比如按键值、坐标等信息,input 核心层负责处理这些事件。input 就是输入的意思,因此 input 子系统就是管理输入的子系统,和 pinctrl、gpio 子系统 一样,都是 Linux 内核针对某一类设备而创建的框架。原创 2025-01-07 21:36:03 · 1063 阅读 · 0 评论 -
嵌入式驱动开发详解10(MISC杂项实现)
MISC 驱动也叫做杂项驱动,也就是当我们板子上的某 些外设无法进行分类的时候就可以使用 MISC 驱动。MISC 驱动其实就是最简单的字符设备驱 动,通常嵌套在 platform 总线驱动中,所有的 MISC 设备驱动的主设备号都为 10,不同的设备使用不同的从设备号。随着 Linux 字符设备驱动的不断增加,设备号变得越来越紧张,尤其是主设备号,MISC 设备驱动就用于解决此问题。MISC 设备会自动创建 cdev,不需要像我们以前那样手动创建,因此采用 MISC 设备驱动可以简化字符设备驱动的编写。原创 2025-01-07 20:14:50 · 1013 阅读 · 0 评论 -
嵌入式驱动开发详解9(platform驱动)
Linux 系统要考虑到驱动的可重用性,提出了驱动的分离与分层这样的软件思路,在这个思路下诞生了我们最常打交道的 platform 设备驱动,也叫做平台设备驱动。在实际的驱动开发中,一般 I2C 主机控制器驱动已经由 半导体厂家编写好了,而设备驱动一般也由设备器件的厂家编写好了,我们只需要提供设备信 息即可,比如 I2C 设备的话提供设备连接到了哪个 I2C 接口上,I2C 的速度是多少等等。原创 2025-01-02 14:35:42 · 1315 阅读 · 0 评论 -
嵌入式驱动开发详解8(阻塞/非阻塞/异步通信)
首先来回顾一下“中断”,中断是处理器提供的一种异步机制,我们配置好中断以后就 可以让处理器去处理其他的事情了,当中断发生以后会触发我们事先设置好的中断服务函数, 在中断服务函数中做具体的处理。同样的,Linux 应用程序可以通过阻塞或者非阻塞这两种方式来访问驱动设备,通过阻塞方式访问的话应用程序会处于休眠态,等待驱动设备可以使用,非阻塞方式的话会通过 poll 函数来不断的轮询,查看驱动设备文件是否可以使用。这两种方式都需要应用程序主动的去查询设备的使用情况;原创 2025-01-02 11:19:36 · 979 阅读 · 0 评论 -
嵌入式驱动开发详解7(并发、竞争、中断)
中断会引起线程的切换,并发和竞争也是对线程切换的一种灵活保护和处理,因此这里将中断和并发与竞争放在一块讲解说明。中断控制器:GIC 是 ARM 公司给 Cortex-A/R 内核提供的一个中断控制器,类似 Cortex-M 内核中的 NVIC。目前 GIC 有 4 个版本:V1~V4,V1 是最老的版本,已经被废弃了。V2~V4 目前正在大 量的使用。原创 2024-12-28 22:00:37 · 1138 阅读 · 0 评论 -
嵌入式驱动开发详解6(RTC)
实时时钟是很常用的一个外设,通过实时时钟我们就可以知道年、月、日和时间等信息。因此在需要记录时间的场合就需要实时时钟,可以使用专用的实时时钟芯片来完成此功能,但 是现在大多数的 MCU 或者 MPU 内部就已经自带了实时时钟外设模块。STM32 内部有一个 RTC 外设模块,这个模块需要一个 32.768KHz 的晶振,对这个 RTC 模块进行初始化就可以得到一个实时时钟。I.MX6U 内部也有 个 RTC 模块,但是不叫作“RTC”,而是叫做“SNVS”,这一点要注意!原创 2024-12-12 19:36:26 · 1014 阅读 · 0 评论 -
嵌入式驱动开发详解5(ioctl的使用)
linux内核给用户提供了两类系统调用函数:一类是数据操作函数,比如read、write…。另外一类函数是非数据操作函数,比如ioctl…,用户程序可以用ioctl给底层设备发送指令。ioctl 是设备驱动程序中设备控制接口函数,一个字符设备驱动通常会实现设备打开、关闭、读、写等功能,在一些需要细分的情境下,如果需要扩展新的功能,通常以增设 ioctl() 命令的方式实现。==在文件 I/O 中,ioctl 扮演着重要角色,本文将以驱动开发为侧重点,从用户空间到内核空间纵向分析 ioctl 函数。==原创 2024-12-05 11:19:35 · 1432 阅读 · 0 评论 -
嵌入式驱动开发详解4(内核定时器)
LInux内核定时器是一种基于未来时间点的计时方式,以当前时刻来启动的时间点,以未来的某一时刻为终止点。比如,现在是10点5分,我要定时5分钟,那么定时就是10点5分+5分钟=10点10分。这个和手机闹钟很相似。比如你要定一个第二天早晨8点的闹钟,就是当前时间定时到第二天早晨8点。原创 2024-12-05 10:33:20 · 1357 阅读 · 0 评论 -
嵌入式驱动开发详解3(pinctrl和gpio子系统)
如果不用pinctrl和gpio子系统的话,我们开发驱动时需要先在设备树或者驱动文件中对pin进行配置成相应的功能引脚,然后如果是gpio功能的话就需要进行gpio初始化,如果是其他外设的话就需要进行其他外设的初始化,因为经常将引脚配置为gpio模式,因此linux内核针对pin的配置特意推出了pinctrl子系统,针对gpio的配置推出了gpio子系统,对于一些其他的外设模式有其他特定的子系统,这里不做讲解。原创 2024-11-25 15:25:35 · 1487 阅读 · 0 评论 -
嵌入式驱动开发详解2(设备挂载问题)
驱动的设备挂载和卸载是十分重要的内容,一旦操作不当可能会导致系统崩溃,接下来我将用字符设备的驱动挂载原理进行详细讲解,并把自己在学习过程中遇到的问题与解决办法进行展示。原创 2024-11-24 16:46:35 · 1504 阅读 · 0 评论 -
嵌入式驱动开发详解1(系统调用)
应用层程序直接用系统提供的API函数即可调用驱动层相应的函数,中间的具体过程都是由linux内核实现的,下面我们用read函数来举例子。原创 2024-11-19 00:09:37 · 884 阅读 · 0 评论
分享