ARM Linux驱动开发
文章平均质量分 95
基于正点原子I.MX6ULL(阿尔法卡发版)Linux驱动开发
Tofu_Cabbage
嵌入式学习中
展开
-
十九、(正点原子)Linux I2C驱动
I2C驱动主要分为两个驱动:①、I2C主机驱动②、I2C设备驱动对于主机驱动,主要就是I2C控制器驱动,一旦编写好就不需要修改,这个驱动提供I2C传输接口,I2C设备直接调用这个接口就可以完成通信。对于Linux的分离分层也正好符合。因此Linux内核也将I2C驱动分为两部分:①、I2C总线驱动,I2C 总线驱动就是 SOC 的 I2C 控制器驱动,也叫做 I2C 适配器驱动。对于I2C的主机驱动。②、I2C设备驱动,主要是I2C通信的设备,要根据具体的设备来编写驱动。原创 2024-09-03 15:35:29 · 1156 阅读 · 0 评论 -
十八、(正点原子)Linux内核RTC驱动
RTC 设备驱动是一个标准的字符设备驱动,应用程序通过 open、 release、 read、 write 和ioctl等函数完成对 RTC 设备的操作。Linux 内核将 RTC 设备抽象为 rtc_device 结构体,因此 RTC 设备驱动就是申请并初始化rtc_device,最后将 rtc_device 注册到 Linux 内核里面,这样 Linux 内核就有一个 RTC 设备了。定义在 include/linux/rtc.h 文件中/* 设备 */int id;/* ID */原创 2024-07-21 20:39:17 · 891 阅读 · 0 评论 -
十七、(正点原子)Linux LCD驱动
在 Linux 中应用程序通过操作 RGB LCD 的显存来实现在 LCD 上显示字符、图片等信息。先来看一下裸机 LCD 驱动如下:①、初始化 I.MX6U 的 eLCDIF 控制器,重点是 LCD 屏幕宽(width)、高(height)、 hspw、hbp、 hfp、 vspw、 vbp 和 vfp 等信息。②、初始化 LCD 像素时钟。③、设置 RGBLCD 显存。④、应用程序直接通过操作显存来操作 LCD,实现在 LCD 上显示字符、图片等信息。原创 2024-07-21 17:34:10 · 774 阅读 · 0 评论 -
十六、(正点原子)Linux自带按键驱动程序
Linux 内核也自带了 KEY 驱动,如果要使用内核自带的 KEY 驱动的话需要配置 Linux 内核,不过 Linux 内核一般默认已经使能了 KEY 驱动,但是我们还是要检查一下。选中以后就会在文件中出现“”这一行, Linux 内核就会根据这一行来将 KEY 驱动文件编译进 Linux 内核。Linux 内核自带的 KEY 驱动文件为采用了驱动框架,在 KEY 驱动上使用了子系统实现。可以看出,这就是一个标准的驱动框架,如果要使用设备树来描述 KEY 设备信息的话,设备节点的属性值要设置为“原创 2024-07-17 16:05:27 · 1007 阅读 · 0 评论 -
十五、(正点原子)Linux INPUT子系统
input就是输入的意思,因此input子系统就是管理输入的子系统,和pinctrlgpio子系统一样,都是 Linux 内核针对某一类设备而创建的框架。比如按键输入、键盘、鼠标、触摸屏等等这些都属于输入设备,不同的输入设备所代表的含义不同,按键和键盘就是代表按键信息,鼠标和触摸屏代表坐标信息,因此在应用层的处理就不同,对于驱动编写者而言不需要去关心应用层的事情,我们只需要按照要求上报这些输入事件即可。为此input子系统分为input驱动层、input核心层、input。原创 2024-07-16 21:37:28 · 1739 阅读 · 0 评论 -
十四、(正点原子)Linux MISC驱动
的意思是混合、杂项的,因此驱动也叫做杂项驱动,也就是当我们板子上的某些外设无法进行分类的时候就可以使用驱动。驱动其实就是最简单的字符设备驱动,通常嵌套在 platform 总线驱动中,实现复杂的驱动。原创 2024-07-16 19:47:22 · 586 阅读 · 0 评论 -
十三、(正点原子)Linux自带的LED灯驱动
LED 灯驱动文件为,可以打开# LED Core...........如果定义了的话就会编译这个文件,选择将 LED 驱动编译进 Linux 内核,在.config 文件中就会有“”这一行,因此驱动文件就会被编译。接下来我们看一下{},},/* 驱动注册函数 */为LED驱动的匹配表,compatible属性就是匹配的对象,我们在设备中LED灯节点的compatible属性要与匹配表一致,函数才能执行,否者驱动没法工作。Linux 内核自带的 LED 驱动采用了platform框架。原创 2024-07-15 22:01:39 · 1017 阅读 · 0 评论 -
十二、(正点原子)platform设备驱动
假如现在有三个平台 A、 B 和 C,这三个平台(这里的平台说的是 SOC)上都有 MPU6050 这个 I2C接口的六轴传感器,按照我们写裸机 I2C 驱动的时候的思路,每个平台都有一个 MPU6050的驱动,因此编写出来的最简单的驱动框架如图:每种平台下都有一个主机驱动和设备驱动,主机驱动肯定是必须要的,毕竟不同的平台其 I2C 控制器不同。原创 2024-07-15 19:42:29 · 911 阅读 · 0 评论 -
十、(正点原子)Linux阻塞和非阻塞IO
应用程序对设备驱动进行操作的时候,如果不能获取到设备资源,那么阻塞式IO就会将应用程序对应的线程挂起,直到设备资源可以获取为止。应用程序调用read函数从设备中读取数据,当设备不可用或数据未准备好的时候就会进入到休眠态。等设备可用的时候就会从休眠态唤醒,然后从设备中读取数据返回给应用程序。注:当我们应用程序打开驱动程序时候,默认以阻塞方式打开的。2、等待队列。原创 2024-07-12 17:24:22 · 768 阅读 · 0 评论 -
九、(正点原子)Linux中断
上半部:上半部就是中断处理函数,那些处理过程比较快,不会占用很长时间的处理就可以放在上半部完成。下半部:如果中断处理过程比较耗时,那么就将这些比较耗时的代码提出来,交给下半部去执行,这样中断处理函数就会快进快出。因此, Linux 内核将中断分为上半部和下半部的主要目的就是实现中断处理函数的快进出,那些对时间敏感、执行速度快的操作可以放到中断处理函数中,也就是上半部。如果要处理的内容不希望被其他中断打断,那么可以放到上半部如果要处理的任务与硬件有关,可以放到上半部。原创 2024-06-25 18:04:09 · 939 阅读 · 0 评论 -
八、(正点原子)Linux内核定时器实验
在FreeRTOS或者UCOS中需要一个硬件定时器提供系统时钟,一般使用Systick作为系统的时钟源。同理, Linux 要运行,也是需要一个系统时钟,Linux内核会选择Cortex-A7内核中的一个通用定时器来作为Linux系统的时钟源,对于Linux驱动编写来说,我们不需要深入研究怎么选择时钟源,怎么配置时钟源,Linux内核编写者已经编写好了,我们只需要会使用相应的API函数即可。Linux 内核中有大量的函数需要时间管理,比如周期性的调度程序、延时程序、对于我们驱动编写者来说最常用的定时器。原创 2024-06-23 12:59:28 · 952 阅读 · 0 评论 -
七、(正点原子)Linux并发与竞争
并发就是多个“用户”同时访问同一个共享资源,带来的问题就是竞争问题。Linux 系统是个多任务操作系统,会存在多个任务同时访问同一片内存区域,这些任务可能会相互覆盖这段内存中的数据,造成内存数据混乱。针对这个问题必须要做处理,严重的话可能会导致系统崩溃。多线程并发访问抢占式并发访问中断程序并发访问SMP(多核)间并发访问举一个简单的例子:比如说C语言中a = 31 ldr r0, =0X30000000 /* 变量 a 地址 */2 ldr r1, = 3 /* 要写入的值 */原创 2024-06-18 14:10:40 · 1030 阅读 · 0 评论 -
六、(正点原子)pinctrl子系统和gpio子系统
前面我们使用设备树来驱动LED灯,其实就是将LED寄存器地址写入到设备树的属性中,通过函数 ,读取到LED灯的寄存器信息,从而操作寄存器来控制LED灯。在操作LED灯时候,我们使用到GPIO这个引脚,通过对这个GPIO的控制来实现LED灯的控制。原创 2024-06-16 14:51:34 · 993 阅读 · 0 评论 -
五、(正点原子)设备树下的LED驱动
1、知道如何在设备树中创建一个节点。并能够将节点的属性添加成功。2、在驱动中,能够使用OF函数对设备树的属性值进行提取,获得相关硬件的信息:比如寄存器地址等等。3、能够掌握驱动程序框架。原创 2024-06-13 15:57:45 · 581 阅读 · 0 评论 -
四、(正点原子)Linux设备树
设备树(Device Tree),就是具有树形结构的设备统一管理。描述设备树的文件叫做(Device Tree Source)这个文件采用树形结构描述板级设备,也就是开发板上的设备信息。例如:树的主干就是系统总线,控制器、控制器、控制器等都是接到系统主线上的分支。控制器有分为和两种,其中上接了和这两个设备,上只接了这个设备。原创 2024-06-10 15:02:53 · 856 阅读 · 0 评论 -
三、(正点原子)新字符设备驱动
前面我们字符设备驱动开发使用的是函数注册字符设备,函数注销字符设备,驱动模块加载成功后我们还需要手动使用mknod命令创建设备结点。和是老版本的的驱动使用的函数,新的字符设备驱动使用Linux内核推荐的新字符设备驱动API函数。原创 2024-06-09 13:31:25 · 1585 阅读 · 0 评论 -
二、(正点原子)Linux LED驱动开发实验
对Linux下的驱动编写框架的了解。原创 2024-06-05 10:27:59 · 887 阅读 · 0 评论 -
一、(正点原子)字符设备驱动
字符设备是 Linux 驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节流进行读写操作的设备,读写数据是分先后顺序的。比如我们最常见的点灯、按键、 IIC、 SPI,LCD 等等都是字符设备,这些设备的驱动就叫做字符设备驱动。Linux应用程序对驱动的调用:在Linux中一切皆文件。驱动加载成功以后会在“/dev”目录下生成一个相应的文件。应用程序通过对这个名为“/dev/xxx” (xxx 是具体的驱动文件名字)的文件进行相应的操作即可实现对硬件的操作。原创 2024-06-03 17:40:39 · 979 阅读 · 0 评论