驱动程序
lee_jimmy
长期DJI内推,所有岗位都有,有意愿者可以发送简历到我的邮箱:651074561@qq.com
展开
-
FATAL: modpost: Section mismatches detected错误解决
如题,写完驱动后编译内核的时候碰到了这个错误,头一次看到这个编译错误,略懵逼,先给出完整的错误:WARNING: modpost: Found 2 section mismatch(es).To see full details build your kernel with:'make CONFIG_DEBUG_SECTION_MISMATCH=y'FATAL: modpost: Se...原创 2020-04-29 17:57:38 · 1981 阅读 · 1 评论 -
字符设备的新写法
前言之前我写的字符设备中,用到的分配主设备号的函数是int register_chrdev(unsigned int major, const char *name, const struct file_operations *fops); 这种方法是在内核2.6之前比较老版本中常用到的方法,调用register_chrdev后,系统会一次性为你的主设备分配0...原创 2019-05-11 15:07:08 · 338 阅读 · 0 评论 -
I2C驱动程序
I2C驱动程序框架 I2C的协议流程在I2C协议原理简述一文中写过,这里就不再讲解。为了更好的书写I2C客户驱动程序,我们先理一理I2C驱动程序的框架,才能更好的写出属于我们自己的驱动程序。 上图中的I2C总线驱动程序(也就是I2C适配器驱动程序)是芯片商为我们实现的,知道如何收发数据;而需要我们自己实现的I2C客户驱动程序,则知道数据的具体含义。 ...原创 2019-04-27 21:44:06 · 3318 阅读 · 0 评论 -
NAND flash驱动程序(1)
前言 前面我们已经写过一个块设备驱动程序,用内存来模拟块设备。假如我们想写一个NAND FLASH驱动程序,又应该怎么做呢?我们先看一下kernel代码中别人现成的驱动程序,分析一下流程框架,总结出一个套路,我们就能开始写自己的驱动程序了。 之前写过一个裸板的nand flash程序:NAND FLASH的读操作及原理,可以参考一下。正文 我参考...原创 2019-01-27 21:16:02 · 1838 阅读 · 0 评论 -
块设备驱动初识
前言 以前我们写的字符设备驱动程序,为上层应用层提供了读、写等的接口,只要应用层调用了read或者write函数,就会调用到我们字符设备驱动程序的drv_read和drv_write函数(驱动的读写函数自己命名,这里只是参考)。如果是一个读操作,驱动层就会通过copy_to_user,返回数据给上层;如果是一个写操作,驱动层就会通过copy_from_user,写数据到相应的字符...原创 2019-01-20 21:51:26 · 205 阅读 · 0 评论 -
Linux的LCD驱动
前言 Linux的源码中本身已经抽象出了LCD驱动的公共部分代码——drivers/video/fbmem.c,对于驱动开发人员来讲,只需要理解这部分的代码并会调用其提供的接口即可。驱动开发人员需要做的就是针对具体的SOC和LCD,设置对应的LCD参数和寄存器值即可。 至于fbmem.c的流程已经有很多文章介绍过了,我这里就不具体介绍了,可以参考一下这篇文章:Li...原创 2019-01-13 13:13:35 · 5924 阅读 · 0 评论 -
触摸屏驱动
前言 之前有篇文章简单介绍过触摸屏的工作原理,可以参考一下:电阻触摸屏原理简述。测出某个点的电压值后,我们就可以通过启动ADC模块,将电压转换为X,Y坐标了。 现在我们想写一个基于Linux系统的触摸屏驱动程序,先把程序的步骤写出来:触摸屏的使用过程:1、按下,产生中断2、在中断程序里,启动ADC转换x,y坐标3、ADC结束,产生ADC中断4、在ADC中...原创 2018-12-24 11:31:06 · 4144 阅读 · 0 评论 -
USB驱动初体验
前言前一篇文章(USB驱动的概念介绍),我们对USB驱动有了一个大概的认识。现在就来编写程序加深一下印象。正文 下面我们将要编写一个简单的USB驱动程序,接收USB鼠标的数据后,模拟键盘的输入。比如,左击鼠标为键盘输入"L",右键鼠标为键盘输入"S",按下鼠标的滚轮为键盘输入“ENTER”。 下面先给出代码再解释:/* * 参考drivers/...原创 2018-12-02 23:42:43 · 391 阅读 · 0 评论 -
USB驱动的概念介绍
相关概念1、USB是主从结构所有的USB传输都是从USB主机发起,USB设备没有能力“主动”通知USB主机。例子:USB鼠标滑动一下立刻产生数据,但是它没有能力通知PC机来取数据,只能被动等待PC机来读。2、USB的传输类型(1)控制传输:可靠的、时间有保证,比如:USB设备的识别过程(2)批量传输:可靠、时间没有保证。比如:U盘(3)中断传输:可靠、实时。比如:USB...原创 2018-11-11 12:37:23 · 3826 阅读 · 0 评论 -
input子系统的架构分析及应用
input子系统的架构以前我们写的裸板程序中,驱动程序一般分为以下几步:(1)构造我们自己的file_operations(2) 注册设备字符register_chrdev,将我们的file_operations告诉内核(3)然后就可以通过入口函数module_init(),调用上面创建的字符设备 上面是一个简单的字符设备的书写框架,但是要做到通用,肯定必须抽象出一...原创 2018-10-21 19:28:34 · 1452 阅读 · 0 评论 -
设备、驱动、总线模型简介
前言 在Linux系统中,有很多的框架提供驱动编写者使用,比如前面我写过的一篇文章:input子系统的架构分析及应用。都是将纯软件相关的代码和操作硬件相关的代码分离开,这样就使得驱动的编写者省去编写大量的、重复的代码,只要专注于底层硬件相关的代码就可以了。这次我们介绍Linux系统中另外一个常见的框架模型:device-driver-bus模型,也就是设备、驱动、总线模型。正...原创 2018-10-28 16:10:16 · 855 阅读 · 0 评论 -
字符设备中的同步、互斥和阻塞操作
下面的内容对学习过程中做一个简单的总结,方便以后回忆,内容可能过于简陋1. 原子操作如果我们希望字符驱动程序每次只能给一个应用程序打开,就需要加锁,比如在驱动程序中加一个整型的全局变量canopen: 1代表可以open,0代表不能open。但是我们不能简单的给整型变量canopen++或者canopen--,因为代码中简单的自加动作,在汇编代码中就要分成3步完成: ld...原创 2018-10-14 12:08:25 · 425 阅读 · 0 评论 -
字符设备驱动之按键驱动
前言 这次的按键驱动会分为两部分来介绍。第一,用不停轮询的方式来监听按键事件;第二,以中断的方式来响应按键事件。可以对比看一下这两种方式有什么差别。 正文轮询方式#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include &...原创 2018-10-07 18:45:40 · 609 阅读 · 0 评论 -
字符设备驱动之按键驱动(poll机制实现)
一般来说上层调用poll(),到了内核层会调用sys_poll(),类似的还有open->sys_open、read->sys_read(),所以类比于open和read,驱动程序中也有一个poll调用。 之前用了轮询和中断的方式来实现,现在用poll机制来实现。poll机制有个好处就是能超时处理,当超过一定的时间后就能自动返回。下面我们看...原创 2018-10-13 16:37:08 · 675 阅读 · 0 评论 -
一个简单点亮LED灯的字符设备驱动
前言 后面可能会写一系列的驱动学习的文章,现在就以一个最简单的字符设备驱动开始。我的这个字符设备主要是为了点亮开发板的LED灯。 对于字符设备的文章,网上很多而且也比较简单,所以这篇文章只适合刚学的小白,大神请绕道。 正文先把代码贴出来再把重点讲一下吧字符设备驱动程序:#include <linux/module.h>#inclu...原创 2018-09-16 19:16:38 · 1784 阅读 · 0 评论