
linux驱动开发
linux驱动开发
hurryddd
对单片机、Linux、IOT感兴趣,热衷于相关新技术的学习与研究
展开
-
Linux驱动开发学习总结【第一阶段:20200608 ——202000719】
目录1、添加字符设备驱动方式2、将驱动编译成.ko的模块及其注册注销方式3、驱动模块加载使用方式4、设备树及设备树节点添加,dts语法,of函数的使用5、Linux并发与竞争6、嵌入式调试环境搭建7、Linux内核中断8、内核定时器使用9、Linux阻塞与非阻塞IO10、Linux异步通知11、platform平台设备驱动12、pinctl和gpio子系统13、杂项驱动14、input子系统15、多种LED驱动(1)手动创建设备节点【无设备树,原创 2020-07-19 17:11:06 · 618 阅读 · 0 评论 -
Linux驱动开发学习笔记【12】:Linux自带LED灯驱动
目录一、内核自带LED驱动使能二、内核自带LED驱动分析三、内核自带LED驱动使用一、内核自带LED驱动使能在Linux内核中,已经自带了LED灯的驱动程序,使用的就是platform平台驱动,在使用之前,需要通过 make menuconfig 配置内核,使能LED灯的驱动保存退出会在目录下的 .config 配置文件中多处 CONFIG_LEDS_GPIO=y 的宏,y 表示编译进内核,如果是 m 则表示编译成模块。完成后使用 make -j4 就能将新添加的LED驱动添加.原创 2020-07-14 00:28:19 · 1572 阅读 · 1 评论 -
Linux驱动开发学习笔记【11】:platform设备驱动
目录一、Linux驱动分离与分层1.1、驱动的分隔与分离1.2、驱动的分层二、驱动 - 总线 - 设备 模型2.1 总线2.2 驱动2.3 设备三、platform平台驱动模型3.1 platform总线3.2 platform驱动3.3 platform设备3.4 platform匹配过程四、platform平台驱动实验程序编写4.1 无设备树4.2 有设备树一、Linux驱动分离与分层为了方便驱动的编写,提高软件的重用以及跨平台性能,L原创 2020-07-12 23:27:40 · 365 阅读 · 0 评论 -
Linux驱动开发学习笔记【10】:Linux异步通知
目录一、信号二、同步IO、异步IO、阻塞IO、非阻塞IO之间的联系与区别三、实现过程1、应用程序2、驱动程序一、信号先来回顾一下“中断”,中断是处理器提供的一种异步机制,我们配置好中断以后就可以让处理器去处理其他的事情了,当中断发生以后会触发我们事先设置好的中断服务函数,在中断服务函数中做具体的处理。采用中断以后处理器就不需要时刻的去查看按键有没有被按下,因为按键按下以后会自动触发中断。同样的, Linux应用程序可以通过阻塞或者非阻塞这两种方式来访问驱动设备阻塞方式访问原创 2020-07-12 23:12:20 · 517 阅读 · 0 评论 -
Linux驱动开发学习笔记【9】:Linux阻塞和非阻塞IO
一、阻塞和非阻塞IO这里的IO指的是Input/Output,也就是输入/输出,是应用程序对驱动设备的输入/输出操作。当应用程序对设备驱动进行操作的时候,如果不能获取到设备资源,那么阻塞式IO 就会将应用程序对应的线程挂起,直到设备资源可以获取为止。对于非阻塞IO,应用程序对应的线程不会挂起,它要么一直轮询等待,直到设备资源可以使用,要么就直接放弃。阻塞访问最大的好处就是当设备文件不可操作的时候进程可以进入休眠态,这样可以将CPU资源让出来。但是,当设备文件可以操作的时候就必须唤醒进程,一般在中断函原创 2020-07-12 22:57:48 · 412 阅读 · 0 评论 -
Linux驱动开发学习笔记【8】:Linux中断系统
目录一、Linux内核中断处理过程1.1、裸机中断1.2、linux中断二、linux中断的上半部和下半部2.1 软中断2.2 tasklet2.3 工作队列2.4 中断线程化三、设备树中的中断节点信息四、获取中断号五、按键输入带定时器消抖程序编写1、GPIO输入中断上半部、下半部(tasklet或work)参考使用示例一、Linux内核中断处理过程1.1、裸机中断(1)使能中断,初始化相应的寄存器。(2)注册中断服务函数,也就是向 irqTa原创 2020-07-12 22:32:41 · 856 阅读 · 0 评论 -
Linux驱动开发学习笔记【7】:Linux并发与竞争
目录一、并发与竞争二、共享资源保护1、原子操作1、原子整形操作API函数2、原子位操作API函数2、自旋锁1、自旋锁API函数2、自旋转死锁3、自旋锁注意事项3、信号量1、信号量特点2、信号量API函数4、互斥体1、互斥体特点2、互斥体API函数一、并发与竞争Linux系统是个多任务操作系统,会存在多个任务同时访问同一片内存区域,也就会出现竞争,这些任务可能会相互覆盖这段内存中的数据,造成内存数据混乱。针对这个问题必须要做处理,严重的话原创 2020-06-27 22:20:04 · 357 阅读 · 0 评论 -
Linux驱动开发学习笔记【6】:自动创建设备节点+通过设备树获取寄存器信息+pinctrl和gpio子系统的LED灯驱动
目录前言一、pinctrl子系统添加pin信息二、gpio子系统节点添加三、驱动修改前言在 正点原子阿尔法Linux开发板LED灯驱动开发(自动创建设备节点+通过设备树获取寄存器信息)基础上,通过设备树 pinctrl子系统来设置pin的复用功能(复用为GPIO)和电气属性(上 /下拉、速度、驱动能力等),通过gpio子系统来完成led所用GPIO的配置和读写。一、pinctrl子系统添加pin信息在 imx6ull-alientek-emmc.dts 设备树的根节点下 io原创 2020-06-26 23:22:22 · 634 阅读 · 0 评论 -
Linux驱动开发学习笔记【5】:pinctrl和gpio子系统
目录一、Linux中GPIO使用二、pinctrl子系统1、pinctrl在设备树中的表示方法1.1IOMUXC SNVS控制器1.2IOMUXC控制器1.3gpr控制器1.4如何添加一个PIN的信息2pincrtl 驱动三、gpio子系统1、gpio在设备树中的表示方法2、gpio 驱动3、gpio子系统API4、gpio相关的of函数5、驱动中gpio的使用流程一、Linux中GPIO使用1、通过pinctrl子系统设置PIN的复...原创 2020-06-27 00:23:19 · 1247 阅读 · 0 评论 -
Linux驱动开发学习笔记【4】:自动创建设备节点+通过设备树获取寄存器信息的LED灯驱动
目录前言一、led设备树节点添加二、led设备树节点信息获取前言在正点原子阿尔法Linux开发板LED灯驱动开发(自动创建设备节点)中,虽然实现了功能,但是是直接定义了LED的GPIO寄存器地址,然后操作的寄存器,这种方法是不推荐使用的,而且在Linux中专门用了设备树来描述板子的设备信息,所以完全可以通过设备树来设置LED的GPIO寄存器信息,然后在LED的模块驱动中通过of函数获取设备树中LED节点的属性信息,以此来完成驱动编写一、led设备树节点添加在 imx6ull-a.原创 2020-06-26 23:10:05 · 509 阅读 · 0 评论 -
Linux驱动开发学习笔记【3】:设备树
目录一、什么是设备树二、DTS、DTB和DTC的关系三、DTS基本语法四、创建小型的设备树模板五、设备树在系统中的体现六、特殊节点1、aliases节点2、chosen节点七、特殊的属性1、compatible属性(兼容性属性)2、 model属性3、status属性4、 #address-cells和 #size-cells属性5、 reg属性6、 ranges属性7、 device_type属性八、Linux内核的OF操作函数一、什原创 2020-06-27 00:08:19 · 755 阅读 · 0 评论 -
Linux驱动开发学习笔记【2】:自动创建设备节点的LED灯驱动
目录一、设备号注册和注销二、字符设备添加与删除三、自动创建设备节点四、测试验证一、设备号注册和注销1、使用如下函数注册和注销字符设备时,浪费了很多次设备号,还需要手动指定主设备号;而且当我们使用 modprobe 加载驱动程序以后,还需要使用命令mknod手动在 /dev 目录下创建设备节点int register_chrdev(unsigned int major, const char *name,const struct file_operations *fops) v原创 2020-06-16 21:29:56 · 382 阅读 · 0 评论 -
Linux驱动开发学习笔记【1】:字符设备驱动开发
目录一、字符设备驱动二、字符设备驱动开发步骤1、字符设备驱动模块编译2、驱动模块的加载与卸载3、字符设备注册与注销具体实现4、实现设备的具体操作函数三、测试APP编写与测试一、字符设备驱动字符设备是Linux 驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节流进行读写操作的设备,读写数据是分先后顺序的。比如我们最常见的点灯、按键、IIC、SPI,LCD 等等都是字符设备,这些设备的驱动就叫做字符设备驱动。Linux 应用程序对驱动程序的调用应用程序.原创 2020-06-21 23:06:40 · 520 阅读 · 0 评论