
linux驱动
文章平均质量分 75
jeffade
这个作者很懒,什么都没留下…
展开
-
file_operation
[cpp] view plaincopystruct file_operations{ struct module *owner; // 指向拥有该结构的模块的指针,避免正在操作时被卸载,一般为初始化为THIS_MODULES loff_t (*llseek) (struct转载 2012-11-01 09:30:39 · 723 阅读 · 0 评论 -
Linux驱动程序中比较重要的宏
MODULE_DEVICE_TABLE (usb, skel_table); 该宏生成一个名为__mod_pci_device_table的局部变量,该变量指向第二个参数内核构建时,depmod程序会在所有模块中搜索符号__mod_pci_device_table,把数据(设备列表)从模块中抽出,添加到映射文件/lib/modules/KERNEL_VERSION/module转载 2012-06-28 10:08:39 · 1213 阅读 · 0 评论 -
usb skel 详解
注册USB驱动程序:所有的USB驱动程序都必须创建的结构体是struct usb_driver。这个结构体必须由USB驱动程序来填写,包括许多回调函数和变量,它们向USB核心代码描述USB驱动程序。创建一个有效的struct usb_driver结构体,只须要初始化五个字段就可以了,在框架程序中是这样的:static struct usb_driver skel_driver = {转载 2012-06-27 15:10:38 · 882 阅读 · 0 评论 -
Linux下的硬件驱动——USB设备
前言USB是英文"Universal Serial Bus"的缩写,意为"通用串行总线"。是由Compaq(康柏)、DEC、IBM、Intel、NEC、微软以及Northern Telecom(北方电讯)等公司于1994年11月共同提出的,主要目的就是为了解决接口标准太多的弊端。USB使用一个4针插头作为标准插头,并通过这个标准接头,采用菊花瓣形式把所有外设连接起来,它采用串行方式传输数据转载 2012-06-28 09:52:41 · 2023 阅读 · 0 评论 -
(LDD3)Scull在2.6.35-30内核中的编译解决方案
LDD3作为从事驱动开发工作人员的必要参考资料,认真研究书中的附带源码具有很高的参考价值,但由于代码基于2.6.10内核,部分内核API较老,导致在2.6.35-30等较新内核上编译不能通过,由于工作需要,特花了一段时间进行整理,本篇文章对示例源码中的第一个驱动程序SCULL进行整理,供各位同仁参考:1、修改Makefile的第24行: 如果是基于PC,则KER转载 2012-05-24 16:14:31 · 648 阅读 · 0 评论 -
container_of()宏--open()
在学习Linux驱动的过程中,遇到一个宏叫做container_of。该宏定义在include/linux/kernel.h中,首先来贴出它的代码:/** * container_of - cast a member of a structure out to the containing structure * @ptr: the pointer to the转载 2012-05-24 11:17:29 · 418 阅读 · 0 评论 -
Linux设备驱动程式学习(1)-字符设备驱动程式
今天进入《Linux设备驱动程式(第3版)》第三章字符设备驱动程式的学习。这一章主要通过介绍字符设备scull(Simple Character Utility for Loading Localities,区域装载的简单字符工具)的驱动程式编写,来学习Linux设备驱动的基本知识。scull能够为真正的设备驱动程式提供样板。一、主设备号和此设备号主设备号表示设备对应的驱动程式;次设备转载 2012-05-11 14:46:08 · 300 阅读 · 0 评论 -
理解和认识udev
因为本身从事存储行业,在工作中多次碰到用户有这样的要求:我的linux系统中原来有一块SCSI硬盘,系统分配的设备文件是/dev/sda。现在新增加了一个外置的磁盘阵列,通过SCSI卡连接。但接上这个磁盘阵列后,/dev/sda变成了磁盘阵列的硬盘了,原来内置的SCSI硬盘变成了 /dev/sdb,我希望将设备文件固定下来。 过去,我总是对用户说,这个比较麻烦,因为/dev/sda等文件转载 2012-05-23 20:06:38 · 359 阅读 · 0 评论 -
Linux设备模型(1)
随着计算机的周边外设越来越丰富,设备管理已经成为现代操作系统的一项重要任务,这对于Linux来说也是同样的情况。每次Linux内核新版本的发布,都会伴随着一批设备驱动进入内核。在Linux内核里,驱动程序的代码量占有了相当大的比重。下图是我在网络上搜索到的一幅Linux内核代码量的统计图,对应的内核版本是2.6.29。我们可以很明显的看到,在Linux内核中驱动程序的比例已经非常高了。转载 2012-06-08 19:17:32 · 428 阅读 · 0 评论 -
Linux设备模型 (4)
《Linux设备模型 (2)》和《Linux设备模型 (3)》主要通过一些简单的实作介绍了kobject、kset、kobj_type、attribute等数据结构的用法,但这些实作并没有涉及到实际环境下的设备模型和sysfs。本文将以/sys下的module子目录为例,看看内核是如何构建sysfs这棵大树的。(注:本文的分析基于2.6.36内核) module的创建当module转载 2012-06-08 19:21:29 · 429 阅读 · 0 评论 -
Linux设备模型 (3)
在上文中,我们介绍到如何使用default attribute。Default attribute使用很方便,但不够灵活。比如上篇文章在Kobject一节中提到的那个例子,name和val这两个attribute使用同一个show/store函数来访问,如果attribute非常多,show/store函数里的分支就会很凌乱。为了解决这个问题,我们可以参考内核提供的kobj_attribute转载 2012-06-08 19:20:34 · 403 阅读 · 0 评论 -
Linux设备模型 (2)
上一篇文章《Linux设备模型 (1)》主要介绍了Linux设备模型在用户空间的接口sysfs,用户通过这个接口可以一览内核设备的全貌。本文将从Linux内核的角度来看一看这个设备模型是如何构建的。在Linux内核里,kobject是组成Linux设备模型的基础,一个kobject对应sysfs里的一个目录。从面向对象的角度来说,kobject可以看作是所有设备对象的基类,因为C语言并没有面向转载 2012-06-08 19:18:32 · 357 阅读 · 0 评论 -
usb驱动的基本结构和函数简介
几个重要的结构struct--接口[plain] view plaincopystruct usb_interface { /* array of alternate settings for this interface, * stored in no particular转载 2012-06-28 10:09:16 · 2919 阅读 · 0 评论 -
Linux环境下USB的原理、驱动和配置
本文由优快云 特别约稿,作者为北京中科红旗软件技术有限公司 嵌入式工程师 梁国军 随着生活水平的提高,人们对USB设备的使用也越来越多,鉴于Linux在硬件配置上尚不能全部即插即用,因此关于Linux如何配置和使用,成为困扰我们的一大问题。 什么是USB?USB是英文Universal Serial Bus的缩写,意为通用串行总线。USB最初是为了替代许多不转载 2012-06-28 09:50:15 · 812 阅读 · 0 评论 -
linux设备驱动之USB主机控制器驱动分析
----------------------------------------- 本文系本站原创,欢迎转载!转载请注明出处:http://ericxiao.cublog.cn/------------------------------------------一:前言Usb是一个很复杂的系统.在usb2.0规范中,将其定义成了一个分层模型.linux中的代码也是按照这个分层模转载 2012-08-16 09:34:40 · 6038 阅读 · 0 评论 -
触摸屏驱动分析(s3c-ts.c)(Linux)(分析)
/* linux/drivers/input/touchscreen/s3c-ts.c * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as publish转载 2012-08-30 15:36:34 · 1322 阅读 · 0 评论 -
Usb Hub代码分析
如需引用请注明出处:http://blog.youkuaiyun.com/zkami 作者:ZhengKui在host controller初始化的时候一定会调用hub_probe进行初始化,至少对root hub初始化hub_probe(struct usb_interface *intf, const struct usb_device_id *id) (hub.c)此时struct us转载 2012-08-15 15:46:50 · 1942 阅读 · 0 评论 -
Linux USB驱动程序基础
Linux USB Driver BasicsIntroductionDrivers are software components that operating systems use to provide hardware specific services to applications. This webpage attempts to document the basic转载 2012-08-14 09:32:20 · 1019 阅读 · 0 评论 -
USB系统设备模型建立流程
USB设备模型建立流程概览S3c2440处理器中集成有USB控制器,该主控制器作为平台设备s3c_device_usb添加到内核,该设备与驱动ohci_hcd_s3c2410_driver匹配后调用函数usb_hcd_s3c2410_probe。在函数usb_hcd_s3c2410_probe中获取硬件资源,为USB主控制器结构体usb_hcd分配内存,调用函数usb_add_hc转载 2012-07-25 15:46:27 · 1629 阅读 · 0 评论 -
个人对kobject的一点研究
kobject,kset,子系统层次结构内核通常用kobject 结构将各个对象连接起来组成一个分层的结构体系。 parent 是指向另外一个kobject 结构(分层结构中上一层的节点)的指针,主要用途是在 sysfs 层次中定位对象. 一个 kset 是嵌入到相同类型结构的 kobject 的集合。但 struct kobj_type 关注的是对象的类型,而stru转载 2012-08-06 10:36:05 · 519 阅读 · 0 评论 -
sysfs文件系统学习
为了更好地了解kobject的层次关系,有必要了解一下这种层次关系的表现机制:sysfs。本文简单地学习了一下sysfs,大部分内容来自内核文档sysfs.txt。好了,开始我们的学习之旅,呵呵。 何为sysfs sysfs是一种基于ram的文件系统,它提供了一种用于向用户空间展现内核空间里的对象、属性和链接。sysfs与kobject层次紧密相连,它将kobject转载 2012-08-06 10:35:19 · 665 阅读 · 0 评论 -
udev class_create() device_create()
在刚开始写Linux设备驱动程序的时候,很多时候都是利用mknod命令手动创建设备节点,实际上Linux内核为我们提供了一组函数,可以用来在模块加载的时候自动在/dev目录下创建相应设备节点,并在卸载模块时删除该节点,当然前提条件是用户空间移植了udev。内核中定义了struct class结构体,顾名思义,一个struct class结构体类型变量对应一个类,内核同时提供了class_c转载 2012-07-19 08:39:05 · 904 阅读 · 0 评论 -
linux设备模型--代码分析
上面分析了kobject.kset,ktype.这三个结构联合起来一起构成了整个设备模型的基石.而bus.device.device_driver.则是基于kobject.kset.ktype之上的架构.在这里,总线,设备,驱动被有序的组和在一起.Bus.device.device_driver三者之间的关系如下图所示: 如上图所示.struct bus_type转载 2012-08-02 15:12:22 · 549 阅读 · 0 评论 -
Linux USB驱动框架分析
Linux USB驱动框架分析(一)初次接触和OS相关的设备驱动编写,感觉还挺有意思的,为了不至于忘掉看过的东西,笔记跟总结当然不可缺,更何况我决定为嵌入式卖命了。好,言归正传,我说一说这段时间的收获,跟大家分享一下Linux的驱动研发。但这次只先针对Linux的USB子系统作分析,因为周五研讨老板催货。当然,还会顺带提一下其他的驱动程式写法。 事实上,Linux的设备驱动都遵循一个惯转载 2012-06-29 09:46:20 · 1134 阅读 · 0 评论 -
linux设备模型浅析
好久都没来过啦.最近又在重看linux device driver这本书.之前看的时候忽略掉了linux设备模型这个章节,这次仔细看了一下,可看的相当头痛,迷迷糊糊...话说源代码时最好的工具书,于是查阅了一下源代码,也大致阅读了一些,没太仔细的句句分析,只是关注了与设备模型相关的。 linux设备模型的抽象是总线、设备、模型。按照这个顺序来分析就可以勾勒出linux设备模型。转载 2012-06-08 18:41:14 · 1250 阅读 · 0 评论 -
class_create() device_create()
在刚开始写Linux设备驱动程序的时候,很多时候都是利用mknod命令手动创建设备节点,实际上Linux内核为我们提供了一组函数,可以用来在模块加载的时候自动在/dev目录下创建相应设备节点,并在卸载模块时删除该节点,当然前提条件是用户空间移植了udev。内核中定义了struct class结构体,顾名思义,一个struct class结构体类型变量对应一个类,内核同时提供了class_cre转载 2012-06-05 19:04:01 · 611 阅读 · 0 评论 -
Linux设备驱动程式学习(3)-并发和竞态
今天进入《Linux设备驱动程式(第3版)》第五章并发和竞态的学习。 对并发的管理是操作系统编程中核心的问题之一。 并发产生竞态,竞态导致共享数据的非法访问。因为竞态是一种极端低可能性的事件,因此程式员往往会忽视竞态。但是在电脑世界中,百万分之一的事件可能没几秒就会发生,而其结果是灾难性的。一、并发及其管理 竞态通常是作为对资源的共享访问结果而产生的。在设计自己的驱动程式时,第一个转载 2012-05-11 14:47:20 · 314 阅读 · 0 评论 -
Linux设备程序中的并发控制
一、并发与竞态 并发指多个执行单元同时、并行被执行,而并发的执行单元对共享资源(全局变量,静态变量)的访问则容易导致竞态。 几种情景:1、对称多处理器(SMP)的多个CPU 2、单个CPU进程与抢占它的进程 3、中断与进程之间 访问共享资源区的代码区域称为临界区(critical sections).对临界区的保护方法:中断屏蔽,原子操作,自旋锁和原创 2012-05-29 09:49:28 · 471 阅读 · 0 评论 -
Linux设备驱动程式学习(9)-和硬件通信
Linux设备驱动程式学习(9)-和硬件通信 在学习有关I/O总线的内容时,最好先看看相关的知识:从PC总线到ARM的内部总线 I/O 端口和 I/O 内存每种外设都是通过读写寄存器来进行控制。 在硬件层,内存区和 I/O 区域没有概念上的区别: 他们都是通过向在地址总线和控制总线发出电平信号来进行访问,再通过数据总线读写数据。因为外设要和I/O总线匹配,而大部分流行的 I转载 2012-05-11 14:51:50 · 501 阅读 · 0 评论 -
Linux设备驱动程式学习(4)-高级字符驱动程式操作[(1)ioctl and llseek]
今天进入《Linux设备驱动程式(第3版)》第六章高级字符驱动程式操作的学习。一、ioctl大部分设备除了读写能力,还可进行超出简单的数据传输之外的操作,所以设备驱动也必须具备进行各种硬件控制操作的能力. 这些操作常常通过 ioctl 方法来支持,他有和用户空间版本不同的原型:int (*ioctl) (struct inode *inode, struct file *filp,转载 2012-05-11 14:48:37 · 410 阅读 · 0 评论 -
Linux设备驱动程序学习(15)-Linux设备模型(热插拔、mdev 与 firmware)
热插拔有 2 个不同角度来看待热插拔: 从内核角度看,热插拔是在硬件、内核和内核驱动之间的交互。 从用户角度看,热插拔是内核和用户空间之间,通过调用用户空间程序(如hotplug、udev 和 mdev)的交互。 当需要通知用户内核发生了某种热插拔事件时,内核才调用这个用户空间程序。现在的计算机系统,要求 Linux 内核能够在硬件从系统中增删时,可靠稳定地运行。这就对设备转载 2012-05-11 14:59:59 · 690 阅读 · 0 评论 -
·Linux设备驱动程序学习(12)-Linux设备模型(底层原理)
以《LDD3》的说法:Linux设备模型这部分内容可以认为是高级教材,对于多数程序作者来说是不必要的。但是我个人认为:对于一个嵌入式Linux的底层程序员来说,这部分内容是很重要的。以我学习的ARM9为例,有很多总线(如SPI、IIC、IIS等等)在Linux下已经被编写成了子系统,无需自己写驱动;而这些总线又不像PCI、USB等在《LDD3》上有教程,有时还要自己研究它的子系统构架,甚至要自己添转载 2012-05-11 14:57:27 · 459 阅读 · 0 评论 -
Linux设备驱动程式学习(6)-高级字符驱动程式操作[(3)设备文档的访问控制]
Linux设备驱动程式学习(6)-高级字符驱动程式操作[(3)设备文档的访问控制]提供访问控制对于一个设备节点来的可靠性来说有时是至关重要的。这部分的内容只是在open和release方法上做些修改,增加一些检查机制既可。 独享设备最生硬的访问控制方式是只允许一个设备一次被一个进程打开(独享),这是个设备驱动最简单的访问控制。实现十分简单,具体的代码看实验源码吧!模块程式链转载 2012-05-11 14:50:11 · 395 阅读 · 0 评论 -
写一个从/proc/devices 文件中获取设备号的脚本
使用awk工具可以从/proc/devices 文件中获取设备号,建立一个.sh的脚本文件加入脚本:module=xxxmajor=`awk "\\$2==\"$module\" {print \\$1}" /proc/devices`insmod xxx.komknod /dev/xxx c $major 0xxx为设备名原创 2012-05-28 21:19:44 · 1074 阅读 · 0 评论 -
linux cdev详解
一.前言以前对于cdev仅仅是知其然,而不知其所以然。在本文中,将深入理解cdev的架构以及具体的实现。二.真实的cdev2.1 设备号搞驱动的都应该知道的东西,在写gpio驱动时,往往会用到以下两个函数。alloc_chrdev_region --自动分配设备号register_chrdev_region --分配以设定的设备号。上面两个函数的调用很简单转载 2012-05-28 10:40:04 · 1045 阅读 · 0 评论 -
Linux驱动程序头文件
#include 是在linux-2.6.29/include/linux下面寻找源文件。#include 是在linux-2.6.29/arch/arm/include/asm下面寻找源文件。#include 是在linux-2.6.29/arch/arm/mach-s3c2410/include/mach下面寻找源文件。#include 在linux-2.6.31转载 2012-05-28 18:31:32 · 1020 阅读 · 0 评论 -
Linux设备驱动程式学习(8)-分配内存
Linux设备驱动程式学习(8)-分配内存内核为设备驱动提供了一个统一的内存管理接口,所以模块无需涉及分段和分页等问题。 我已在第一个scull模块中使用了 kmalloc 和 kfree 来分配和释放内存空间。 kmalloc 函数内幕kmalloc 是个功能强大且高速(除非被阻塞)的工具,所分配到的内存在物理内存中连续且保持原有的数据(不清零)。原型:#include linu转载 2012-05-11 14:51:08 · 338 阅读 · 0 评论 -
Linux设备驱动程式学习(10)-时间、延迟及延缓操作
度量时间差时钟中断由系统定时硬件以周期性的间隔产生,这个间隔由内核根据 HZ 值来设定,HZ 是个体系依赖的值,在 中定义或该文档包含的某个子平台相关文档中。作为通用的规则,即便假如知道 HZ 的值,在编程时应当不依赖这个特定值,而始终使用HZ。对于当前版本,我们应完全信任内核研发者,他们已选择了最适合的HZ值,最好保持 HZ 的默认值。 对用户空间,内核HZ几乎完全隐藏,用户转载 2012-05-11 14:52:18 · 681 阅读 · 0 评论 -
android wifi 移植记录
我用的是 Ralink 的网卡,所以 wifi 网卡的名字是 ra0, 在网上看了一些文章,要改很多地方。不就是个网卡名字问题吗? 我有 驱动源码, 就直接在源码里把名字改成 mlan0 就得了。在源码中找到注册网卡的 register_netdev 或者 register_netdevice 函数,直接在注册前把名字给它改咯。。。 strcpy( pNe转载 2012-05-16 10:38:51 · 371 阅读 · 0 评论 -
Android HAL hardware module分析 以GPS module为例
准备在QT210的android系统中实现GPS功能,程序已经写好了,也可以编译出gps.s5pc110.so的库,但是不知道上层怎么调用这个库,在GPS相关的Android.mk中也没有找到,很是纳闷。通过分析hardware module才知道是怎么回事,之前并没有详细的了解hardware module,现在简单的分析一下。HAL层的hardware module主要实现转载 2012-05-31 19:06:44 · 780 阅读 · 0 评论