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

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

1.字符设备驱动

图2.6 LCD驱动框架

图2.7 LCD硬件框架

字符设备是Linux设备中最基本的设备驱动是其他大型驱动的基石。字符设

备驱动模型,如下图2.8所示。

Linux内核驱动模块一般由模块加载函数,模块卸载函数,模块许可申明等等组成。在字符设备驱动中在模块加载函数中注册主设备,注册操作方法,创建设备结点等操作。字符设备驱动移植步骤:

(1)在模块加载函数中创建设备文件,注册主设备号,注册操作方法

(2)分别实现各自操作方法

Linux内核驱动模块一般由模块加载函数,模块卸载函数,模块许可申明等等组成。在字符设备驱动中在模块加载函数中注册主设备,注册操作方法,创建

图2.8 字符设备框架图

设备结点等操作。字符设备驱动移植步骤:

(1)在模块加载函数中创建设备文件,注册主设备号,注册操作方法

(2)分别实现各自操作方法

2.平台设备驱动机制

对于一些常见的接口比如:I2C,SPI接口。Linux操作系统在内核中抽象出一条虚拟的总线,在这条软件虚拟的总线上挂接这I2C,SPI硬件。通过平台设备驱动机制,使得驱动程序的通用部分和一些特定硬件资源(比如:寄存器地址,中断源等等)分离,从而使驱动更加通用,在驱动的移植过程中往往只要添加资源便可,大大的缩短了驱动的移植难度,提高了驱动的通用性〔8〕

图2.9 字符设备框架图

struct platform_device 平台设备结构体,一个平台设备对应一个实际的物理设备,在实际的设备之中最至关重要的是物理设备的硬件信息,比如说:寄存器地址,中断号,等等。在Linux内核中,把上述一些也有的物理硬件资源抽象出来一个void *型指针,用来接收任意数据类型,称为平台数据。平台数据一般存放特定设备资源。在函数接口platform_register_device()注册平台设备结构到平台设备链表中。如上图2.9所示。

struct platform_driver 平台驱动结构体,一个平台驱动对应一个驱动,函数接口platform_regisister_driver()把设备驱动注册到设备驱动链表中。当驱动或者是平台设备注册相应的链表是不断的查询对方的链表,通过struct platform_mach_id中的结构体的名字跟驱动中的名字是否匹配,当匹配成功时调用设备驱动结构体重probe函数,在probe函数中获取注册的设备结构体,然后获取特定设备的资源,在获取资源之后,初始化特定的硬件,注册中断,注册主设备号,创建设备文件,注册操作方法等等一系列操作。

平台设备驱动机制相比于普通的字符设备而言,使得设备资源与驱动分离,使得驱动移植更加方便与便捷。但是同时,由于为了使得驱动通用性和便于移植的特性,在Linux内核中往往是分为多层结构,多个文件,在驱动内部关系错综复杂,函数调用关系十分繁杂,Linux驱动与内核浑然一体。

在Linux设备驱动中往往采用分层的思想,使得代码有很高的互用性,在大型驱动中,多层结构,关系复杂,同时Linux设备驱动采用面向对象的思想,采用大量的结构体,包含关系也是十分繁杂。如下图2.10所示。

图2.10 Linux驱动思想

通过上述的分层思想,达到了代码互用的功能,借鉴了面向对象的思想。

时间: 2024-08-27 11:22:49

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

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

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

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

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

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

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

韦东山视频第三节 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,它是非

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

1. 编译器的版本和glibc库有对应关系吗,如何查看glibc的版本(glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc),编译器是不是只带glibc被编译生成的 .so 文件,如果自制系统调用的话是不是还要下载glibc然后重新编译 答:一般来说制作编译器的时候就会选定glibc,所以你得到的编译器里面含有glibc的库,既有so文件,也有.a文件.编译器和Glibc都在更新的,新编译器一般不能使用过老的glibc.但是它们之间的版本关系,我也不了解. 自制系