![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux driver
文章平均质量分 91
rain0993
这个作者很懒,什么都没留下…
展开
-
V4L2核心框架分析
驱动的结构------------------------------------------------------1)一个为设备实例定义的,并且包含设备状态信息的结构;2)一种初始化和命令子设备(sub-devices)的方式;3)创建V4L2设备节点(/dev/videoX, /dev/vbiX, /dev/radioX and /dev/vtxX)并且 keeping原创 2016-09-20 10:25:39 · 2027 阅读 · 1 评论 -
input 子系统浅析
Input子系统内核重要结构体解析:struct input_dev { const char *name; const char *phys; const char *uniq; struct input_id id; unsigned long propbit[BITS_TO_LO原创 2013-03-27 18:35:51 · 2011 阅读 · 0 评论 -
open函数的流程
1. 引言 从事Linux环境工作2年有余,一直懵懵懂懂,1年前拜读了《莱昂氏UNIX源代码分析》一书,感觉自己的学习道路漫漫且修远。最近受chinaunix的精华文帖启发,拟将近来的部分内核调用分析笔记拿出来与各前辈先进共同探讨学习,以壮个人学习之路。 本部分主要讲述的是文件I/O操作的2.6.11内核版本实现,包括了主要的数据结构、宏定义和函数流程转载 2013-03-27 18:33:41 · 1108 阅读 · 0 评论 -
linux内核可装载模块(lkm)传参机制 module_param
对于如何向模块传递参数,Linux kernel 提供了一个简单的框架。其允许驱动程序声明参数,并且用户在系统启动或模块装载时为参数指定相应值,在驱动程序里,参数的用法如同全局变量。 使用下面的宏时需要包含头文件。 通过宏module_param()定义一个模块参数: module_param(name, type, perm); name既是用户看到的参数名,又是模块内接转载 2013-03-27 18:27:23 · 1124 阅读 · 0 评论 -
gpio_request
今天再次学习SD卡驱动,遇到pgio_request这个函数,始终不知道其什么意思,看了几遍源代码才有了点感觉。现将其关键部分再此说明一下,以备自己以后复习,或是路客参考。其原型为 int gpio_request(unsigned gpio, const char *label)先说说其参数,gpio则为你要申请的哪一个管脚,label则是为其取一个名字。其具体实现如下:int gp转载 2013-03-02 21:27:42 · 648 阅读 · 0 评论 -
工作队列分析 queue_work
一、用法 struct cpu_workqueue_struct { spinlock_t lock; long remove_sequence; /* Least-recently added (next to run) */ long insert_sequence; /* Next to add */ struct list_head worklist;转载 2013-03-02 21:26:52 · 1124 阅读 · 0 评论 -
reqeust_firmware
作为一个驱动作者, 你可能发现你面对一个设备必须在它能支持工作前下载固件到它里面. 硬件市场的许多地方的竞争是如此得强烈, 以至于甚至一点用作设备控制固件的 EEPROM 的成本制造商都不愿意花费. 因此固件发布在随硬件一起的一张 CD 上, 并且操作系统负责传送固件到设备自身.你可能想解决固件问题使用这样的一个声明:static char my_firmware[] = { 0x34转载 2013-03-02 21:25:30 · 413 阅读 · 0 评论 -
Linux内核中的jiffies及其作用介绍及jiffies等相关函数详解
在LINUX的时钟中断中涉及至二个全局变量一个是xtime,它是timeval数据结构变量,另一个则是jiffies,首先看timeval结构struct timeval{ time_t tv_sec; /***second***/ susecond_t tv_usec;/***microsecond***/}到底microsecond是毫秒还是微秒??转载 2013-03-02 21:24:18 · 533 阅读 · 0 评论 -
init.rc语法
1.init时设置设备权限init可执行文件是Android系统运行的第一个用户空间的程序,它以守护进程的方式运行2. init.rc中的内容在Android中使用启动脚本init.rc,init启动脚本路径:system/core/rootdir/init.rc可以在系统的初始化过程中进行一些简单的初始化操作,init.rc脚本被直接安装到目标系统的根文件系统中,被ini原创 2013-03-02 21:26:10 · 1503 阅读 · 0 评论 -
proc sys文件系统对比
一、proc文件系统proc文件系统常常被放置于Linux系统的/proc目录下,常常用于查看有关硬件、进程的状态,可以通过操作proc文件系统进行控制工作在include/proc_fs.h中,定义创建proc文件系统的函数extern struct proc_dir_entry *create_proc_entry(const char *name,mode_t mode,st转载 2013-03-02 21:24:54 · 1671 阅读 · 0 评论 -
_IO, _IOR, _IOW, _IOWR 宏的用法与解析
今天在写字符驱动验证程序的时候要用到ioctl函数,其中有一个cmd参数,搞了半天也不了解是什么意思,那个cmd还有什么命令码了什么的,还好google下,觉得这篇文章写的不错,就转来看看:在驱动程序里, ioctl() 函数上传送的变量 cmd 是应用程序用于区别设备驱动程序请求处理内容的值。cmd除了可区别数字外,还包含有助于处理的几种相应信息。 cmd的大小为 32位,共分 4 个域:原创 2013-03-05 11:11:35 · 847 阅读 · 0 评论 -
Linux设备驱动之——I2C总线
2 I2C子系统2.1 LinuxI2C子系统架构在内核中已经提供I2C子系统,所以在做I2C驱动之前,就必须要熟悉该子系统。2.2 三大组成部分1、I2C核心(i2c-core)I2C核心提供了I2C总线驱动和设备驱动的注册、注销方法,I2C通信方法(algorithm)上层的、与具体适配器无关的代码以及探测设备、检测设备地址的上层代码等。 2、I2C总线驱原创 2013-01-09 16:42:37 · 1025 阅读 · 2 评论 -
i2c相关知识
在内核中有两种方式的i2c设备驱动的编写方法,一种legacy方式,一种是newstyle方式。韦东山视频和宋宝华书籍里讲解的都是legacy方式,但是在新版本内核中,legacy方式的i2c设备驱动已经编译不过去了,因为几个主要的内核函数都已经不存在了,即内核不再支持legacy方式的i2c设备驱动。下面讲解下newstyle方式的i2c设备驱动。一>定义并填充i2c_driver:转载 2013-03-27 18:30:59 · 714 阅读 · 0 评论 -
binder驱动之我见
Binder驱动之我见一.介绍接种常见的跨进程通信机制1. 共享内存(share memory)2. socket3. 命名管道(named pipe)4. 消息队列(message queue)5. binder(查看这几种之间的特性与联系)二.binder的特性三.Binder的原创 2013-03-27 18:36:19 · 1387 阅读 · 0 评论 -
platform设备驱动
1.1 platform总线、设备与驱动在Linux 2.6的设备驱动模型中,关心总线、设备和驱动这3个实体,总线将设备和驱动绑定。在系统每注册一个设备的时候,会寻找与之匹配的驱动;相反的,在系统每注册一个驱动的时候,会寻找与之匹配的设备,而匹配由总线完成。一个现实的Linux设备和驱动通常都需要挂接在一种总线上,对于本身依附于PCI、USB、I2 C、SPI等的设备而言,这自然不是问题,转载 2013-03-27 18:23:57 · 715 阅读 · 0 评论 -
camera 笔记
高通新的camera驱动架构设计发生了一些变化,借用互联网上常用的一种结构,大致的原理如此:将camera的所有功能划分为不同的模块,让模块自己来决定自己的事情(高内聚,低耦合),模块需要有统一的接口和格式。模块中有端口,通过端口把模块连接起来,又把模块挂在总线上。每一个端口的连接就是一个流,把这些流用pipeline来管理。每次启动一个camera就创建一个会话,由这个会话来管理此camera的原创 2016-09-17 11:25:13 · 4307 阅读 · 0 评论 -
Linux中断处理驱动程序编写
本章节我们一起来探讨一下Linux中的中断中断与定时器:中断的概念:指CPU在执行过程中,出现某些突发事件急待处理,CPU暂停执行当前程序,转去处理突发事件,处理完后CPU又返回原程序被中断的位置继续执行中断的分类:内部中断和外部中断内部中断:中断源来自CPU内部(软件中断指令、溢出、触发错误等)外部中断:中断源来自CPU外部,由外设提出请求屏蔽转载 2013-09-10 01:20:07 · 848 阅读 · 0 评论 -
IS_ERR
像struct class *cls = class_create();这种语句,其中返回的指针值并不行kmalloc一样这么简单,只判断是否为NULL就可以了,内核是返回其错误值。那么我怎么来判断它呢,总不能用if()来将每个错误例出来吧,这里我们的IS_ERR()宏就发挥作用了。先看源代码,再讲原理,看看内核中的巧妙设计思路。/* include/linux/err.h *转载 2013-09-10 01:15:28 · 749 阅读 · 0 评论 -
copy_from_user 详解
copy_from_user函数的目的是从用户空间拷贝数据到内核空间,失败返回没有被拷贝的字节数,成功返回0.这么简单的一个函数却含盖了许多关于内核方面的知识,比如内核关于异常出错的处理.从用户空间拷贝数据到内核中时必须很小心,假如用户空间的数据地址是个非法的地址,或是超出用户空间的范围,或是那些地址还没有被映射到,都可能对内核产生很大的影响,如oops,或被造成系统安全的影响.所以转载 2013-09-10 01:21:38 · 1615 阅读 · 0 评论 -
字符设备 register_chrdev_region()、alloc_chrdev_region() 和 register_chrdev()
1. 字符设备结构体 内核中所有已分配的字符设备编号都记录在一个名为 chrdevs 散列表里。该散列表中的每一个元素是一个 char_device_struct 结构,它的定义如下: static struct char_device_struct { struct char_device_struct *next; // 指向散列冲突链表中的下一转载 2013-09-10 01:18:12 · 751 阅读 · 0 评论 -
linux内核cdev_init系列函数(字符设备的注册)
内核中每个字符设备都对应一个 cdev 结构的变量,下面是它的定义:linux-2.6.22/include/linux/cdev.hstruct cdev { struct kobject kobj; // 每个 cdev 都是一个 kobject struct module *owner; // 指向实现驱动的模块 const转载 2013-09-10 01:14:51 · 802 阅读 · 0 评论 -
wakelock
Wake lock - wakelock在android的电源管理系统中扮演一个核心的角色,wakelock是一种锁的机制, 只要有task拿着这个锁, 系统就无法进入休眠, 可以被用户态进程和内核线程获得。这个锁可以是有超时的或者是没有超时的, 超时的锁会在时间过去以后自动解锁。如果没有锁了或者超时了, 内核就会启动标准linux的那套休眠机制机制来进入休眠。 wakelock在转载 2013-09-10 01:15:21 · 805 阅读 · 0 评论 -
Linux进程管理之进程的终止
内核源码:linux-2.6.38.8.tar.bz2 目标平台:ARM体系结构 进程终止时,一般是调用exit库函数(无论是程序员显式调用还是编译器自动地把exit库函数插入到main函数的最后一条语句之后)来释放进程所拥有的资源。 [cpp] view plaincopy$ man 3 exit转载 2013-09-10 01:13:21 · 2087 阅读 · 0 评论 -
gpio_request .
今天再次学习SD卡驱动,遇到pgio_request这个函数,始终不知道其什么意思,看了几遍源代码才有了点感觉。现将其关键部分再此说明一下,以备自己以后复习,或是路客参考。其原型为 int gpio_request(unsigned gpio, const char *label)先说说其参数,gpio则为你要申请的哪一个管脚,label则是为其取一个名字。其具体实现如下:int gp转载 2013-05-06 09:57:22 · 1033 阅读 · 0 评论 -
open函数的流程
1. 引言 从事Linux环境工作2年有余,一直懵懵懂懂,1年前拜读了《莱昂氏UNIX源代码分析》一书,感觉自己的学习道路漫漫且修远。最近受chinaunix的精华文帖启发,拟将近来的部分内核调用分析笔记拿出来与各前辈先进共同探讨学习,以壮个人学习之路。 本部分主要讲述的是文件I/O操作的2.6.11内核版本实现,包括了主要的数据结构、宏定义和函数流程转载 2013-05-06 09:49:32 · 2001 阅读 · 0 评论 -
ioctl
头文件:#include 功 能: 控制I/O设备 ,提供了一种获得设备信息或设备控制参数的手段。原型:int ioctl(int fd, ind cmd, …);返回值:成功为0,出错为-1其中fd就是用户程序打开设备时使用open函数返回的文件标示符,cmd就是用户程序对设备的控制命令,至于后面的省略号,那是一些补充参数,一般最多一个,有或没有是和cmd的意义相关的。原创 2013-04-27 10:06:41 · 1024 阅读 · 0 评论 -
Linux设备驱动之——PCI 总线
PCI总线概述 随着通用处理器和嵌入式技术的迅猛发展,越来越多的电子设备需要由处理器控制。目前大多数CPU和外部设备都会提供PCI总线的接口,PCI总线已成为计算机系统中一种应用广泛、通用的总线标准[1]。Linux因其开放源代码以及稳定的性能,越来越受到广大用户青睐。同时,基于Linux内核的嵌入式操作系统应用势头强劲,开发基于Li原创 2013-01-07 22:05:33 · 750 阅读 · 0 评论 -
linux 设备驱动
设备驱动最通俗的解释就是“驱使硬件设备行动“。操作系统是通过各种驱动程序来驾驭硬件设备的,它为用户屏蔽了各种各样的设备,驱动硬件是操作系统最基本的功能,并提供统一的操作方式。系统调用是操作系统内核和应用程序之间的接口,设备驱动程序是操作系统内核和机器硬件之间的接口。设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件, 应用程序可以象操作普通文件一样对硬件设备进原创 2013-01-07 22:01:18 · 468 阅读 · 0 评论 -
Linux设备驱动模型学习之基础篇--Kobject.txt翻译
----------------------------------------------------------------------------------------------------------------------------------------------------------本帖翻译了Linux2.6.29的Kobject.txt文档,由于英文水平不好,所以很多原创 2013-01-04 10:38:32 · 594 阅读 · 0 评论 -
Linux设备驱动模型之上层容器
记得刚工作的时候,当时为了查证一个I2C的问题,硬着头皮跟了一下Linux下i2c总线的驱动代码,两个字:吐血。主要是跟着跟着就跟到了Linux设备驱动模型的核心里去了,这里面数据结构复杂,函数调用的关系跟着跟着就不知道哪对哪了。归根结底,没仔细阅读过Linux设备驱动模型的核心代码,我想只要理解了这部分内容,上层的一些总线驱动比如i2c、spi、platform等等都将会变得简单。于是,狠下心来原创 2013-01-04 10:35:13 · 492 阅读 · 0 评论 -
linux内核input子系统解析
作者:刘洪涛,华清远见嵌入式学院讲师。 Android、X windows、qt等众多应用对于linux系统中键盘、鼠标、触摸屏等输入设备的支持都通过、或越来越倾向于标准的input输入子系统。 因为input子系统已经完成了字符驱动的文件操作接口,所以编写驱动的核心工作是完成input系统留出的接口,工作量不大。但如果你想更灵活的应用它,就需要好好的分析下input子系原创 2013-01-04 10:32:16 · 471 阅读 · 0 评论 -
i2c驱动之设备模型建立
一:设备模型建立流程图 二:重要函数分析(1)新适配器加入内核: int i2c_add_numbered_adapter(struct i2c_adapter *adap){ int id; int status; if (adap->nr & ~MAX_ID_MASK) return -EINVAL;re原创 2013-01-04 10:28:35 · 547 阅读 · 0 评论 -
我对linux理解之i2c
i2c设备是非常普遍的一种设备,我们现在开始i2c子系统的分析。我们先从注册开始:static const struct i2c_device_id IT7260_ts_id[] = { { IT7260_I2C_NAME, 0 }, { } };static struct i2c_driver IT7260_ts_driver = { .原创 2013-01-04 10:26:14 · 1501 阅读 · 1 评论 -
wakelock 详解
Wake lock - wakelock在android的电源管理系统中扮演一个核心的角色,wakelock是一种锁的机制, 只要有task拿着这个锁, 系统就无法进入休眠, 可以被用户态进程和内核线程获得。这个锁可以是有超时的或者是没有超时的, 超时的锁会在时间过去以后自动解锁。如果没有锁了或者超时了, 内核就会启动标准linux的那套休眠机制机制来进入休眠。 wakelock在andr原创 2013-01-03 20:45:05 · 1415 阅读 · 0 评论 -
闲聊linux中的input设备
用过linux的哥们都知道,linux所有的设备都是以文件的形式实现的,要访问一个设备,我们只需要以open、read、write的形式对设备的进行操作就可以了。在linux系统的/dev目录下,罗列了当前系统支持的所有设备。运行 ls /dev一下,着实吓了一大跳,[root@localhost ~]# ls /devadsp full midi原创 2013-01-04 10:31:37 · 1398 阅读 · 0 评论 -
设备驱动外传 - 虚拟总线和platform device
1. 总论2. 系统初始化 platform device3. 驱动程序使用 platform device 1. 总论Linux-2.6.11引入了设备模型的概念,将大部分设备驱动挂载到虚拟总线上。其目的在于:1) 提供友好的用户接口,用户可以在sys/bus/platform/下找到相应的驱动和设备。2) 更有利于电源管理。 2原创 2013-01-04 10:29:56 · 636 阅读 · 0 评论 -
linux设备和驱动加载的先后顺序
Linux驱动先注册总线,总线上可以先挂device,也可以先挂driver,那么究竟怎么控制先后的顺序呢。Linux系统使用两种方式去加载系统中的模块:动态和静态。静态加载:将所有模块的程序编译到Linux内核中,由do_initcall函数加载核心进程(/init/main.c)kernel_inità do_basic_setup()àdo_initcalls()该函数中会将在_原创 2013-01-03 17:20:23 · 864 阅读 · 0 评论 -
sysfs文件系统学习
为了更好地了解kobject的层次关系,有必要了解一下这种层次关系的表现机制:sysfs。本文简单地学习了一下sysfs,大部分内容来自内核文档sysfs.txt。好了,开始我们的学习之旅,呵呵。 何为sysfs sysfs是一种基于ram的文件系统,它提供了一种用于向用户空间展现内核空间里的对象、属性和链接。sysfs与kobject层次紧密相连,它将kobject原创 2013-01-04 10:36:40 · 421 阅读 · 0 评论 -
i2c驱动调试经验
把一个i2c驱动从2.6.21升级到2.6.39 上网查到一篇帖子,讲了驱动分为i2c总线,i2c设备,总线驱动做实际的总线读写操作,设备驱动实现针对不同设备操作。先找一篇帖子看看整体架构,再看代码,理解效果不错,这招是跟老猫学的。又查到一篇帖子,讲了从老版本i2c驱动,升级到新版本,需要做哪些变更,是翻译的内核文档。 照做,但是i2c设备驱动的probe原创 2013-01-04 10:30:29 · 1193 阅读 · 0 评论 -
基本的数据结构学习笔记:kref
本文简单介绍了设备驱动模型中最最简单的一个数据结构:kref,它作为内核中最基本的引用计数而存在。首先直观地介绍该数据结构及操作它的一些方法,然后再介绍其具体的用法。参考:kref.h kref.c kref.txt一、kref及操作kref的方法struct kref { atomic_t refcount;};可以看到kref结构体的成员只有一个原子变量refcou原创 2013-01-04 10:39:03 · 2069 阅读 · 1 评论