Linux驱动
文章平均质量分 93
对linux驱动有个完整的认识
勇士后卫头盔哥
这个作者很懒,什么都没留下…
展开
-
LINUX子系统之pinctrl子系统(一)
简单介绍像以前我们在开发单片机的时候就经常涉及到引脚的配置,如果更换了pin脚就需要重新配置下引脚,规范点的做法就是将引脚用宏定义定义,当需要某个引脚时只需要修改宏定义即可,不用全局更换,在Linux中引入了pinctrl子系统,**pinctrl子系统的作用就是负责引脚的复用(用作什么功能)、配置(open drain等)和引脚的枚举命名(支持哪些引脚)其定义主要由function(用作什么功能,IIC(要不要上拉?)?UART?)和group(用哪几组引脚?PINA1和PINA2?)组成.**在设备树原创 2021-05-29 21:18:11 · 1816 阅读 · 3 评论 -
LINUX驱动之IIC驱动
前言1.Linux的I2C体系结构分为3个组成部分1.1 I2C核心层提供了I2C总线驱动和设备驱动的注册,注销方法,I2C通信方法上层的即Algorithm)与具体适配器无关的代码以及探测设备,检测设备地址的上层代码等,主要用于提供统一的I2C操作函数1.2 I2C适配器层对I2C硬件体系结构中适配器端的实现,适配器可由CPU控制,甚至可以直接集成在CPU内部,主要用于IIC设备的硬件操作1.3 I2C设备驱动层I2C设备驱动(也称为客户驱动)是对设备端的实现,设备一般挂接在受CPU控制的原创 2020-06-27 16:45:46 · 297 阅读 · 0 评论 -
linux设备驱动中的异步通知机制
前言异步通知的意思是:一旦设备就绪,则主动通知应用程序,这样应用程序根本就不需要查询设备状态,这一点非常类似于硬件上“中断”的概念,比较准确的称谓是“信号驱动的异步I/O”.信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的.信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。应用层实现...原创 2020-09-05 11:47:15 · 946 阅读 · 0 评论 -
设备树的中断
中断的概念对于中断流程不了解的伙伴可以去看看我之前写过的文章,点击文章的链接出,我这里简单描述下,一般来说,中断是属于异常的一种,但是中断是可以屏蔽的,对于异常它是不可以屏蔽的,如下图所示,对于中断我们需要设置其中断源,图中的按键,定时器,网络数据…就是会触发中断的中断源,我可以在中断控制器中设置其是否屏蔽该中断,而对于异常部分一般是系统的出错,这种出错必须告知CPU,所以是不可以屏蔽的,当发送...原创 2020-05-06 13:29:54 · 777 阅读 · 0 评论 -
u-boot对设备树的支持
如何将dtb传递给内核系统只要通过网络命令或者在flash上将设备树文件读到内存,在启动内核时,将设备树的地址写到R2寄存器即可,有设备树时bootm的命令形式为“bootm <uImage_addr> <initrd_addr> <dtb_addr> ”, 对于ARM程序调用规则(ATPCS)而言,调用函数的形参传递通r0,r1,r2传递,所以我们要将r2传...原创 2020-05-05 11:43:38 · 454 阅读 · 0 评论 -
设备树的深入分析
内核head.s对dtb的简单处理bootloader启动内核时,会设置r0,r1,r2三个寄存器,r0一般设置为0,r1一般设置为machine_id(在使用设备树时改参数没有被使用),r2一般设置ATAGS或DTB的起始地址,比如我们SMDK2410,SMDK2440,JZ2440都对应有一个machine_desc结构体,该结构体包含有nr和init初始化函数,当bootloader传递的...原创 2020-05-04 21:26:22 · 2432 阅读 · 0 评论 -
设备树详解之初步介绍
前言DTS即Device Tree Source设备树源码,Device Tree是一种描述硬件的数据结构,它起源于 OpenFirmware (OF) 在Linux 2.6中,ARM架构的板极硬件细节过多地被硬编码在arch/arm/plat-xxx和arch/arm/mach-xxx,比如板上的platform设备,resource,i2c_board_info,spi_board_info...原创 2020-05-03 11:34:24 · 506 阅读 · 0 评论 -
LINUX驱动之块设备驱动
1 前言在LINUX内核中,I/O设备大致分为两类:块设备和字符设备,块设备将信息存储在固定大小的块中,每一块都有自己的地址,数据块的大小通常在512字节到4K字节之间.块设备的基本特征就是每个块都能独立于其他块而读写,磁盘就是最常见的块设备,在linux内核中,块设备与内核其他模块的关系如下图所示结合上图,将这个过程简述如下1.当一个用户程序要向磁盘写数据时,将发出一个write()系统...原创 2020-04-25 15:41:32 · 470 阅读 · 0 评论 -
LINUX驱动之触摸屏
1 前言从技术原理来区别触摸屏,可将触摸屏分为5个种类:矢量压力传感技术触摸屏,电阻技术触摸屏,电容技术触摸屏,红外线技术触摸屏,表面声波技术触摸屏,每一种触摸屏都有其各自的优缺点,要了解哪种触摸屏是适用于哪种场合,关键就在于要懂的每一类触摸屏技术的工作原理和特定,我们将以电阻触摸屏为例子讲解.1.1 电阻式触摸屏电阻式触摸屏中最常用和普及的触摸屏是四项式触摸屏,其结构由X层和Y层组成...原创 2020-04-23 00:50:14 · 649 阅读 · 0 评论 -
LINUX驱动之LCD驱动
1 前言LCD是Liquid Crystal Display的简称,也就是经常所说的液晶显示器,LCD能够支持彩色图像的显示和视频和播放,是一种非常重要的输出设备,对于LCD的驱动一般就是涉及framebuffer的编程,形象点说,framebuffer驱动负责把我们输入的内容转成送往LCD的信号,那LCD的驱动负责把信号转成LCD上显示的内容,两者是相互合作的关系.1.1FrameBuffe...原创 2020-04-22 15:27:23 · 1070 阅读 · 0 评论 -
LINUX驱动之platform驱动模型
1.前言从Linux2.6开始linux加入一套驱动管理和注册机制-—platform平台总线驱动模型,platform平台总线是一条虚拟总线,platform_device为相应的设备,platform_driver为相应的驱动,在这种设备模型中,需关心总线,设备和驱动这3个实体,总线将设备和驱动绑定.在系统每注册一个设备的时候,会寻找与之匹配的驱动,相反的,在系统每注册一个驱动的时候,会寻找...原创 2020-04-20 23:28:34 · 514 阅读 · 0 评论 -
LINUX驱动之输入子系统(二)
前言在linux内核中,input设备用input_dev结构体描述,使用input子系统实现输入设备驱动的时候,驱动和核心工作时向系统报告按键,触摸屏,键盘,鼠标等输入,不再需要关心文件操作接口,因为input子系统已经完成了文件操作接口,驱动报告的事经过inputCore和Eventhandler最终到达用户空间,也就是说以前需要自已构造“open,read,write”等函数,而现在是输入...原创 2020-04-20 10:42:53 · 310 阅读 · 0 评论 -
LINUX驱动之输入子系统(一)
前言在linux系统中,输入设备(如按键,键盘,触摸屏,鼠标,蜂鸣器等)是典型的字符设备,其一般的工作机制是:1.用户在按键,触摸等动作发生时产生一个中断2.然后CPU读取按键,坐标等数据,再放进一个缓冲区3.字符设备驱动管理该缓冲区,而且驱动的read()接口让用户可以读取按键,坐标等数据上面介绍的字符设备的工作机制往往需要在应用层打开特定的设备文件,比如"dev/buttons"类似...原创 2020-04-19 17:38:14 · 229 阅读 · 0 评论 -
字符驱动设备之poll机制
概念poll机制引入前,我们来先来说下I/O复用,所谓I/O复用就是解决能够同时操作多个设备的方法,及时处理多个设备的数据,I/O复用的方法大概有如下,应用程序使用poll,select系统调用,应用程序使用多线程技术,比如处理按键一个线程,处理鼠标一个线程,由于线程是并行运行,所有可以同时处理按键和鼠标,工作机制如下,poll和select的机制道理是一样的,监听文件描述符集,当没有文件可以读...原创 2020-03-30 16:23:36 · 271 阅读 · 0 评论 -
Linux异常处理体系结构
每个平台上的中断号应该都是已定义好的,例如s3c2440上IRQ_EINT0=16,比如我要给外部引脚IRQ(0)注册一个中断,那么request_irq函数中中断号处填IRQ_EINT0就行了,当这个引脚有信号时,linux会自动将cpu引到这个中断处理程序处执行先来看跟中断处理体系相关的三个数据结构(我们抽取出主要的部分,实际上不止这些成员,详细看include/linux/irq.h)...原创 2020-03-25 18:02:31 · 345 阅读 · 0 评论