
Linux 驱动开发
文章平均质量分 89
主要用于嵌入式开发工作者或者爱好者进行Linux驱动开发交流,这里有笔者学习Linux驱动开发中遇到的问题或者较好的总结性文章,笔者在今后的工作中也将陆续添加在驱动开发中继续进行一些技术性总结吗,希望对大家的学习有所帮助
zqixiao_09
这个作者很懒,什么都没留下…
展开
-
Linux 网络设备驱动开发(三) —— 网络设备驱动基本原理和框架
一、协议栈层次对比二.Linux网络子系统 Linux网络子系统的顶部是系统调用接口层。它为用户空间提供的应用程序提供了一种访问内核网络子系统的方法(socket)。位于其下面是一个协议无关层,它提供一种通用的方法来使用传输层协议。然后是具体协议的实现,在Linux中包括内核的协议TCP,UDP,当然还有IP。然后是设备无关层,它提供了协议与设备驱动通信的通用接口原创 2016-04-13 21:17:13 · 18670 阅读 · 2 评论 -
Linux 网络设备驱动开发(二) —— Linux 网络栈剖析
协议简介虽然对于网络的正式介绍一般都参考了 OSI(Open Systems Interconnection)模型,但是本文对 Linux 中基本网络栈的介绍分为四层的 Internet 模型(如图 1 所示)。图 1. 网络栈的 Internet 模型这个栈的最底部是链路层。链路层是指提供对物理层访问的设备驱动程序,这可以是各种介质,例如串口链路或以太网设备。链路层上原创 2016-04-13 21:02:26 · 7437 阅读 · 1 评论 -
Linux 网络设备驱动开发(一) —— linux内核网络分层结构
Preface Linux内核对网络驱动程序使用统一的接口,并且对于网络设备采用面向对象的思想设计。 Linux内核采用分层结构处理网络数据包。分层结构与网络协议的结构匹配,既能简化数据包处理流程,又便于扩展和维护。内核网络结构 在Linux内核中,对网络部分按照网络协议层、网络设备层、设备驱动功能层和网络媒介原创 2016-04-13 20:47:15 · 13832 阅读 · 0 评论 -
Linux 下wifi 驱动开发(四)—— USB接口WiFi驱动浅析
前面学习了SDIO接口的WiFi驱动,现在我们来学习一下USB接口的WiFi驱动,二者的区别在于接口不同。而USB接口的设备驱动,我们前面也有学习,比如USB摄像头驱动、USB鼠标驱动,同样都符合LinuxUSB驱动结构: USB设备驱动(字符设备、块设备、网络设备) |原创 2016-04-10 21:33:08 · 22728 阅读 · 6 评论 -
Linux 下wifi 驱动开发(三)—— SDIO接口WiFi驱动浅析
对于SDIO接口的wifi,首先,它是一个sdio的卡的设备,然后具备了wifi的功能,所以,注册的时候还是先以sdio的卡的设备去注册的。然后检测到卡之后就要驱动他的wifi功能了,显然,他是用sdio的协议,通过发命令和数据来控制的。下面先简单回顾一下SDIO的相关知识:一、SDIO相关基础知识解析1、SDIO接口 SDIO 故名思义,就是 SD 的 I/O 接口(in原创 2016-04-09 19:11:16 · 61529 阅读 · 7 评论 -
Linux 下wifi 驱动开发(二)—— WiFi模块浅析
一、什么是wifi 模块 百度百科上这样定义: Wi-Fi模块又名串口Wi-Fi模块,属于物联网传输层,功能是将串口或TTL电平转为符合Wi-Fi无线网络通信标准的嵌入式模块,内置无线网络协议IEEE802.11b.g.n协议栈以及TCP/IP协议栈。传统的硬件设备嵌入Wi-Fi模块可以直接利用Wi-Fi联入互联网,是实现无线智能家居、M2M等物联网应用的重要组原创 2016-04-09 19:10:18 · 31618 阅读 · 0 评论 -
Linux 下wifi 驱动开发(一)—— WiFi基础知识解析
一、WiFi相关基础概念1、什么是wifi 我们看一下百度百科是如何定义的: Wi-Fi是一种可以将个人电脑、手持设备(如pad、手机)等终端以无线方式互相连接的技术,事实上它是一个高频无线电信号。[1] 无线保真是一个无线网络通信技术的品牌,由Wi-Fi联盟所持有。目的是改善基于IEEE 802.11标准的无线网路产品之间的互通性。有人把使用IEEE 802.原创 2016-04-09 19:09:28 · 57265 阅读 · 7 评论 -
Linux 设备驱动的固件加载
作为一个驱动作者, 你可能发现你面对一个设备必须在它能支持工作前下载固件到它里面. 硬件市场的许多地方的竞争是如此得强烈, 以至于甚至一点用作设备控制固件的 EEPROM 的成本制造商都不愿意花费. 因此固件发布在随硬件一起的一张 CD 上, 并且操作系统负责传送固件到设备自身. 硬件越来越复杂,硬件的许多功能使用了程序实现,与直接硬件实现相比,固件拥有处理复杂事物的灵活性和便于升级、原创 2016-04-09 19:08:20 · 14828 阅读 · 1 评论 -
Linux 下的DMA浅析
DMA是一种无需CPU的参与就可以让外设和系统内存之间进行双向数据传输的硬件机制。使用DMA可以使系统CPU从实际的I/O数据传输过程中摆脱出来,从而大大提高系统的吞吐率。DMA经常与硬件体系结构特别是外设的总线技术密切相关。一、DMA控制器硬件结构 DMA允许外围设备和主内存之间直接传输 I/O 数据, DMA 依赖于系统。每一种体系结构DMA传输不同,编程接口也不同原创 2016-04-07 20:55:54 · 30885 阅读 · 6 评论 -
Linux 设备驱动开发思想 —— 驱动分层与驱动分离
前面我们学习I2C、USB、SD驱动时,有没有发现一个共性,就是在驱动开发时,每个驱动都分层三部分,由上到下分别是:1、XXX 设备驱动2、XXX 核心层3、XXX 主机控制器驱动 而需要我们编写的主要是设备驱动部分,主机控制器驱动部分也有少量编写,二者进行交互主要时由核心层提供的接口来实现;这样结构清晰,大大地有利于我们的驱动开发,这其中就是利用了Linux设备驱动开发原创 2016-04-07 20:11:37 · 14743 阅读 · 0 评论 -
Linux SD卡驱动开发(六) —— SD卡启动过程总体分析
一、工作流程mmc驱动主要文件包括drivers/mmc/card/block.cdrivers/mmc/card/queue.cdrivers/mmc/core/core.cdrivers/mmc/core/host.cdrivers/mmc/core/内核启动时,首先执行core/core.c的mmc_init,注册mmc、sd总线,以及一个host class设备原创 2016-04-04 20:52:08 · 7685 阅读 · 2 评论 -
Linux USB 驱动开发(五)—— USB驱动程序开发过程简单总结
设备驱动程序是操作系统内核和机器硬件之间的接口,由一组函数和一些私有数据组成,是应用程序和硬件设备之间的桥梁。在应用程序看来,硬件设备只是一个设备文件,应用程序可以像操作普通文件一样对硬件设备进行操作。 设备驱动程序是内核的一部分,主要完成以下功能:对设备的初始化和释放;把数据从内核传送到硬件设备和从硬件设备读取数据;读取应用程序数据传送给设备文件和回送应用程序请求的数据;检测和处理原创 2016-04-04 17:00:17 · 24394 阅读 · 1 评论 -
Linux USB 驱动开发(四)—— 热插拔那点事
学习USB热插拔之前,先学习一些USB的硬件知识:一、USB基础概念1、硬件知识(USB插座和插头) 在最初的标准里,USB接头有4条线:电源,D-,D+,地线。我们暂且把这样的叫做标准的USB接头吧。后来OTG出现了,又增加了miniUSB接头。而miniUSB接头则有5条线,多了一条ID线,用来标识身份用的。标准USB口只有A型和B型。其中每一型又分为插头和插座,例如A原创 2016-04-04 16:08:04 · 24589 阅读 · 2 评论 -
Linux USB 驱动开发实例 (三)—— 基于USB总线的无线网卡浅析
一、USB设备驱动程序的构成1、设备的探测 用于检查传递给探测函数的设备信息,确认驱动程序是否适合该设备。2、数据的发送和接收 负责主机到设备的发送和设备到主机的数据接收。3、设备断开 当设备断开时候,模块负责清除和该设备关联的所有资源。4、模块的加载和卸载 用于加载和卸载usb接口的无线网卡驱动程序。二、US原创 2016-04-04 12:06:00 · 8584 阅读 · 0 评论 -
Linux SD卡驱动开发(五) —— SD 卡驱动分析Core补充篇
Core层中有两个重要函数 mmc_alloc_host 用于分配一个mmc的控制器,前面已经学习过,这里不再阐述;另一个就是 mmc_add_host 下面是这个函数的详细分析mmc_add_host [core/host.c]/** * mmc_add_host - initialise host hardware * @host: mmc host * * Regi原创 2016-04-02 20:14:46 · 3274 阅读 · 0 评论 -
Linux SD卡驱动开发(四) —— SD 控制器之真正的硬件操作
前面对SD卡控制器有了一个基本的介绍。其实SD控制器层更过的意义是为core层提供一种操作SD卡硬件的一种方法,当然不同的控制器对硬件控制的方法不尽相同,但是他们最终都能像core层提交一个统一的封装有操作方法的数据结构,那便是即将闪亮登场的struct mmc_host_ops....对应的host文件为s3cmci.c。 接下来就来揭开与之对应的struct mmc_host_ops原创 2016-04-02 10:18:21 · 8763 阅读 · 3 评论 -
Linux SD卡驱动开发(三) —— SD 卡驱动分析CORE篇
废话不多说,直接切进主题: Linux在内核源码的drivers/mmc/core文件夹下为我们的提供了一系列SD卡的接口服务函数。可以查看Makefile如下可见,core文件夹下有针对总线的服务bus.c,针对主控制器的服务host.c,针对SD卡的服务sd.c, sd_ops.c等等。其中,最为核心的一个函数便是之前提到的位于core.c的mmc_rescan原创 2016-04-02 09:45:37 · 10501 阅读 · 2 评论 -
Linux SD卡驱动开发(二) —— SD 卡驱动分析HOST篇
回顾一下前面的知识,MMC 子系统范围三个部分:HOST 部分是针对不同主机的驱动程序,这一部是驱动程序工程师需要根据自己的特点平台来完成的。CORE 部分: 这是整个MMC 的核心存,这部分完成了不同协议和规范的实现,并为HOST 层的驱动提供了接口函数。CARD 部分:因为这些记忆卡都是块设备,当然需要提供块设备的驱动程序,这部分就是实现了将你的SD 卡如何实现为块设备的。它们原创 2016-04-01 22:19:18 · 25501 阅读 · 9 评论 -
Linux SD卡驱动开发(一) —— SD 相关基础概念
一.SD/MMC卡基础概念1.1.什么是MMC卡 MMC:MMC就是MultiMediaCard的缩写,即多媒体卡。它是一种非易失性存储器件,体积小巧(24mm*32mm*1.4mm),容量大,耗电量低,传输速度快,广泛应用于消费类电子产品中。1.2.什么是SD卡 SD:SD卡为Secure Digital Memory Card, 即安全数码卡。它在MMC的基础原创 2016-04-01 21:18:05 · 16495 阅读 · 4 评论 -
Linux USB 驱动开发实例(二)—— USB 鼠标驱动注解及测试
参考2.6.14版本中的driver/usb/input/usbmouse.c。鼠标驱动可分为几个部分:驱动加载部分、probe部分、open部分、urb回调函数处理部分。 一、驱动加载部分static int __init usb_mouse_init(void){ int retval = usb_register(&usb_mouse_driver);//注册鼠标驱动原创 2016-03-28 20:05:25 · 9139 阅读 · 1 评论 -
Linux USB 驱动开发(三)—— 编写USB 驱动程序
Linux的设备驱动都遵循一个惯例——表征驱动程序(用driver更贴切一些,应该称为驱动器比较好吧)的结构体,结构体里面应该包含了驱动程序所需要的所有资源。用术语来说,就是这个驱动器对象所拥有的属性及成员。一、usb-skeleton 下面先看一下Linux内核源码中的一个usb-skeleton(就是usb驱动的骨架咯),其定义的设备结构体就叫做usb-skel:s原创 2016-03-26 15:10:13 · 26833 阅读 · 2 评论 -
Linux USB 驱动开发(二)—— USB 驱动几个重要数据结构
前面我们学习了USB 驱动的一个描述符,下面来学习 USB 驱动的几个重要数据结构一、struct usb_interface 接口函数struct usb_interface{ struct usb_host_interface *altsetting; struct usb_host_interface *cur_a原创 2016-03-26 15:03:27 · 8304 阅读 · 0 评论 -
Linux USB 驱动开发实例(一) —— USB摄像头驱动实现源码分析
Spac5xx的实现是按照标准的USB VIDEO设备的驱动框架编写(其具体的驱动框架可参照/usr/src/linux/drivers/usb/usbvideo.c文件),整个源程序由四个主体部分组成:设备模块的初始化模块和卸载模块,上层软件接口模块,数据传输模块。具体的模块分析如下: 一、初始化设备模块 该驱动采用了显式的模块初始化和消除函数,即调用mod原创 2016-03-25 22:57:36 · 17870 阅读 · 4 评论 -
Linux USB 驱动开发(一)—— USB设备基础概念
在终端用户看来,USB设备为主机提供了多种多样的附加功能,如文件传输,声音播放等,但对USB主机来说,它与所有USB设备的接口都是一致的。一个USB设备由3个功能模块组成:USB总线接口、USB逻辑设备和功能单元:a -- 这里的USB总线接口指的是USB设备中的串行接口引擎(SIE);b -- USB逻辑设备被USB系统软件看作是一个端点的集合;c -- 功能单元被客户软件看作是一个原创 2016-03-25 21:42:23 · 31380 阅读 · 5 评论 -
DS18B20 驱动编写
嵌入式开发平台:mini2440DS18B20 所用GPIO:S3C2410_GPF(3)一、DS18B20 时序分析 DS18B20的一线工作协议流程是:初始化→ROM操作指令→存储器操作指令→数据传输,其工作时序包括:初始化时序、写时序、读时序。1、初始化时序 主机首先发出一个480-960微秒的低电平脉冲,然后释放总线变为高电平,并在原创 2016-03-24 18:38:47 · 19053 阅读 · 2 评论 -
Exynos4412 IIC总线驱动开发(二)—— IIC 驱动开发
前面在Exynos4412 IIC总线驱动开发(一)—— IIC 基础概念及驱动架构分析 中学习了IIC驱动的架构,下面进入我们的驱动开发过程, 首先看一张代码层次图,有助于我们的理解 上面这些代码的展示是告诉我们:linux内核和芯片提供商为我们的的驱动程序提供了 i2c驱动的框架,以及框架底层与硬件相关的代码的实现。 剩下的就是针对挂原创 2016-03-17 22:15:31 · 8776 阅读 · 4 评论 -
Exynos4412 IIC总线驱动开发(一)—— IIC 基础概念及驱动架构分析
关于Exynos4412 IIC 裸机开发请看 :Exynos4412 裸机开发 —— IIC总线 ,下面回顾下 IIC 基础概念一、IIC 基础概念IIC(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。IIC总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态原创 2016-03-17 20:45:18 · 15790 阅读 · 5 评论 -
Linux 设备驱动开发 —— 设备树在platform设备驱动中的使用
关与设备树的概念,我们在Exynos4412 内核移植(六)—— 设备树解析 里面已经学习过,下面看一下设备树在设备驱动开发中起到的作用 Device Tree是一种描述硬件的数据结构,设备树源(Device Tree Source)文件(以.dts结尾)就是用来描述目标板硬件信息的。Device Tree由一系列被命名的结点(node)和属性(property)组成,而结点本原创 2016-03-14 20:47:15 · 29328 阅读 · 9 评论 -
Linux 设备驱动开发 —— platform 设备驱动
一、platform总线、设备与驱动 一个现实的Linux设备和驱动通常都需要挂接在一种总线上,对于本身依附于PCI、USB、I2C、SPI等的设备而言,这自然不是问题,但是在嵌入式系统里面,SoC系统中集成的独立的外设控制器、挂接在SoC内存空间的外设等确不依附于此类总线。基于这一背景,Linux发明了一种虚拟的总线,称为platform总线,相应的设备称为platform_d原创 2016-03-12 14:45:56 · 14375 阅读 · 5 评论