
linux驱动
文章平均质量分 94
墨、白
厚积薄发
展开
-
二、Linux驱动之简单编写字符设备
接下来以点亮LED灯为例编写第一个字符设备驱动。编写驱动分下面几步:1. 查看原理图、数据手册,了解设备的操作方法;2. 在内核中找到相近的驱动程序,以它为模板进行开发,有时候需要从零开始;3. 设计所要实现的操作,比如open、close、read、write 等函数;4. 测试。1. 分析设备本人使用的是JZ2440v3开发板,该开发板CPU使用的是S3C2440A,LED与...原创 2018-11-21 09:43:15 · 978 阅读 · 0 评论 -
十四、Linux驱动之USB驱动分析
1. 基本概念1.1 简介 USB是英文"Universal Serial Bus"的缩写,意为"通用串行总线"。USB最初是为了替代许多不同的低速总线(包括并行、串行和键盘连接)而设计的,它以单一类型的总线连接各种不同的类型的设备。USB的发展已经超越了这些低速的连接方式,它现在可以支持几乎所有可以连接到PC上的设备。最新的USB规范修订了理论上高达480Mbps的高速连接。 ...原创 2018-11-30 16:37:33 · 1132 阅读 · 1 评论 -
十二、Linux驱动之LCD驱动
1. 基本概念 LCD是Liquid Crystal Display的简称,也就是经常所说的液晶显示器。LCD能够支持彩色图像的显示和视频的播放,是一种非常重要的输出设备。如果我们的系统要用GUI(图形界面接口),比如minigui,MicroWindows。这时LCD设备驱动程序就应该编写成frambuffer接口,而不是编写成仅仅操作底层的LCD控制器接口。 framebuf...原创 2018-11-28 14:48:22 · 1888 阅读 · 0 评论 -
十三、Linux驱动之触摸屏驱动
1. 基本概念 常用的触摸屏类型有两种:阻性触摸屏和容性触摸屏。阻性触摸屏是一种传感器,它将矩形区域中触摸点(X, Y)的物理位置转换为代表X坐标和Y坐标的电压。触摸屏包含上下叠合的两个透明层阻性材料,中间由一种弹性材料隔开。当触摸屏表面受到压力时,顶层和底层之间会产生触碰。所用的电阻式触摸屏都采用分压器原理来产生代表X坐标和Y坐标的电压。如下图所示,分压器是通过将两个电阻进行串联来实现...原创 2018-11-29 12:18:01 · 3935 阅读 · 0 评论 -
十五、Linux驱动之USB鼠标驱动
1. 如何编写USB鼠标驱动 结合十四、Linux驱动之USB驱动分析中的分析,我们开始写一个USB鼠标驱动。 USB的驱动可以分为3类:SoC的USB控制器的驱动,主机端USB设备的驱动,设备上的USB Gadget驱动,通常,对于USB这种标准化的设备,内核已经将主机控制器的驱动编写好了,设备上的Gadget驱动通常只运行固件程序而不是基于Linux, 所以驱动工程师的主要...原创 2018-12-01 17:31:29 · 1452 阅读 · 2 评论 -
二十、Linux驱动之移植DM9000C网卡驱动(上)
1. 基本概念 DM9000C是一款完全集成的和符合成本效益单芯片快速以太网MAC控制器与一般处理接口,一个10/100M自适应的PHY和4K DWORD值的SRAM。DM9000C内部还集成了接收缓冲区,可以在接收到数据的时候把数据存放到缓冲区中,链路层可以直接把数据从缓冲区取走。针对不同的处理器, 接口支持8位、 16位。 本节内容先分析DM9000厂家提供的网卡驱动程序dm...原创 2018-12-13 16:50:33 · 977 阅读 · 0 评论 -
十八、Linux驱动之nor flash驱动
1. 基本概念 NOR FLASH是很常见的一种存储芯片,数据掉电不会丢失。NOR FLASH支持Execute On Chip,即程序可以直接在FLASH片内执行(这意味着存储在NOR FLASH上的程序不需要复制到RAM就可以直接运行)。这点和NAND FLASH不一样。因此,在嵌入式系统中,NOR FLASH很适合作为启动程序的存储介质。NOR FLASH的读取和RAM很类似(只要...原创 2018-12-06 17:00:13 · 1944 阅读 · 0 评论 -
二十一、Linux驱动之移植DM9000C网卡驱动(下)
通过二十、Linux驱动之移植DM9000C网卡驱动(上)对厂家提供的网卡驱动程序dm9dev9000c.c的分析,下面将该网卡驱动移植到JZ2440开发板上(内核版本为linux-2.6.22.6)。1. 硬件分析 本人使用的开发板是JZ2440,CPU为S3C2440A,与DM9000C芯片连接如下: SD0~15:16位地址、数据线,由CMD引脚决定访问类型。...原创 2018-12-14 13:43:03 · 1008 阅读 · 0 评论 -
二十二、Linux驱动之IIC驱动(基于linux2.6.22.6内核)
1. 基本概念本文默认读者掌握裸机下的I2C操作,该部分只做简单介绍, 主要内容是对linux-2.6.22.6系统下I2C驱动的分析。 由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据,是一个多主机的半双工通信方式,每个挂接在总线上的器件都有个唯一的地址。位速在标准模式下可达100kbit/s,在快速模式下可达400kbit/s,在高速模式下可待3.4Mbit/s。 ...原创 2018-12-17 17:24:19 · 1529 阅读 · 0 评论 -
十九、Linux驱动之虚拟网卡驱动
1. 基本概念 网络设备是完成用户数据包在网络媒介上发送和接收的设备,它将上层协议传递下来的数据包以特定的媒介访问控制方式进行发送,并将接收到的数据包传递给上层协议。与字符设备和块设备不同,网络设备并不对应于/dev目录下的文件,应用程序最终使用套接字完成与网络设备的接口。因而在网络设备身上并不能体现出“一切都是文件”的思想。 Linux系统对网络设备驱动定义了4个层次, 从上到...原创 2018-12-11 17:22:46 · 4259 阅读 · 1 评论 -
二十三、Linux驱动之IIC驱动(基于linux4.12内核)
1. 基本概念本文默认读者掌握裸机下的I2C操作,该部分只做简单介绍, 主要内容是对linux-4.12系统下I2C驱动的分析。(上一篇二十一、Linux驱动之IIC驱动(基于linux2.6.22.6内核)对linux-2.6.22.6内核的I2C进行了分析,新内核的I2C有了很大的变化,但是也有部分类似,为了保证完整性,我会全部从头分析。linux-4.12的移植和对应之前驱动的移植以后会...原创 2018-12-24 16:34:19 · 2225 阅读 · 0 评论 -
十七、Linux驱动之nand flash驱动
1. 基本概念 Nand-flash存储器是flash存储器的一种,其内部采用非线性宏单元模式,为固态大容量内存的实现提供了廉价有效的解决方案。Nand-flash存储器具有容量较大,改写速度快等优点,适用于大量数据的存储,因而在业界得到了越来越广泛的应用,如嵌入式产品中包括数码相机、MP3随身听记忆卡、体积小巧的U盘等。2. 硬件分析 本人使用的是韦东山老师的JZ2440...原创 2018-12-05 10:48:34 · 2512 阅读 · 0 评论 -
十六、Linux驱动之块设备驱动
1. 基本概念 块设备是Linux三大设备之一,其驱动模型主要针对磁盘,Flash等存储类设备,块设备(blockdevice)是一种具有一定结构的随机存取设备,对这种设备的读写是按块(所以叫块设备)进行的,他使用缓冲区来存放暂时的数据,待条件成熟后,从缓存一次性写入设备或者从设备一次性读到缓冲区。1.1 块设备结构 块设备由Page->Segment->Blo...原创 2018-12-04 10:15:30 · 1219 阅读 · 1 评论 -
十一、Linux驱动之platform总线设备驱动
1. 基本概念 从Linux2.6开始Linux加入了一套驱动管理和注册机制—platform平台总线驱动模型。platform平台总线是一条虚拟总线,platform_device为相应的设备,platform_driver为相应的驱动。与传统的bus/device/driver机制相比,platform机制将设备本身的资源注册进内核,由内核统一管理,在驱动程序使用这些资源时使用统一的...原创 2018-11-26 16:36:04 · 2358 阅读 · 0 评论 -
三、Linux驱动之定时器
1. 基本概念 内核定时器是内核用来控制在未来某个时间点(基于jiffies)调度执行某个函数的一种机制,其实现位于 <Linux/timer.h> 和 kernel/timer.c 文件中。 被调度的函数肯定是异步执行的,它类似于一种“软件中断”,而且是处于非进程的上下文中,所以调度函数必须遵守以下规则:(1) 没有 current 指针、不允许访问用户空间。因为没...原创 2018-11-21 09:55:43 · 569 阅读 · 0 评论 -
四、Linux驱动之使用中断
1. 中断基本概念1.1 中断基础介绍 中断就是CPU正常运行期间,由于内、外部事件引起的CPU暂时停止正在运行的程序,去执行该内部事件或外部事件的引起的服务中去,服务执行完毕后再返回断点处继续执行的情形。 中断的意义:极大提高CPU运行效率。 中断处理程序:在中断发生时被调用的函数称为中断服务函数。 中断服务函数的原则:linux是多进程操作系统。 中...原创 2018-11-21 14:18:09 · 3105 阅读 · 0 评论 -
五、Linux驱动之poll机制
上一小节写到的中断方式获取按键值时,应用程序需要不停的查询,占用CPU资源太多,现在改用poll机制实现相同的按键效果。1. poll机制流程 当应用程序调用poll函数的时候(比如:poll(fds,1,5000),fds是定义的一个poll类型的结构体),poll是一个系统调用,会调用到内核入口函数sys_poll(可在内核中找到该函数),该函数最终会调用do_poll函数,do...原创 2018-11-21 17:32:31 · 1787 阅读 · 0 评论 -
六、Linux驱动之异步通知
1. 基本概念 异步通知的意思是: 一旦设备就绪,则主动通知应用程序,这样应用程序根本就不需要查询设备状态,这一点非常类似于硬件上“中断”的概念,比较准确的称谓是“信号驱动的异步I/O”。信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候...原创 2018-11-22 15:17:04 · 943 阅读 · 0 评论 -
一、Linux驱动之基础概念介绍
1. 应用程序、库、内核、驱动程序的关系 从上到下,一个软件系统可以分为:应用程序、库、操作系统(内核)、驱动程序。开发人员可以专注于自己熟悉的部分,对于相邻层,只需要了解它的接口,无需关注它的实现细节。 以点亮一个 LED 为例,这 4 层软件的协作关系如下,如下图所示:1). 应用程序使用库提供的 open 函数打开代表 LED 的设备文件。2). 库根据 open 函数传...原创 2018-11-19 16:27:52 · 609 阅读 · 1 评论 -
七、Linux驱动之并发控制
本节部分参考宋宝华的Linux设备驱动开发详解1. 基本概念1.1 Linux并发相关基础概念 Linux设备驱动中必须要解决的一个问题是多个进程对共享的资源的并发访问,并发的访问会导致竞态。 (1) 并发(concurrency):并发指的是多个执行单元同时、并发被执行,而并发的执行单元对共享资源(硬件资源和软件上的全局变量、静态变量等)的访问则很容易导致竞态(race ...原创 2018-11-22 20:41:18 · 644 阅读 · 0 评论 -
九、Linux驱动之输入子系统分析
1. 基本概念 Linux系统支持的输入设备繁多,例如键盘、鼠标、触摸屏、手柄或者是一些输入设备像体感输入等等,Linux系统是如何管理如此之多的不同类型、不同原理、不同的输入信息的输入设备的呢?其实就是通过input输入子系统这套软件体系来完成的。1.1 系统整体框图1.2 输入子系统框架从整体上来说,输入子系统由驱动层(Drivers),输入子系统核心层(Input ...原创 2018-11-24 12:02:23 · 1101 阅读 · 0 评论 -
八、Linux驱动之阻塞与非阻塞
本节部分参考宋宝华的Linux设备驱动开发详解1. 基本概念 阻塞操作是指在执行设备操作时,若不能获得资源,则挂起进程直到满足可操作的条件后再进行操作。被挂起的进程进入睡眠状态,被从调度器的运行队列移走,直到等待的条件被满足。而非阻塞操作的进程在不能进行设备操作时,并不挂起,它要么放弃,要么不停地查询,直至可以进行操作为止。 驱动程序通常需要提供这样的能力:当应用程序进行re...原创 2018-11-23 14:36:52 · 386 阅读 · 0 评论 -
十、Linux驱动之输入子系统使用
在九、Linux驱动之输入子系统分析中我们分析了输入子系统的框架,接下来我以按键模拟键盘的方式来编写输入子系统代码。1. 分析设备本人使用的是JZ2440v3开发板,该开发板CPU使用的是S3C2440A,按键与CPU连接如下: 可以看到4个按键分别连接到2440的GPF0、GPF2、GPG3、GPG11引脚上面,4个按键接上拉电阻,可知按键按下时引脚输入低电平,按键松开时引脚输...原创 2018-11-26 10:11:30 · 619 阅读 · 0 评论 -
移植之前所有驱动(基于linux-2.6.22.6)到linux-4.12内核
之前编写的驱动都是基于linux-2.6.22.6内核的,下面将所有驱动移植到linux-4.12内核上,linux-4.12使用的是移植linux-4.12到JZ2440里移植的内核,使用2.4 制作补丁的方法获得该移植好的linux-4.12内核。目录1. 移植网卡驱动 1.1 准备文件 1.2 解决错误 1.2.1 解决错误1 ...原创 2019-02-14 15:39:55 · 3669 阅读 · 0 评论