- 博客(42)
- 资源 (4)
- 收藏
- 关注
转载 linux内核部件分析之——waitqueue与线程的阻塞
当你必须一个复杂的系统,协调系统的方方面面,灵活地支持各种机制和策略,即使很简单的问题也会变得很复杂。linux绝对就是这样一个复杂的系统。所以我们要理解它,尽量从原理的角度去理解事务的处理流程,尽量避免各种细枝末节的干扰,尽量规避那些足以压垮自己的庞然大物。(尽管细致末节和庞然大物很可能就是linux闪光的地方,但我们还是小心为上。)原理 现在我们来考虑linux中线程的阻
2012-08-31 14:52:19 5006
转载 linux内核部件分析之——设备驱动模型之class
前面看过了设备驱动模型中的bus、device、driver,这三种都是有迹可循的。其中bus代表实际的总线,device代表实际的设备和接口,而driver则对应存在的驱动。但本节要介绍的class,是设备类,完全是抽象出来的概念,没有对应的实体。所谓设备类,是指提供的用户接口相似的一类设备的集合,常见的设备类的有block、tty、input、usb等等。 class对应的代码
2012-08-31 14:51:11 9935
转载 linux内核组件之---设备驱动模型之device-driver
前面我们分析了device、driver、bus三种类型,主要是三者的注册与注销,在sysfs中的目录与属性文件创建等内容。本节就来详细分析下,在设备注册到总线上时,总线是如何为其寻找对应的驱动的;在驱动注册到总线上时,总线又是如何为其寻找对应的设备的。本节的实现代码集中在drivers/base/bus.c和drivers/base/dd.c中。先来回忆下,在device_reg
2012-08-31 14:43:52 1900
转载 linux内核组件分析之--设备驱动模型之bus
前面我们分析了设备驱动模型中的device和driver,device和driver本来是不相关的东西,只因为bus的存在,才被联系到了一起。本节就来看看设备驱动模型中起枢纽作用的bus。本节的头文件在include/linux/device.h和drivers/base/base.h,实现代码主要在bus.c中。因为在bus中有很多代码时为了device找到driver或者driver找到dev
2012-08-31 14:42:49 1434
转载 linux内核组件分析之---设备驱动模型之driver
上节我们分析设备驱动模型中的device,主要是drivers/base/core.c,可以说是代码量最大的一个文件。本节要分析的驱动driver,就要相对简单很多。原因也很简单,对于driver,我们能定义的公共部分实在不多,能再sysfs中表达的也很少。本节的分析将围绕drivers/base/driver.c,但头文件仍然是include/linux/device.h和drivers/bas
2012-08-31 14:41:49 1358
转载 linux内核部件之---设备驱动模型的基石kobject
之前我们分析了引用计数kref,总结了sysfs提供的API,并翻译了介绍kobject原理及用法的文档。应该说准备工作做得足够多,kobject的实现怎么都可以看懂了,甚至只需要总结下API就行了。可我还是决定把kobject的实现代码从头分析一遍。一是因为kobject的代码很重要,会在设备驱动模型代码中无数次被用到,如果不熟悉的话可以说是举步维艰。二是为了熟悉linux的编码风格,为以后分析
2012-08-31 14:38:57 1626
转载 linux内核部件之--记录生命周期的kref
kref是一个引用计数器,它被嵌套进其它的结构中,记录所嵌套结构的引用计数,并在计数清零时调用相应的清理函数。kref的原理和实现都非常简单,但要想用好却不容易,或者说kref被创建就是为了跟踪复杂情况下地结构引用销毁情况。所以这里先介绍kref的实现,再介绍其使用规则。kref的头文件在include/linux/kref.h,实现在lib/kref.c。闲话少说,上代码。s
2012-08-31 14:37:36 1302
转载 linux内核部件之---原子性操作atomic_t
在任何处理器平台下,都会有一些原子性操作,供操作系统使用,我们这里只讲x86下面的。在单处理器情况下,每条指令的执行都是原子性的,但在多处理器情况下,只有那些单独的读操作或写操作才是原子性的。为了弥补这一缺点,x86提供了附加的lock前缀,使带lock前缀的读修改写指令也能原子性执行。带lock前缀的指令在操作时会锁住总线,使自身的执行即使在多处理器间也是原子性执行的。xchg指令不带lock前
2012-08-31 14:36:32 3535
转载 linux内核部件--通用双向链表list
在linux内核中,有一种通用的双向循环链表,构成了各种队列的基础。链表的结构定义和相关函数均在include/linux/list.h中,下面就来全面的介绍这一链表的各种API。struct list_head { struct list_head *next, *prev; }; 这是链表的元素结构。因为是循环链表,表头和表中节点都是这一结构。有prev和
2012-08-31 14:35:15 1336
转载 linux内核部件--又见链表之klist
前面我们说到过list_head,这是linux中通用的链表形式,双向循环链表,功能强大,实现简单优雅。可如果您认为list_head就是链表的极致,应该在linux链表界一统天下,那可就错了。据我所知,linux内核代码中至少还有两种链表能占有一席之地。一种就是hlist,一种就是本节要介绍的klist。虽然三者不同,但hlist和klist都可以看成是从list_head中发展出来的,用于特殊
2012-08-31 14:32:53 3272
转载 superblock,file,dentry,inode的区别
1、superblock保存一个挂在的文件系统的相关信息(Stores information concerning a mounted filesystem. For disk-based filesystems, this object usually corresponds to a filesystem control block stored on disk.)2、inode
2012-08-30 17:13:59 1692
原创 linux设备驱动模型大剖析(2)-----受苦后难的孩纸们啊。
特 别 声 明 本系列文章bingqingsuimeng著作权所有,转载请注明出处 http://blog.csdn.net/bingqingsuimeng/ linux设备驱动交流:qq群:257970754 人生在世就是一种受苦受难的修行过程是吗?什么?你说不是?好吧,你是富二代。。 有人说中国人这一辈子,年轻的时候在奋斗,到老了积累了一身病才知道享受
2012-08-30 16:43:56 2597 2
转载 linux内核空间和用户空间的是怎样区别的,如何交互,如何从用户空间进入内核空间
linux驱动程序一般工作在内核空间,但也可以工作在用户空间。下面我们将详细解析,什么是内核空间,什么是用户空间,以及如何判断他们。 Linux简化了分段机制,使得虚拟地址与线性地址总是一致,因此,Linux的虚拟地址空间也为0~4G.Linux内核将这4G字节的空间分为两部分。将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为"内核空间".而将较
2012-08-30 12:55:45 40837 7
转载 linux热插拔之udev的使用方法
作者:刘旭晖 colorant@163.com 转载请注明出处http://blog.csdn.net/colorant/ Udev相关的文章很多,本文的主要目的不是提供一个完整的教学文档,对其使用,只是给出网上现有的主要资源。着重分析其基本工作原理以及在使用中遇到的一些README文档没有明确说明的问题。 1 基本概念udev文件系统是针对2.6
2012-08-30 11:58:31 10988
转载 linux下热插拔事件的产生是怎样通知到用户空间,kobject_uevent_env之uevent
1.kobject, ktype, ksetkobject代表sysfs中的目录。ktype代表kobject的类型,主要包含release函数和attr的读写函数。比如,所有的bus都有同一个bus_type;所有的class都有同一个class_type。kset包含了subsystem概念,kset本身也是一个kobject,所以里面包含了一个kobject对象。另外
2012-08-30 11:28:34 20799
转载 linux下热插拔事件的产生是怎样通知到用户空间,kobject_uevent_env之uevent_helper
本人CU博客中的文章,本来是希望CU给推荐到首页的,结果周五不知道CU博客出了啥问题,居然没什么更新。所以我干脆把再把它放到这里,因为话题涉及设备驱动模块自动加载,本版已经有同学问过这方面的问题。热插拔(hotplug,打这个词的时候我常常想到热干面)不一定非要指类似U盘那样的插入拔出,此处的热插拔广义上讲,是指一个设备加入系统,内核如何通知用户空间。举个简单的例子,如果你的电脑中有块PC
2012-08-30 11:02:51 11584 1
转载 热插拔时间从内核空间到用户空间的传递过程
将可移动设备连入系统时,系统的后台中会依次发生如下事件:l 内核检测到新硬件插入,然后分别通知hotplug和udev。前者用来装入相应的内核模块(如usb-storage),而后者用来在/dev中创建相应的设备节点(如/dev/sda1)。l udev创建了相应的设备节点之后,会将这一消息通知hal的守护程序(hald)。当然udev还得保
2012-08-29 22:45:39 2965
转载 S3c2440 I2C驱动与测试程序追踪交叉分析
注: 原创博文,转载请注明来自chenhui的博客.VMware虚拟机+Fedora10, 硬件平台TQ2440, 内核2.6.30.4最近学习linux I2C驱动, 用刘洪涛老师的测试程序测试内核自带的驱动, 打开调试语句dev_dbg后(具体参考我的另一篇博客),发现应用程序对应的驱动程序豁然开朗, 然后自己添加了一些dev_dbg后, 对于不理解的地方也有了一定的参
2012-08-29 15:43:39 2278
转载 i2c设备驱动实例分析-pca9541(下)
刚学习到i2c驱动这一块,在linux内核源码中(我用的是linux-2.6.38.6)有pca9541.c的驱动源码,所以我就拿该实例来学习i2c设备驱动开发。我在网上找了该设备的相关资料(主要是工作原理和datasheet),下面我把我的分析思路记录下来,作为我以后学习的参考资料。里面有许多我暂时不理解的地方,欢迎朋友们帮忙解决。谢谢!/*****************(1)头文件*
2012-08-29 15:32:25 4929
转载 i2c设备驱动实例分析-pca9541(上)
(一)PCA9541简介以及工作原理PCA9541是一款带I2C接口的多主选择器,可用于要求高可靠性的双主机系统中,当一个主机通信失败或者控制卡移出系统时,另外一个主机将发挥作用。PCA9541可以使两个I2C主设备在互不连接的情况下与同一个从设备连接,I2C总线的命令由主机发送,一次只有一个主机发送数据。如果一个主机不能正常工作或移出了系统,另一个主机可以在任意时刻控制从器件。 PC
2012-08-29 15:28:09 3447
转载 实例解析linux内核I2C体系结构(2)
四、在内核里写i2c设备驱动的两种方式前文介绍了利用/dev/i2c-0在应用层完成对i2c设备的操作,但很多时候我们还是习惯为i2c设备在内核层编写驱动程序。目前内核支持两种编写i2c驱动程序的方式。下面分别介绍这两种方式的实现。这里分别称这两种方式为“Adapter方式(LEGACY)”和“Probe方式(new style)”。(1) Adapter方式(LEGACY)
2012-08-29 14:49:21 910
转载 实例解析linux内核I2C体系结构(1)
一、概述谈到在linux系统下编写I2C驱动,目前主要有两种方式,一种是把I2C设备当作一个普通的字符设备来处理,另一种是利用linux I2C驱动体系结构来完成。下面比较下这两种驱动。第一种方法的好处(对应第二种方法的劣势)有: ● 思路比较直接,不需要花时间去了解linux内核中复杂的I2C子系统的操作方法。第一种方法问题(对应第二种方法的好处)有:
2012-08-29 14:28:19 1224
原创 linux设备驱动模型大剖析(1)-----底层阶级的程序猿
特 别 声 明 本系列文章bingqingsuimeng著作权所有,转载请注明出处 http://blog.csdn.net/bingqingsuimeng/ linux设备驱动交流:qq群:257970754 话说,东汉末年分三国,分不清对对错错。反正是我们看到了三足鼎立的大好场面。当年的手机行业又何尝不是呢?苹果作为“魏国”实力非比寻常啊,而江南
2012-08-29 11:40:50 4618 3
转载 在设备上开启telnet服务
来源:http://hi.baidu.com/shanyefeng/blog/item/1bba6cbf8fb0e70d18d81f78.html1.进入busybox源代码目录,选择telnet,telnetd.然后make;make install并制作ramdisk2.确保在ramdisk的sbin目录下存在inetd和telnetd3.在ramdisk中
2012-08-28 18:05:34 7451
转载 设备驱动的兼容性,例如cpu_to_le16函数
中断管理 在2.1的开发中,有些Linux内部被修改了。新核心提供了对内部锁的很好的管理;通过使用几个细粒度的锁,而不是全局的锁,竞争条件被避免了,这样也获得了更好的性能----特别是SMP配置下。更细的锁机制的一个结果是intr_count不再存在了。2.1.34抛弃了这个全局变量,而布尔函数in_interrupt可以取而代之(这个函数从2.1.30开始存在)。目前,in_inter
2012-08-27 14:12:02 15029
转载 linux用户空间下的原子操作
Atomic Operations“Where did atomic.h go?!?”..was my surprised reaction when I compiled one of my applications in Debian Etch for the first time. It compiled with no problems on Sarge and on Gent
2012-08-27 14:09:23 5102
转载 IO端口和IO内存
usb_bus_init来自drivers/usb/core/hcd.c,很显然,它就是初始化struct usb_bus结构体指针.而这个结构体变量hcd->self的内存已经在刚才为hcd申请内存的时候一并申请了. 688 /** 689 * usb_bus_init - shared initialization code 690 * @bu
2012-08-21 14:36:18 1629
转载 INIT_WORK和INIT_DELAYED_WORK详解
朋友,你相信,一只蝴蝶在北京拍拍翅膀,将使得纽约几个月后出现比狂风还厉害的龙卷风吗?看过那部经典的影片蝴蝶效应的朋友们一定会说,这不就是蝴蝶效应吗.没错.蝴蝶效应其实是混沌学理论中的一个概念.它是指对初始条件敏感性的一种依赖现象.蝴蝶效应的原因在于蝴蝶翅膀的运动,导致其身边的空气系统发生变化,并引起微弱气流的产生,而微弱气流的产生又会引起它四周空气或其它系统产生相应的变化,由此引起连锁反应,最终导
2012-08-21 14:34:49 31501 7
转载 ethtool 命令详解
ethtool 命令详解 命令描述:ethtool 是用于查询及设置网卡参数的命令。使用概要:ethtool ethx //查询ethx网口基本设置,其中 x 是对应网卡的编号,如eth0、eth1等等ethtool –h //显示ethtool的命令帮助(help)ethtool –i ethX //查询ethX网口
2012-08-14 09:51:36 1857
原创 详细透彻的分析DM9000网卡驱动程序(5)---开始战斗吧
内核版本:2.6.39.1时间:2011-11作者:bingqingsuimeng版权所有归作者,只供学习交流,若有其它用途请联系作者,转载请遵守IT人职业规范,请注明转载地址http://blog.csdn.net/bingqingsuimeng/linux设备驱动交流:qq群:257970754 上回书说到分配一个
2012-08-13 21:45:45 3293 2
转载 NAPI
NAPI 是 Linux 上采用的一种提高网络处理效率的技术,它的核心概念就是不采用中断的方式读取数据,而代之以首先采用中断唤醒数据接收的服务程序,然后 POLL 的方法来轮询数据。随着网络的接收速度的增加,NIC 触发的中断能做到不断减少,目前 NAPI 技术已经在网卡驱动层和网络层得到了广泛的应用,驱动层次上已经有 E1000 系列网卡,RTL8139 系列网卡,3c50X 系列等主流的网
2012-08-12 22:03:50 10390
原创 详细透彻的分析DM9000网卡驱动程序(4)---我是苦行僧
内核版本:2.6.39.1时间:2011-11作者:bingqingsuimeng版权所有归作者,只供学习交流,若有其它用途请联系作者,转载请遵守IT人职业规范,请注明转载地址http://blog.csdn.net/bingqingsuimeng/linux设备驱动交流:qq群:257970754 说实话,在这码半天代码,分析了半天,是了神马啊?是
2012-08-12 12:01:03 2466
转载 多核中percpu
What is percpu data? percpu data 是内核为smp系统中不同CPU之间的数据保护方式,系统为每个CPU维护一段私有的空间,在这段空间中的数据只有这个CPU能访问。但是这种方式不提供 对异步函数访问的保护,因此在同一个CPU上还要另外的同步原语的协作。arch/x86/kernel/vmlinux.lds中有:.....
2012-08-12 12:00:20 5126
转载 多核中percpu的数据分配
linux2.6 为了方便创建和操作每个CPU数据,引进了新的操作接口,percpu(),该接口简化了创建了操作每个CPU的数据。定义于 和 中1. 定义和声明每个CPU变量:[cpp] view plaincopyDEFINE_PER_CPU(type, name); 这语句为系统的每个CPU都创建了一个类型为
2012-08-12 11:58:15 1985
原创 详细透彻的分析DM9000网卡驱动程序(3)---谁是谁的谁?
内核版本:2.6.39.1时间:2011-11作者:bingqingsuimeng版权所有归作者,只供学习交流,若有其它用途请联系作者,转载请遵守IT人职业规范,请注明转载地址http://blog.csdn.net/bingqingsuimeng/linux设备驱动交流:qq群:257970754 以前,听过有一首歌叫做《谁是谁的谁》,好像还不
2012-08-12 11:15:22 6369 1
转载 Linux模式设计--数据大小,对齐函数相关
25. Linux模式设计25.1. 数据大小内核为了保持最大的兼容性和代码灵活性,不可能直接对某个数据类型定义它的大小范围。但是很多时候又要用到这些最大值最小值或者该数据类型可以表示的数据范围,比如初始化一个值为最大/小值,或者检验数据是否位于某个类型的范围内。include/linux/kernel.h#define USHORT_MA
2012-08-12 11:13:04 4516
转载 suspend和resume究竟做了什么?
LCD休眠时:先调用backlight驱动,关闭背光;然后调用LCDC驱动关掉SOC内部的LCDC的CLK输出,并保存LCDC内部寄存器数值到结构体;LCD唤醒时:恢复结构体LCDC数值到内部寄存器,然后调用LCDC驱动关掉SOC内部的LCDC的CLK输出;再调用backlight驱动,打开背光;
2012-08-10 17:48:22 1116
转载 使用Expat XML解析器的例子
2011-05-30 19:32:32| 分类: 默认分类 |字号 订阅工作原理: 1 . Initialize the XML parser with the xml_parser_create() function 通过xml_parser_create()函数安装XML解析器; 2. Create functions to use with the different e
2012-08-06 17:57:22 4385
转载 USB 3G网卡驱动流程
USB 3G网卡驱动流程简介首先介绍一下linux下的整体驱动模式:本文基于的linux kernel版本为2.6.36 (并且华为EM770W驱动,是由FriendlyARM公司定制的。所以该部分驱动可以在友善的官方网站上下载。其宏定义为CONFIG_MACH_MINI6410)总线,设备,驱动:三者是互相关联的,在总线上有设备列表,和驱动列表。当一个设备接入时,会在总线
2012-08-06 12:31:35 8777 1
转载 wifi
wifi应用程序代码位置packages/apps/Settings/src/com/android/settings/wifiWifi Frameworkframeworks/base/wifi/java/android/net/wififrameworks/base/services/java/com/android/serverWifi JNIframeworks
2012-08-01 16:24:21 1001
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人