Linux驱动层开发
文章平均质量分 89
Linux驱动层开发
西伯利亚大草原的狼
新疆大学硕士在读:工业物联网方向:借此平台记录自己的学习过程,方便自己后期的知识复习,也借此记录人生最美好的青春
展开
-
linux驱动开发学习 新型字符设备框架点灯
第一章 linux之Ubuntu入门Ubuntu的终端操作指令与shell命令Ubuntu压缩与解压缩Ubuntu用户和用户组Ubuntu文件权限管理vim编辑器make工具和Makefile的引入shell脚本入门第二章linux之ARM(MX6U)裸机篇MX6U的特点在于是少数几个官方提供了可移植SDK的linux单片机所以可以进行裸机开发否则实际中的linux裸机开发都是用汇编语言对寄存器进行操作。编写好汇编语言以后使用imxdownload交叉编译,然原创 2022-05-09 12:44:11 · 163 阅读 · 0 评论 -
Linux驱动开发8 platform驱动分隔、分离与分层
我们在前面几章编写的设备驱动都非常的简单,都是对IO进行最简单的读写操作。像I2C、SPI、LCD等这些复杂外设的驱动就不能这么去写了,Linux系统要考虑到驱动的可重用性,因此提出了驱动的分离与分层这样的软件思路,在这个思路下诞生了我们将来最常打交道的platform 设备驱动,也叫做平台设备驱动。原创 2022-09-01 19:26:00 · 318 阅读 · 0 评论 -
Linux驱动开发11 LCD / RTC驱动学习
在 Linux中应用程序最终也是通过操作RGB LCD的显存来实现在LCD上显示字符、图片等信息。在裸机中我们可以随意的分配显存,但是在 Linux系统中内存的管理很严格,。而且因为虚拟内存的存在,驱动程序设置的显存和应用程序访问的显存要是同一片物理内存。为了解决上述问题,Framebuffer诞生了,翻译过来就是帧缓冲fb 是一种机制,将系统中所有跟显示有关的硬件以及软件集合起来,虚拟出一个,当我们编写好LCD驱动以后会生成一个名为的设备,应用程序通过访问/dev/fbX。原创 2022-09-05 18:06:44 · 726 阅读 · 0 评论 -
linux驱动开发5 按键中断实验(定时器和中断)
led:IO的输出 ;key:IO的输入法二:使用定时器消抖和按键中断学习过 UCOS 或 FreeRTOS 的同学应该知道,UCOS 或 FreeRTOS 是需要一个硬件定时器 提供系统时钟,一般使用 Systick 作为系统时钟源。 Linux 内核中有大量的函数需要时间管理,比如周期性的调度程序、延时程序、对于我们驱动编写者来说最常用的定时器。硬件定时器提供时钟源,时钟源的频率可以设置,设置好以后就周期性的产生定时中断,系统使用定时中断来计时。中断周期性产生的频率就是系统频原创 2022-08-24 16:48:49 · 760 阅读 · 0 评论 -
Linux驱动开发6 阻塞与非阻塞
阻塞和非阻塞IO是Linux驱动开发里面很常见的两种设备访问模式,在编写驱动的时候一定要考虑到阻塞和非阻塞。本章我们就来学习一下阻塞和非阻塞IO,以及如何在驱动程序中处理阻塞与非阻塞,如何在驱动程序使用等待队列和poll机制。这里的IO是对文件的IO操作当应用程序对设备驱动进行操作的时候,如果不能获取到设备资源,那么阻塞式 IO 就会将应用程序对应的线程挂起,直到设备资源可以获取为止。应用程序使用open打开驱动文件,默认是阻塞方式打开。......原创 2022-08-30 12:41:30 · 594 阅读 · 0 评论 -
Linux驱动开发学习4 并发与竞争
首先看一下原子操作,原子操作就是指不能再进一步分割的操作,一般原子操作用于变量或者位操作。如果要使用原子操作API函数,首先要先定义一个atomic_t的变量,如下所示:atomic_t a;//定义a也可以在定义原子变量的时候给原子变量赋初值,如下所示://定义原子变量b并赋初值为0可以通过宏向原子变量赋初值。对原子变量进行操作,比如读、写、增加、减少等等,Linux内核提供了大量的原子操作 API函数位操作也是很常用的操作,Linux。原创 2022-08-23 16:05:47 · 196 阅读 · 0 评论 -
Linux驱动开发7 异步通知(软中断)
阻塞、非阻塞、异步通知,这三种是针对不同的场合提出来的不同的解决方法,没有优劣之分,在实际的工作和学习中,根据自己的实际需求选择合适的处理方法即可。中断是处理器提供的一种异步机制,我们配置好中断以后就可以让处理器去处理其他的事情了,当中断发生以后会触发我们事先设置好的中断服务函数, 在中断服务函数中做具体的处理。异步通知的核心就是信号,在 arch/xtensa/include/uapi/asm/signal.h。/* 停止进程的执行,只是暂停 *//* 非法的系统调用*//* 虚拟时钟信号*/...原创 2022-09-01 10:03:54 · 681 阅读 · 0 评论 -
Linux驱动开发10 Input子系统
按键、鼠标、键盘、触摸屏等都属于输入(input)设备,Linux内核为此专门做了一个叫做input 子系统的框架来处理输入事件。,用户只需要负责上报输入事件,比如按键值、坐标等信息,input核心层负责处理这些事件。input 就是输入的意思,因此input子系统就是管理输入的子系统,和pinctrl、gpio子系统一样,都是 Linux内核针对某一类设备而创建的框架。原创 2022-09-03 15:48:43 · 1655 阅读 · 0 评论 -
Linux驱动开发16 网络设备驱动框架
1)中断的好处就是响应快,数据量小的时候处理及时,速度快,但是一旦当数据量大,而且都是短帧的时候会导致中断频繁发生,消耗大量的 CPU 处理时间在中断自身处理上。函数,当第一次注册网络设备的时候此函数会执行,设备可以在此函数中做一些需要退后初始化的内容,不过一般驱动中不使用此函数,虚拟网络设备可能会使用。网络是分层的,对于应用层而言不用关系具体的底层是如何工作的,只需要按照协议将要发送或接收的数据打包好即可。函数,当需要发送数据的时候此函数就会执行,此函数有一个参数为 sk_buff。原创 2022-09-13 18:24:08 · 797 阅读 · 0 评论 -
Linux驱动开发12 IIC驱动
IIC总线驱动+IIC设备驱动(驱动分割分离分层思想)IIC总线驱动+IIC设备驱动(驱动分割分离分层思想)我们不需要写适配器,只需要写设备驱动I2C 是很常用的一个串行通信接口,用于连接各种外设、传感器等器件,在裸机篇已经对I.MX6U的I2C接口做了详细的讲解。本章我们来学习一下如何在Linux下开发I2C接口器件驱动,重点是学习 Linux下的I2C驱动框架,按照指定的框架去编写I2C设备驱动。I2C 总线驱动重点是 I2C适配器(也就是SOC的I2C。原创 2022-09-07 18:16:18 · 2860 阅读 · 0 评论 -
Linux驱动开发9 LinuxMISC 驱动(杂项驱动)
内核自带的驱动,都是通过图形化界面配置,选择使能或者不使用。原创 2022-09-02 15:56:18 · 240 阅读 · 0 评论 -
Linux驱动开发 15 块设备驱动框架
I.MX6ULL 带有两个CAN控制器:FlexCAN1和FlexCAN2,NXP官方的EVK 开发板这两个CAN接口都用到了,因此NXP官方的设备树将这两个CAN接口都使能了。原创 2022-09-13 16:35:16 · 357 阅读 · 0 评论 -
linux驱动开发学习3 pinctl和gpio子系统试验
大多数 SOC的pin都是支持复用的,比如I.MX6ULL的既可以作为普通的GPIO使用,也可以作为I2C1的SDA等等。此外我们还需要配置pin的电气特性,比如上/下拉、速度、驱动能力等等。传统的配置pin的方式就是直接操作相应的寄存器,但是这种配置方式比较繁琐、而且容易出问题(比如pin功能冲突)。pinctrl子系统就是为了解决这个问题而引入的,pinctrl子系统主要工作内容如下:①、获取设备树中pin信息。②、根据获取到的。原创 2022-08-22 16:46:19 · 494 阅读 · 0 评论 -
Linux驱动开发13 SPI驱动
SPI 驱动框架和I2C很类似,都分为主机控制器驱动和设备驱动,主机控制器也就是SOC的 SPI控制器接口。比如在裸机篇中的《第二十七章SPI实验》,我们编写了bsp_spi.c和bsp_spi.h这两个文件,这两个文件是I.MX6U的SPI控制器驱动,我们编写好SPI控制器驱动以后就可以直接使用了,不管是什么 SPI设备,SPI控制器部分的驱动都是一样,我们的重点就落在了种类繁多的 SPI设备驱动。spi 设备驱动也和i2c设备驱动也很类似,Linux。原创 2022-09-09 16:20:33 · 1748 阅读 · 0 评论 -
Linux驱动开发14 串口/485/232/GPS
什么都不需要你写,只需要配置串口设备树,驱动自带,然后配置minicom(串口通讯助手)进行串口通讯即可。这一章单纯是因为原子的板子上485/232/GPS走的是板子上的串口通道。且串口驱动部分NXP已经写好了,我们要做的就是修改,配置设备树,使能我们要使用的串口。下通常通过串口和其他设备或传感器进行通信,根据电平的不同,串口分为 TTL。不管是什么样的接口电平,其驱动程序都是一样的,通过外接 RS485。也提供了串口驱动框架,我们只需要按照相应的串口框架编写驱动程序即可。对应的设备节点即可。原创 2022-09-13 11:12:17 · 2332 阅读 · 0 评论 -
linux驱动开发学习2 设备树
dtb板级信息文件,大势所趋,一定要学 如何确定要编译哪个DTS文件:查看linux下的arch/arm/boot/dts/Makefile DTS语言有属于自己的语法:以树形来描述设备信息包括外部的灯、按键、传感器,内部的中断控制器,IIC、 SPI、 RAM 、晶振、芯片等学习文件:imx6ull-alientek-emmc.dts、Devicetree SpecificationV0.2.pdf、Power_ePAPR_APPROVED_v1.12.pdf三个文件结构:一级子节点,二级子节点,三级子节原创 2022-08-19 18:39:23 · 840 阅读 · 0 评论