摘要: 1. I2C 协议1.1 I2C总线工作原理 I2C总线是由数据线SDA和时钟SCL构成的串行总线,各种被控制器件均并联在这条总线上,每个器件都有一个唯一的地址识别,可以作为总线上的一个发送器件或接收器件(具体由器件的功能决定),I2C总线的接口电路结构如图1所示。1.2 I2C总线的几种信号状态 1. 空闲状态:SDA和SCL都为高电平。 2. 开始条件(S):SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。 3. 结束条件(P):SCL为低电平时,SDA由低电平向高电平跳变,结束传送数据。 4. 数据有效:在SCL的高电平期间, SDA保持稳定,数据有效。SDA的改变只能发生 阅读全文
posted @ 2010-12-24 17:39 天不会黑 阅读(709) 评论(0) 推荐(0) 编辑
摘要: start_kernel() [init/main.c]----- setup_arch(&command_line)[ arch/arm/kernel/setup.c ] ----- mdesc =setup_machine(machine_arch_type) [ arch/arm/kernel/setup.c ]---- list = lookup_machine_type(nr)[ arch/arm/kernel/setup.c ] ---- return struct machine_desc.内核在启动的时候就是最先运行start_kernel() ,然后她就会调用体系结构 阅读全文
posted @ 2010-12-24 17:38 天不会黑 阅读(621) 评论(1) 推荐(0) 编辑
摘要: Kobject结构定义为:struct kobject {char * k_name; 指向设备名称的指针char name[KOBJ_NAME_LEN]; 设备名称struct kref kref; 对象引用计数struct list_head entry; 挂接到所在kset中去的单元struct kobject * parent; 指向父对象的指针struct kset * kset; 所属kset的指针struct kobj_type * ktype; 指向其对象类型描述符的指针struct dentry * dentry; sysfs文件系统中与该对象对应的文件节点路径指 阅读全文
posted @ 2010-12-24 17:38 天不会黑 阅读(1247) 评论(0) 推荐(0) 编辑
摘要: 目录: /proc --- 一个虚拟文件系统 加载 proc 文件系统 察看 /proc 的文件 得到有用的系统/内核信息 有关运行中的进程的信息 通过 /proc 与内核交互 结论 参考文献 摘要: Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。尽管在各种硬件平台上的 Linux 系统的 /proc 文件系统的基本概念都是相同的,但本文只讨论基于 intel x86 架构的 Linux /proc 文件系统。 _________________ _________________ _________________一./proc -- 阅读全文
posted @ 2010-12-24 17:37 天不会黑 阅读(513) 评论(0) 推荐(0) 编辑
摘要: 2.1 Linux系统I2C驱动的层次结构Linux系统对I2C设备具有很好的支持,Linux系统下的I2C驱动程序从逻辑上可以分为3个部分:1. I2C总线的驱动 I2C core :实现对I2C总线、I2C adapter及I2C driver的管理。2. I2C控制器的驱动 I2C adapter :针对不同类型的I2C控制器 ,实现对I2C总线访问的具体方法。3. I2C设备的驱动 I2C driver :针对特定的I2C设备,实现具体的功能,包括read, write以及ioctl等对用户层操作的接口。这三个部分的层次关系如图3和图4所示。2.2 I2C 总线驱动 I2C core 阅读全文
posted @ 2010-12-24 17:36 天不会黑 阅读(1209) 评论(0) 推荐(0) 编辑
摘要: 像你写C程序需要包含C库的头文件那样,Linux内核编程也需要包含Kernel头文件,大多的Linux驱动程序需要包含下面三个头文件:#include linux/init.h#include linux/module.h#include linux/kernel.h其中,init.h 定义了驱动的初始化和退出相关的函数,kernel.h 定义了经常用到的函数原型及宏定义,module.h 定义了内核模块相关的函数、变量及宏。 几乎每个linux驱动都有个module_init(与module_exit的定义在Init.h (\include\linux)中)。没错,驱动的加载就 阅读全文
posted @ 2010-12-24 17:35 天不会黑 阅读(655) 评论(0) 推荐(0) 编辑
摘要: 一、概述谈到在linux系统下编写I2C驱动,目前主要有两种方式,一种是把I2C设备当作一个普通的字符设备来处理,另一种是利用linux I2C驱动体系结构来完成。下面比较下这两种驱动。第一种方法的好处(对应第二种方法的劣势)有: ● 思路比较直接,不需要花时间去了解linux内核中复杂的I2C子系统的操作方法。第一种方法问题(对应第二种方法的好处)有: ● 要求工程师不仅要对I2C设备的操作熟悉,而且要熟悉I2C的适配器操作; ● 要求工程师对I2C的设备器及I2C的设备操作方法都比较熟悉,最重要的是写出的程序可移植性差; ● 对内核的资源无法直接使用。因为内核提供的所有I2C设备器及设备驱 阅读全文
posted @ 2010-12-24 17:35 天不会黑 阅读(1378) 评论(0) 推荐(0) 编辑
摘要: 之一:bus_type 总线是处理器和一个或多个设备之间的通道,在设备模型中,所有的设备都通过总线相连,甚至是内部的虚拟"platform"总线。可以通过ls -l /sys/bus看到系统加载的所有总线。drwxr-xr-x root root 1970-01-01 00:02 platformdrwxr-xr-x root root 1970-01-01 00:02 spidrwxr-xr-x root root 1970-01-01 00:02 scsidrwxr-xr-x root root 1970-01-01 00:02 usbdrwxr-xr-x root root 1970-0 阅读全文
posted @ 2010-12-24 17:34 天不会黑 阅读(3834) 评论(0) 推荐(0) 编辑
摘要: (1)---块驱动中相关的结构体及其操作1.字符设备与块设备IO操做的区别1)块设备只能以块为单位接收输入返回输出,而字符设备则以byte为单位.大多数设备是字符设备,他们不需要缓冲并且不以固定块大小进行操作.2)块设备对于IO请求有对应的缓冲区,所以他们可以选择以什么顺序进行响应.字符设备无须缓冲且被直接读写.3)字符设备只能被顺序读写,块设备可以随机访问.2.block_device_operations结构体block_device_operations描述了对块设备的操作的集合structblock_device_operations{int(*open)(structinode*,s 阅读全文
posted @ 2010-12-24 17:34 天不会黑 阅读(1700) 评论(1) 推荐(2) 编辑
摘要: http://blog.chinaunix.net/u3/92745/showart_2145668.htmlLINUX设备驱动之设备模型一--kobjectLINUX设备驱动驱动程序模型的核心数据结构是kobject,kobject数据结构在\linux\kobject.h中定义:struct kobject { const char *name; struct list_head entry; struct kobject *parent; struct kset *kset; struct kobj_type *ktype; struct sysfs_dirent *sd; struct 阅读全文
posted @ 2010-12-24 17:33 天不会黑 阅读(1261) 评论(0) 推荐(0) 编辑
摘要: pdflush内核线程池是Linux为了回写文件系统数据而创建的进程上下文工作环境。它的实现比较精巧,全部代码只有不到250行。 1 /* 2 * mm/pdflush.c - worker threads for writing back filesystem data 3 * 4 * Copyright (C) 2002, Linus Torvalds. 5 * 6 * 09Apr2002 akpm@zip.com.au 7 * Initial version 8 * 29Feb2004 kaos@sgi.com 9 * Move worker thread creation to kth 阅读全文
posted @ 2010-12-24 17:31 天不会黑 阅读(515) 评论(0) 推荐(0) 编辑