学习韦东山视频心得(三)

学习韦东山视频心得(三)

I2C总线广泛的用于各种传感器中,仅仅通过SDA,SCL线实现了主机与设备之间的通信。Linux系统中I2C驱动较为庞大。Linux系统中可以采用两种方式实现I2C设备驱动,我们既可以把I2C设备当做普通的字符设备去操作,同时可以利用内核中庞大而错综复杂的框架。如果当做普通的字符设备,程序员只要把管脚模拟时序或者I2C控制器自己实现不采用内核框架,使得程序员不需去研究I2C设备驱动庞大的框架,但是,如此写出来的驱动移植性跟单片机相差无几,移植性能很差,优点是比较直截了当。如果采用内核驱动框架,系统比较庞大需要程序员对I2C驱动框架有一些了解。本设计采用Linux内核I2C驱动框架。

图2.12 I2C驱动框架

I2C设备驱动有两种组件:I2C-dev.c(通用组件),特定组件(例如:OV9650,lm75)对应于特定的设备驱动。如果是I2C-dev.c万能接口,只创建了一个适配器类型i2c_adapter,只是注册了一个主设备号,并没有创建设备文件,但是在ioctl函数发送了从设备的地址,通过万能接口调用核心层接口发送数据,然后才创建临时的虚拟的设备文件,所以说,如果是走通用组件,只是构建了适配类型。如果走特定类型组件例如本设计中OV9650和GT811电容触摸屏,创建了i2c_client,创建设备文件。如图2.12所示。

I2C驱动组要分为三层,四个文件。设备驱动层(OV9650.c),核心层(I2C-core.c),总线驱动层(I2C-s3c2410.c),资源层(同一层次跟总线驱动层)dev-I2C0.c。

1.I2C设备驱动层

I2C的设备驱动层中,其实相当于平台设备机制的驱动层,构建i2c_driver,注册i2c_driver,实现probe函数和操作方法,在probe函数中:获取i2c_cilent,注册主设备号,创建设备文件,注册操作方法。

2.I2C核心层:在核心层中提供了函数接口实现,然后封装发送接收函数。

3.I2C总线驱动层

由于采用平台设备驱动机制实现,此层获取平台资源,实现了probe函数:获取资源,初始哈硬件,使能时钟,注册中断等等,然后构建了I2C_adapter,注册了适配到I2C总线。最后扫描了板级信息链表,通过名字,如果匹配成功,创建设备文件。除此之外,在此层实现了发送数据和读取数据的方法。

4.I2C资源层:包好基地址和大小,I2C中断号。

5.I2C板级资源

I2C板级资源这一实现大大方便了I2C驱动移植,samsung公司的所有内核注册平台数据在smkdv210.c中。设置好I2C板级信息(从机地址和名字)在平台设备大数组中注册,最后在smdkV210_machine_init()函数中注册到板级信息链表中。

2.1.4 GT811(触摸屏)驱动

GT811触摸屏驱动是input子系统和I2C驱动的组合体。Gt811中主要是初始化触摸屏,GT811调用I2C发送接口函数,配置寄存器或者从寄存器中读取坐标的值。在GT811驱动程序中:构建i2c_driver,注册i2c_driver,实现probe函数。在probe函数中,获取i2c_client,然后硬件初始化,包括中断注册,引脚初始化等。接着构建了input_dev,设置input_dev,并且注册了input_dev。到此,我们可以看出GT811probe函数中构建了两类设备,一是i2c_driver,二是input_dev,从中充分体现了其作为I2C驱动和input子系统结合体的特性。下图2.13所示,为GT811驱动框架。

图2.13 GT811驱动构架

时间: 2024-10-06 23:42:45

学习韦东山视频心得(三)的相关文章

学习韦东山视频心得(一)

学习韦东山视频心得(一) 任何计算机系统都是软件和硬件的结合体,如果只有硬件而没有软件,则硬件是没有灵魂的躯壳:如果只有软件没有硬件,则软件就是一堆无用的字符.在底层硬件的基础上,操作系统覆盖一层驱动,屏蔽底层硬件的操作,通过特定的软件接口去操作底层硬件,用户在用户空间可以很容易的把软件设计目标放在策略与需求上,可以很方便的屏蔽掉底层实现,从而很好的完成客户功能需求.计算机系统是软件和硬件的结合体.而软件又分为应用层软件和驱动层软件.驱动层软件是应用层软件和底层硬件的纽带.通过驱动层软件实现对底

学习韦东山视频心得(二)

学习韦东山视频心得(二) 1.字符设备驱动 图2.6 LCD驱动框架 图2.7 LCD硬件框架 字符设备是Linux设备中最基本的设备驱动是其他大型驱动的基石.字符设 备驱动模型,如下图2.8所示. Linux内核驱动模块一般由模块加载函数,模块卸载函数,模块许可申明等等组成.在字符设备驱动中在模块加载函数中注册主设备,注册操作方法,创建设备结点等操作.字符设备驱动移植步骤: (1)在模块加载函数中创建设备文件,注册主设备号,注册操作方法 (2)分别实现各自操作方法 Linux内核驱动模块一般由

韦东山视频学习的一席记录

1.在Windows下,输入cmd可进入命令框 输入E:就进入E盘,再进入其他文件夹,就用cd指令 原文地址:https://www.cnblogs.com/QQ2962269558/p/11748200.html

Linux学习老王视频第三周

1.总结vim命令行模式常见快捷方式,以及vim查找,替换的方法 (1).vim命令行常见的快捷方式 :wq 保存退出Vim:wq! 强制保存退出Vim:q! 强制退出不保存,放弃保存修改的情况:w filename 另存为filenameG :$ 移动到最后一行gg :1 移动到第一行舅,同100g 100G :100 移动到第100行0 ^ 光标所在位置移动到当前行行首$ 光标所在位置移动到当前行行尾 (2).vim查找,替换的方法 输入 "/" 即可进入命令行的查找模式,注意的是

韦东山视频第三节 I2C协议

如果接触硬件多了的话,就可以发现I2C协议是我们经常使用到的.只需要SDA(数据)和SCL(时钟)便能搭建好电路. 电路虽然简单,但是关键还得理解它规定好的协议.首先,看一下时序图. 从图中可以看出,传输一次数据分为四个主要环节:S(起始信号),start byte(要写入的字节),ACK(应答信号), SR(停止信号).作用不去描述,下面对它们如何产生作用描述一下我的看法. S(起始信号):当SCL为高,SDA由高电平拉低时,代表传输开始. start byte(要写入的字节):SCL周期高低

作为一个新人,怎样学习嵌入式Linux,(韦东山)

很早以前在网上看到的韦东山老师写的文章,复制到自己的博客,方便自己以后看. 在学习嵌入式Linux之前,肯定要有C语言基础.汇编基础有没有无所谓(就那么几条汇编指令,用到了一看就会). C语言要学到什么程度呢?越熟当然越好,不熟的话也要具备基本技能.比如写一个数组排序.输入数字求和什么的. 学C语言唯一的方法是多写程序多练习,编译出错没关系,自己去解决:执行出错没关系,自己去分析.以前我是用 VC来练习C语言的,经常去尝试着写一些C语言竞赛的题目.它们是纯C.纯数学.纯逻辑的题目,不涉及界面这些

韦东山linux视频第一期前两节观看收获

刚刚看了韦东山的linux视频第一期,主要讲解的ARM的硬件基础,对于我这样一个从单片机转过来的人来说,的确震撼! 我看过很多书和视频关于单片机的,但是从来没有一个会做到这么精练的.对,精练,归纳总结的相当好. 第一节 原理图之GPIO和门电路 第一节里,简要介绍了一些模拟电路,内容简单,但是却话出了最实用的的部分. (1)以前在模电课上,三极管这一节课可是花费了相当章节,结果让人云里雾里,不知道怎么去用.但是在这里,韦东山老 师没有多余的部分,直接把最直接.最有效的部分给了我们.P即正,N即负

韦东山资料大全

QQ截图20150514154500.png (34.07 KB, 下载次数: 0) 下载附件  保存到相册 2 小时前 上传 网盘地址:http://yun.baidu.com/share/home?uk=2520074993&view=share#category/type=0 本人是一位大三的学生,在大二下学期的时候接触了51单片机,随后开始单片机的学习并逐渐对单片机产生了兴趣,并用单片机做了一些小设计,虽然这些设计没什么技术含量,但是为我迈向嵌入式的道路奠定了基础. 随后,同学说51单片

韦东山yy公开课笔记(1)--各种杂的问题

1,第四期的智能猫眼会有打电话和发短信的功能吗? 答:会有打电话功能,硬件上支持打电话就会支持发短信,只是软件上是否实现发短信现在未定.因为短信延迟太严重,不是可靠的. 2,请问关于makefile中的很多设置项,像段啊什么的?是什么意思呢?需要深入学习吗? 3 答:对于裸板才需要我们自己管理“段”,这并不是什么很高深的知识,看过涉及重定位的裸板视频就可以了解清楚了.至于其他设置项,基本上就是编译选项而已.Makefile本身并不复杂,也不应该成为学习的拦路虎:用于裸板的Makefile,它是非