linux 驱动开发
文章平均质量分 73
qq160816
这个作者很懒,什么都没留下…
展开
-
内核驱动反汇编调试
<br />arm-none-linux-gnueabi-objdump -D -S drivers/i2c/busses/i2c-designware.o > i2c-designware.s原创 2011-05-25 17:18:00 · 1363 阅读 · 0 评论 -
Linux下USB suspend/resume源码分析
<br />本文主要从自己开发的一个USB驱动的例子来深入讲解linux内核是如何支持USB设备的休眠和唤醒的, <br />最近我在为我们公司的一个模块写linux下的驱动, 其中之一就是要支持USB的休眠唤醒问题, 实际上linux内核对USB的这个功能的支持还是比较新的, 也就是最近几年的事.<br /> <br />一 打开/关闭USB suspend/resuem功能<br />要让linux支持usb suspend/resuem, 当然先要把内核中这个功能的代码编译进去咯, 即要在make转载 2011-05-30 14:51:00 · 958 阅读 · 0 评论 -
Request_irq参数dev_id的真正作用
Request_irq参数dev_id的真正作用 注:若对kernel中断处理模型不是很清楚的话(如:irqaction的作用)可以先参考一下这篇文档: http://blog.chinaunix.net/u2/60011/showart.php?id=1079281 这里主要讲request_irq的参数dev_id的作用,内容会涉及到少许上面文档提到的内容。 Request_irq的作转载 2011-06-07 16:40:00 · 662 阅读 · 0 评论 -
platform设备驱动全透析
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://21cnbao.blog.51cto.com/109393/3376091.1 platform总线、设备与驱动在Linux 2.6的设备驱动模型中,关心总线、设备和驱动这3个实体,总线将设备和驱动绑定。在系统每注册一个设备的时候,会寻找与之匹配的驱动;相反的,在系统每注册一个驱动的时候,会寻找与之匹配的设备,而匹配由总线完成。一个现实的Linux设备和驱动通常都需要挂接在一种总线上,对于本转载 2011-04-27 15:21:00 · 606 阅读 · 0 评论 -
有关MAC、PHY和MII
<br /> 有关MAC、PHY和MII<br />以太网(Ethernet)是一种计算机局域网组网技术,该技术基于IEEE制定的IEEE 802.3标准,它规定了包括物理层的连线、电信号和介质访问层协议的内容。以太网是当前应用最普遍的局域网技术。它很大程度上取代了其他局域网标准,如令牌环、FDDI和ARCNET。历经100M以太网在上世纪末的飞速发展后,目前千兆以太网甚至10G以太网正在国际组织和领导企业的推动下不断拓展应用范围。基于以太网的应用一定时期内是研究开发热点。<br />ETHERNET的接口转载 2011-04-29 14:59:00 · 672 阅读 · 0 评论 -
内核中的likely和unlikely宏定义
在内核代码中经常会看到unlikely和likely的踪影。他们实际上是定义在 linux/compiler.h 中的两个宏。 #define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) _转载 2011-08-10 14:31:02 · 466 阅读 · 0 评论 -
nfs:server is not responding,still trying 原因与解决方案
一.在做emac电源管理的时候,发现suspend和resume后有时会出现以下问题: nfs: server192.168.22.61 not responding; nfs: server192.168.22.61 not responding;原创 2011-10-10 13:01:37 · 1073 阅读 · 0 评论 -
Android在标准linux基础上对休眠唤醒的实现(一)(二)(三)【转】
本文转自:http://blog.csdn.net/lizhiguo0532/article/details/6453581 作者:lizhiguo0532 说明:1. Based on linux 2.6.32 and android 2.2,only support SDR(mem).2. 参考文章:http://2695477.blog.51cto.com/blog/26转载 2011-10-27 16:12:35 · 799 阅读 · 1 评论 -
Linux中的时钟概念
LINUX的时钟中断中涉及至二个全局变量一个是xtime,另一个则是jiffies。有一个与时间有关的时钟:实时时钟(RTC),这是一个硬件时钟,用来持久存放系统时间,系统关闭后靠主板上的微型电池保持计时。系统启动时,内核通过读取RTC来初始化WallTime,并存放在xtime变量中,即xtime是从cmos电路中取得的时间,一般是从某一历史时刻开始到现在的时间,也就是为了取得我们操转载 2011-08-10 14:53:21 · 791 阅读 · 0 评论 -
Linux设备模型 (1)
随着计算机的周边外设越来越丰富,设备管理已经成为现代操作系统的一项重要任务,这对于Linux来说也是同样的情况。每次Linux内核新版本的发布,都会伴随着一批设备驱动进入内核。在Linux内核里,驱动程序的代码量占有了相当大的比重。下图是我在网络上搜索到的一幅Linux内核代码量的统计图,对应的内核版本是2.6.29。我们可以很明显的看到,在Linux内核中驱动程序的比例已经非常高了。转载 2011-12-01 17:04:46 · 1050 阅读 · 0 评论 -
Linux设备模型 (2)
上一篇文章《Linux设备模型 (1)》主要介绍了Linux设备模型在用户空间的接口sysfs,用户通过这个接口可以一览内核设备的全貌。本文将从Linux内核的角度来看一看这个设备模型是如何构建的。在Linux内核里,kobject是组成Linux设备模型的基础,一个kobject对应sysfs里的一个目录。从面向对象的角度来说,kobject可以看作是所有设备对象的基类,因为C语言并没有面向转载 2011-12-01 17:14:01 · 1008 阅读 · 0 评论 -
Linux设备模型 (3)
在上文中,我们介绍到如何使用default attribute。Default attribute使用很方便,但不够灵活。比如上篇文章在Kobject一节中提到的那个例子,name和val这两个attribute使用同一个show/store函数来访问,如果attribute非常多,show/store函数里的分支就会很凌乱。为了解决这个问题,我们可以参考内核提供的kobj_attribute转载 2011-12-01 17:15:14 · 408 阅读 · 0 评论 -
Linux设备模型 (4)
《Linux设备模型 (2)》和《Linux设备模型 (3)》主要通过一些简单的实作介绍了kobject、kset、kobj_type、attribute等数据结构的用法,但这些实作并没有涉及到实际环境下的设备模型和sysfs。本文将以/sys下的module子目录为例,看看内核是如何构建sysfs这棵大树的。(注:本文的分析基于2.6.36内核) module的创建当module转载 2011-12-01 17:15:52 · 1044 阅读 · 0 评论 -
Linux内核里的“智能指针” (续)
在上一篇文章《Linux内核里的智能指针》里介绍了Linux内核如何使用引用计数来更加安全的管理内存,本文承接前篇,主要介绍几点使用kref时的注意事项。Linux内核文档kref.txt罗列了三条规则,我们在使用kref时必须遵守。规则一:If you make a non-temporary copy of a pointer, especially if it can be转载 2011-12-01 19:02:52 · 473 阅读 · 0 评论 -
Linux内核里的“智能指针”
众所周知,C/C++语言本身并不支持垃圾回收机制,虽然语言本身具有极高的灵活性,但是当遇到大型的项目时,繁琐的内存管理往往让人痛苦异常。现代的C/C++类库一般会提供智能指针来作为内存管理的折中方案,比如STL的auto_ptr,Boost的Smart_ptr库,QT的QPointer家族,甚至是基于C语言构建的GTK+也通过引用计数来实现类似的功能。Linux内核是如何解决这个问题呢?同样作为C转载 2011-12-01 19:02:02 · 492 阅读 · 0 评论 -
Linux GPIO驱动
GPIO的驱动主要就是读取GPIO口的状态,或者设置GPIO口的状态。就是这么简单,但是为了能够写好的这个驱动,在LINUX上作了一些软件上的分层。 为了让其它驱动可以方便的操作到GPIO,在LINUX里实现了对GPIO操作的统一接口,这个接口实则上就是GPIO驱动的框架,具体的实现文件为gpiolib.c在配置内核的时候,我们必须使用CONFIG_GENERIC_GPIO这个宏来支持GP转载 2011-12-12 19:28:30 · 766 阅读 · 0 评论 -
Linux驱动开发必看:详解神秘内核
http://blog.chinaunix.net/space.php?uid=17008081&do=blog&id=2838611 IT168 技术文档】在开始步入Linux设备驱动程序的神秘世界之前,让我们从驱动程序开发人员的角度看几个内核构成要素,熟悉一些基本的内核概念。我们将学习内核定时器、同步机制以及内存分配方法。不过,我们还是得从头开始这次探索之旅。因此,本转载 2011-12-12 19:25:47 · 883 阅读 · 0 评论 -
mutex and spin_lock_irq
mutex内用delay();效率低,应改为spin_lock_irq();比较好些。spin_lock_irq();内不能有sleep();原创 2011-12-28 20:26:21 · 491 阅读 · 0 评论 -
DDC及EDID内容简介
DDC及EDID 的定义1.DDC: Display Data Channel (显示数据通道)----指主机与显示设备的通讯方式。基于End-user 的即插即用功能的需求,VESA 定义了DDC 标准。包含DDC1/DDC2B/DDC2B+ 等方式。 DDC1是主机与显示设备单向通讯,以V-Sync为Clock。显示器不停的向主机发送EDID资料。 DDC2B是转载 2012-01-13 11:26:40 · 2273 阅读 · 0 评论 -
linux内核input子系统解析
Android、X windows、qt等众多应用对于linux系统中键盘、鼠标、触摸屏等输入设备的支持都通过、或越来越倾向于标准的input输入子系统。因为input子系统已经完成了字符驱动的文件操作接口,所以编写驱动的核心工作是完成input系统留出的接口,工作量不大。但如果你想更灵活的应用它,就需要好好的分析下input子系统了。一、input输入子系统框架下图是input输入子转载 2012-01-18 16:43:28 · 349 阅读 · 0 评论 -
中断处理程序里不能操作I2C操作接口
在内核里中断处理程序里不能操作I2C操作接口,因为操作I2C_transfer时transfer内部也会有中断产生的。所以中断套中断这样就会死锁。原创 2011-12-29 11:25:46 · 2247 阅读 · 0 评论 -
Linux中的spinlock和mutex 本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接:http://www.linuxidc.com/Linux/2011-
内核同步措施为了避免并发,防止竞争。内核提供了一组同步方法来提供对共享数据的保护。 我们的重点不是介绍这些方法的详细用法,而是强调为什么使用这些方法和它们之间的差别。Linux 使用的同步机制可以说从2.0到2.6以来不断发展完善。从最初的原子操作,到后来的信号量,从大内核锁到今天的自旋锁。这些同步机制的发展伴随 Linux从单处理器到对称多处理器的过度;伴随着从非抢占内核转载 2012-01-04 10:49:49 · 567 阅读 · 0 评论 -
tasklet和workqueue
一、中断处理的tasklet(小任务)机制中断服务程序一般都是在中断请求关闭的条件下执行的,以避免嵌套而使中断控制复杂化。但是,中断是一个随机事件,它随时会到来,如果关中断的时间太长,CPU就不能及时响应其他的中断请求,从而造成中断的丢失。因此,Linux内核的目标就是尽可能快的处理完中断请求,尽其所能把更多的处理向后推迟。例如,假设一个数据块已经达到了网线,当中断控制器接受到这个中断请求转载 2012-01-04 12:01:12 · 570 阅读 · 0 评论 -
平台驱动与用户层的接口
/sys的作用就不多说了,如何在/sys中增加个节点成为app通往驱动的接口,需要用到这么几个内核函数: 首先定义平台驱动指针:static struct platform_device *test_dev; int __init test_init(void){注册平台设备: test_dev = platform_device_regist转载 2012-02-24 16:40:22 · 684 阅读 · 0 评论 -
Linux的电源管理架构
转自: http://blog.csdn.net/droidphone/article/details/6664057 设备电源管理Copyright (c) 2010 Rafael J. Wysocki, Novell Inc.Copyright (c) 2010 Alan Sternstern@rowland.harvard.edu*************转载 2012-04-06 10:54:05 · 572 阅读 · 0 评论 -
arm反汇编方法
在内核里用命令:arm-none-linux-gnueabi-objdump -D ./kernel/sched.o > sched.S会把.o文件反汇编成.S文件,这样vi进到.S文件后就可以看见汇编代码了。原创 2012-05-04 14:47:45 · 1735 阅读 · 0 评论 -
Linux下Framebuffer驱动简介
最近接触了一些关于Linux下framebuffer方面的东西和LCD的framebuffer驱动,所以去了解了一些相关基础知识。为了避免其他人走我走过的弯路,所以就把我的一些很少的心得,和大家分享一下,希望对有些人有帮助。【什么是FrameBuffer】FrameBuffer直译就是,帧缓冲。Frame帧:你所看到的屏幕的图像,或者在一个窗口中的图像,就叫一帧。Buffer缓冲:转载 2012-09-01 17:27:44 · 1284 阅读 · 0 评论 -
Frame Buffer内核相关学习笔记
今天在看了一下frame buffer的内核相关的知道,边看边收拾,先贴出来,等问题解决完了,结构PAX270LCD控制器及Sharp的LCD,软硬结合的总结一下。Frame Buffer and LCD controllerdriver/video/console/fbcon.h(framebuffer控制台相关代码)定义了 struct display{},为底层控转载 2012-08-27 11:31:11 · 777 阅读 · 0 评论 -
Frame buffer分析 - fbcmap.c
91 int fb_alloc_cmap(struct fb_cmap *cmap, int len, int transp) 92 { 93 int size = len*sizeof(u16); 94 95 if (cmap->len != len) { 96 fb_dealloc_cmap(cmap); 97 if (!len)转载 2012-09-27 17:56:19 · 834 阅读 · 0 评论 -
Frame buffer分析 - fbmem.c
45 struct fb_info *registered_fb[FB_MAX] __read_mostly;这个是全局的变量,通过这个全局变量,在系统内可以随时获取需要的fb_info,具体的获取方法是通过比对 registered_fb[i]->fix.id来确定需要的fb_info, 示例代码如下 for (i = 0; i char *转载 2012-09-27 17:57:23 · 1355 阅读 · 0 评论 -
bayer, yuv, RGB转换方法
因为我的STVxxx USB camera输出格式是bayer格式,手头上只有YUVTOOLS这个查看工具,没法验证STVxxx在开发板上是否正常工作。网上找了很久也没找到格式转换工具,最后放弃了,觉得还是写个转换工具比较快。抄写了部分libv4lconvert的代码, 我只验证了V4L2_PIX_FMT_SGBRG8到V4L2_PIX_FMT_YUV420的转换。转载 2012-09-27 18:03:59 · 1275 阅读 · 0 评论 -
framebuffer 一些基本知识
Horizontal回扫和Vertical回扫是CRT引入的概念,电子束从左向右画水平线,回到下一行行首继续下一行扫描,直到屏幕最下一行,然后回到屏幕上方继续下一帧扫描。水平回扫:电子束从上一行尾移动到下一行起始点需要的时间帧回扫:电子束从屏幕下方移动到屏幕上方所需的时间 CRT的刷新屏率是怎么计算的:假定显卡的dotclock是28.37516MHZ转载 2012-09-27 18:05:46 · 571 阅读 · 0 评论 -
Frame buffer分析 - fb_sys_fops.c fbsysfs.c
fb_sys_fops.c这个文件实现了两个函数fb_sys_read和fb_sys_write,同fbmem.c中fb_read和fb_write的区别就在与对screen_base的访问方式不同,fb_sys_read和fb_sys_write完全是对内存的直接访问,而fb_read和fb_write 要通过io操作来访问fb_sys_*和fb_*函数体的其他部分都非常相似转载 2012-09-27 17:52:34 · 1126 阅读 · 0 评论 -
应用层捕获uevent事件
device_add函数最终会调用kobject_event_env函数,如果event_helper存在的话,那么会调用这个函数 event_helper可以通过如下方法设置 echo /your_helper_path/your_helper_cmd > /proc/sys/kernel/hotplug 在嵌入式中这个event_helper是mdev,当然你可转载 2012-09-27 18:06:53 · 1418 阅读 · 0 评论 -
Frame buffer分析 - fbcvt.c modedb.c
参照Documentation/fb/modedb.txtCVT: Coordinated Video TimingsFrom the VESA(TM) Website: "The purpose of CVT is to provide a method for generating a consistent and coordinated set转载 2012-09-27 17:51:46 · 1141 阅读 · 0 评论 -
s-video CVBS接口 区别
复合视频信号接口(CVBS)其传输的是复合视频信号,可用一根或一组普通的音视频线传输,其中黄色的为视频信号,白色的为左声道音频信号,红色的为右声道音频信号S端子由于复合视频信号(CVBS)是将亮度和色度信号采用频谱间置方法复合在一起,会导致亮,色的串扰以及清晰度降低等问题。S端子将亮度信号Y和色度信号C分开传输,这样可以确保亮度信号不受色度信号的干扰,所以用S端转载 2012-09-27 17:59:30 · 2086 阅读 · 0 评论 -
YPbPr 和 YCbCr的区别
这几天在做分量视频输入,涉及分量视频表示,接触到YPbPr和YCbCr的概念,发现不光自己的项目上,对这两个概念错乱,就是网上也充斥着大量错误的说法。分量接口有两种名称YPbPr和YCbCr,这是两个完全不同的概念,YCbCr概念早于YPbPr。历史早期DVD是隔行显示的,使用YUV(YCbCr)色彩空间进行数据存储和传输,相比于RGB的好处是减少存储空间和数据传输带宽转载 2012-09-27 18:01:16 · 1224 阅读 · 0 评论 -
揭开linux内核中container_of的神秘面纱
作者:程姚根,华清远见嵌入式学院讲师。在linux 内核中有一个大名鼎鼎的宏container_of(),这个宏是用来干嘛的呢?我们先来看看它在内核中是怎样定义的。呵呵,乍一看不知道是什么东东。我们先来分析一下container_of(ptr,type,member),这里面有ptr,type,member分别代表指针、类型、成员。看一个例子:Struct转载 2012-09-13 11:37:44 · 566 阅读 · 0 评论 -
Android display架构分析(一)
http://hi.baidu.com/leowenj/blog/item/429c2dd6ac1480c851da4b95.html高通7系列硬件架构分析如上图,高通7系列 Display的硬件部分主要由下面几个部分组成:A、MDP高通MSM7200A内部模块,主要负责显示数据的转换和部分图像处理功能理,如YUV转RGB,放大缩小、旋转等。MDP内部的MD转载 2012-09-17 10:37:36 · 773 阅读 · 0 评论 -
驱动中platform resource 和 porbe 之间的关系
1. platform_device 会包含platform_data 和 resource定义:一般platform device信息,会定义在 arch/arm/mach-xxx/board-xxx.c 中。如这里的sarac模块,被定义在arch/arm/mach-cartesio/core-sta2065.c中[cpp] view plaincopy转载 2012-12-29 12:13:22 · 1103 阅读 · 0 评论