![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux驱动
文章平均质量分 91
linux驱动学习
idontnoaaaa
all copied
展开
-
Linux_设备树
1 设备树起源Linux 3.x之前,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的垃圾代码,很多代码只是在描述板级细节,并且有大量重复性的描述,而这些板级细节对内核来讲并没有什么用。设备树是一种描述硬件的数据结构,它起源于OpenFirmware(OF)。在Linux 2.6中,ARM架构的板级硬件细节过多地被硬编码在arch/arm/plat-xxx和arch/arm/mach-xxx中,采用设备树后,许多硬件的细节可以直接通过它传递给Linux,而不需要在原创 2022-01-12 16:53:04 · 617 阅读 · 0 评论 -
Linux_输入子系统
1.输入子系统概述1.1.输入子系统的作用在嵌入式系统中,会使用到多的输入设备,像按键、鼠标、键盘、触摸屏等都属于输入设备。对于这些输入设备,如果都按照之前字符设备注册模型进行驱动程序的编写,那么编程过程会比较复杂,会出现许多重复性的代码。而且又因为不同的人编写出来的设备驱动也不同,向应用层上报的数据也不同,应用开发人员访问这些设备驱动也是比较麻烦。由于这些输入设备最终的功能都是将数据上报给用户,因此,Linux内核专门做了一个叫做input子系统来统一处理这些输入设备。输入子系统的作用有以下几点:原创 2021-11-28 21:01:01 · 423 阅读 · 0 评论 -
Linux_平台设备总线
1.platform总线模型1.1.Linux设备驱动模型回顾1.实现驱动加载函数xxx_init()和驱动卸载函数xxx_exit()(与内核相关)2.申请设备号,字符设备注册(与内核相关)3.利用udev/mdev机制创建设备文件节点class_create,device_create(与内核相关)4.硬件部分初始化(与硬件相关)IO资源映射ioremap注册中断request_irq5.构建file_operation结构(与内核相关)6.实现操作硬件方法xxx_open、xxx_r原创 2021-11-25 22:43:24 · 690 阅读 · 0 评论 -
Linux_内核同步机制
1.Linux内核同步机制1.1.内核同步机制作用1)Linux操作系统是一个多任务操作系统,2.6以上版本都支持任务抢占。2)现在的CPU大部分都是多核心CPU,多核心CPU同时并发执行程序。3)不管是多核心CPU还是单核心CPU在任务执行过程都可能产生中断。多进程并发:进程之间会存在多进程同时并发访问同一共享资源,就会产生竞争。任务抢占:当进程在访问某个共享资源的时候发生任务抢占,随后进入了高优先级的进程,如果该进程也访问了同一共享资源,那么也会造成进程与进程之间的竞争。多核心CPU:原创 2021-11-24 22:44:21 · 1257 阅读 · 0 评论 -
Linux_文件IO模型
1.阻塞与非阻塞IO模型3## 1.1.阻塞与非阻塞IO简介首先,这里的“IO”指的是应用程序对驱动设备的输入/输出操作。当应用程序对设备驱动进行操作的时候,如果不能获取到设备资源,那么阻塞式IO就会将应用程序对应的进程挂起,直到设备资源可以使用为止。对于非阻塞IO,应用程序对应的进程不会挂起,它要么一直轮询等待,直到设备资源可以使用,要么就直接放弃。阻塞式IO模型如下图所示:应用程序调用read函数从设备中读取数据,当设备不可用或数据未准备好的时候就会进入休眠态。等设备可用的时候就会从休眠态唤原创 2021-11-23 23:28:34 · 155 阅读 · 0 评论 -
Linux_内核定时器
1.内核定时器1.1.内核定时器简介和系统时钟Linux内核定时器是一个基于系统时钟的软件模拟定时器。Linux内核定时器使用很简单,只需要提供超时时间和定时处理函数即可,当超时时间到了以后设置的定时器处理函数就会执行。在使用Linux内核定时器要注意一点,内核定时器并不是周期性运行的,超时以后就会自动关闭,因此如果想实现周期性定时,那么就需要在定时处理函数中重新开启定时器。之前大家学习过ucos系统,我们知道ucos系统是需要一个硬件定时器来提供系统时钟。同样,Linux系统要运行,也得需要硬件定时原创 2021-11-20 23:24:55 · 313 阅读 · 0 评论 -
Linux_中断下半部
1.中断下半部1.1.中断上半部与中断下半部为保证系统的实时性,中断服务程序必须足够简短。但实际应用中,中断处理过程就是需要消耗一定的时间。比如:SOC在中断服务函数中接收网络数据,还需要对网络数据进行解析处理,解析数据不可避免需要消耗时间;触摸屏通过中断通知SOC有触摸事件产生,如果SOC与触摸屏是IIC通信(IIC通信速度本来就慢),则在中断中通过IIC读取数据也得消耗时间。如果在中断服务程序中消耗时间,则会严重降低系统的实时性。基于这个原因,Linux系统中提出一个概念:把中断处理过程划分为俩部原创 2021-11-19 23:41:39 · 698 阅读 · 0 评论 -
Linux_内核中断编程
1.中断基础1.1.什么是中断中断是指在CPU正常运行期间,由于内部事件或外部事件引起的CPU暂时停止正在运行的程序,转去该内部或外部事件的服务程序中去,服务程序执行完毕后再返回断点处继续运行被暂时中断的程序。在中断发生时被调用的用来处理中断的函数称为中断处理函数。中断的处理流程如下图所示:1.2.中断的意义外设的处理速度远远慢于CPU的处理速度,如果采用轮询方式(CPU一直等待)处理外设,会降低CPU的利用率。如果采用中断方式处理外设,会大大提高CPU的利用率。以cpu读取串口信息为例:原创 2021-11-18 23:25:35 · 281 阅读 · 0 评论 -
Linux_新版字符设备模型和杂项字符设备模型
1.新版本字符设备驱动模型Linux字符设备驱动开发的基本步骤:字符设备驱动开发重点是使用register_chrdev函数注册字符设备,当不再使用设备的时候就使用unregister_chrdev函数注销字符设备。register_chrdev和unregister_chrdev这两个函数是老版本驱动使用的函数,现在新的字符设备驱动已经不再使用这两个函数,而是使用Linux内核推荐的新字符设备驱动API函数。1.1.新旧字符设备驱动模型比较不论是哪种版本的字符设备驱动模型,在编写字符设备驱动时都需要原创 2021-11-17 23:15:23 · 139 阅读 · 0 评论 -
Linux_字符设备驱动开发
1.Linux设备驱动相关知识点1.1.应用程序、内核、驱动的关系应用程序、内核和驱动之间的关系如下图所示:应用程序:应用程序以文件形式访问各种资源,应用程序调用应用程序函数库完成各种功能。调用的应用程序函数库中,部分函数直接完成功能,部分函数(文件、进程、线程、网络)通过系统调用。内核:处理系统调用,调用设备驱动程序。驱动:负责直接与硬件通信。注:系统调用,是一种特殊的接口,通过这个接口,用户可以访问内核空间。系统调用会向内核发出请求,实现内核提供的某些服务。一个API如果需要和内核打交道原创 2021-11-16 23:06:24 · 192 阅读 · 0 评论 -
Linux_内核模块化编程
1.加载驱动的情况1.1.静态编译到内核1)执行make menuconfig,找到Device Drivers —>Character devices —>将菜单前面的括号选择为 ’*’ ,然后保存退出。2)分析linux-3.5/drivers/char/目录下的Makefile,寻找和tiny4412_hello_module.c有关的地方3)CONFIG_TINY4412_HELLO_MODULE为一个宏,是在linux-3.5/.config内定义的4)从这可以看出,原创 2021-11-15 23:39:16 · 341 阅读 · 0 评论