第二期 | 字符设备基础
文章平均质量分 94
字符设备基础
北京迅为
让学习更简单,让开发更容易
展开
-
RK3568驱动指南|第二篇 字符设备基础-第7章 menuconfig图形化配置实验
上一小节我们打开的图形化配置界面是如何生成的呢?图形化配置界面中的每一个界面都会对应一个Kconfig文件。所以图形化配置界面的每一级菜单是由Kconfig文件来决定的。图形化配置界面有很多菜单。所以就会有很多Kconfig文件,这也就是为什么我们会在内核源码的每个子目录下,都会看到Kconfig文件的原因,那掌握Kconfig文件相关的知识是不是就非常重要呢。所以这一小节我们来看下如何编写Kconfig文件来生成图形化配置界面,也就是Kconfig文件的语法是什么。Mainmenu。原创 2023-09-08 10:30:19 · 967 阅读 · 0 评论 -
RK3568驱动指南|第二篇 字符设备基础-第8章 驱动模块编译进内核实验
把驱动编译进Linux内核,用 * 来表示,所以配置选项改为*。如果想要将驱动编译为模块,则用M来表示,配置选项改为M。通过上一章的学习,我们学会了使用menuconfig图形化配置工具,以及了解了menuconfig相关的文件:Kconfig .config XXXdefconfig。接下来修改上一级目录的Kconfig文件和Makefile文件,也就是driver/char目录。编译成功之后,进入到drivers/char/hello目录下,可以看到会生成对应的.o文件。【最新驱动资料(文档+例程)】原创 2023-09-08 10:32:31 · 465 阅读 · 0 评论 -
RK3568驱动指南|第二篇 字符设备基础-第9章 申请字符设备号实验
第9章 申请字符设备号实验经过前面章节的学习,相信大家已经对驱动模块的基本框架、驱动模块传参等知识有了自己的认识,本章节开始就要进入字符设备的世界了。字符设备是指在I/O传输过程中以字符为单位进行传输的设备,可以使用与普通文件相同的文件操作命令(打开、关闭、读、写等)对字符设备进行操作,是Linux驱动中最基本的一类设备驱动,例如最常见的LED、按键、IIC、SPI,LCD等都属于字符设备的范畴。要想对字符设备进行操作,需要通过设备号来对相应的设备进行查找,在本章节将对设备号相关知识进行讲解。原创 2023-09-08 10:33:12 · 356 阅读 · 0 评论 -
RK3568驱动指南|第二篇 字符设备基础-第10章 注册字符设备实验
在上一小节中已经对设备号的相关知识进行了讲解,并成功申请到了设备号,那在Linux系统中,设备号是怎样与字符设备进行关联的呢?字符设备又是怎样注册的呢?带着疑问,让我们开始本章节的学习吧。原创 2023-09-08 10:34:02 · 379 阅读 · 0 评论 -
RK3568驱动指南|第二篇 字符设备基础-第11章 创建设备节点实验
在上两个章节的学习中,我们已经成功的申请了设备号并且注册了相应的字符设备。系统通过设备号对设备进行查找,而字符设备注册到内核之后,并不能直接进行设备文件操作命令(打开、关闭、读、写等),需要相应的设备文件作为桥梁以此来进行设备的访问,在本章节将对如何创建设备节点进行学习。原创 2023-09-08 10:34:46 · 368 阅读 · 0 评论 -
RK3568驱动指南|第二篇 字符设备基础-第12章 字符设备驱动框架实验
在进行注册字符设备实验章节中,使用cdev_init(…)函数对struct cdev结构体类型变量和struct file_operations结构体类型变量相链接,struct file_operations结构体就是把系统调用和驱动程序关联起来的关键数据结构。该结构体的每一个成员都对应着一个系统调用,读取file_operation中相应的函数指针,接着把控制权转交给函数,从而完成了Linux设备驱动程序的工作。原创 2023-09-08 10:35:17 · 298 阅读 · 0 评论 -
RK3568驱动指南|第二篇 字符设备基础-第13章 杂项设备驱动实验
在Linux中,把无法归类的五花八门的设备定义成杂项设备。相较于字符设备,杂项设备有以下两个优点:(1)节省主设备号:杂项设备的主设备号固定为10,而字符设备不管是动态分配还是静态分配设备号,都会消耗一个主设备号,进而造成了主设备号浪费。当系统中注册了多个misc设备驱动时,只需使用子设备号进行区分即可。原创 2023-09-08 10:35:57 · 341 阅读 · 0 评论 -
RK3568驱动指南|第二篇 字符设备基础-第14章 内核空间与用户空间数据交互实验
在“第12章 字符设备驱动框架实验”中,已经对file_operations结构体的进行了填充,该结构体的每一个成员都对应着一个系统调用,例如read、write等,在对应的实验中,只是对调用函数进行了标志打印,并没有真正实现设备的读写功能,而在本章节将对内核空间与用户空间的数据交换功能进行实现。原创 2023-09-08 10:36:29 · 280 阅读 · 0 评论 -
RK3568驱动指南|第二篇 字符设备基础-第15章 文件私有数据实验
Linux中并没有明确规定要使用文件私有数据,但是在linux驱动源码中,广泛使用了文件私有数据,这是Linux驱动遵循的“潜规则”,实际上也体现了Linux面向对象的思想。struct file 结构体中专门为用户留了一个域用于定义私有数据。/**/#endif//私有数据文件私有数据的概念在Linux驱动中有着非常广泛的应用,文件私有数据就是将私有数据private_data指向设备结构体。原创 2023-09-08 10:37:01 · 234 阅读 · 0 评论 -
RK3568驱动指南|第二篇 字符设备基础-第16章 一个驱动兼容不同设备实验
container_of在Linux内核中是一个常用的宏,用于从包含在某个结构中的指针获得结构本身的指针,通俗地讲就是通过结构体变量中某个成员的首地址进而获得整个结构体变量的首地址。那么可以使用这个函数获取不同设备的地址,来对不同的设备进行操作,从而一个驱动可以兼容不同的设备。函数原型函数作用 通过结构体变量中某个成员的首地址获取到整个结构体变量的首地址。参数含义 ptr是结构体变量中某个成员的地址。 type是结构体的类型 member是该结构体变量的具体名字。原创 2023-09-08 10:37:35 · 276 阅读 · 0 评论 -
RK3568驱动指南|第二篇 字符设备基础-第17章 Linux错误处理实验
在编写驱动程序时,驱动程序应该提供函数执行失败后处理的能力。如果驱动程序中函数执行失败了,必须取消掉所有失败前的注册,否则内核会处于一个不稳定的状态,因为它包含了不存在代码的内部指针。int err;在以上代码中试图注册3个虚构设备,goto语句在失败情况下使用,对之前已经成功注册的设施进行注销。原创 2023-09-08 10:38:16 · 255 阅读 · 0 评论 -
RK3568驱动指南|第二篇 字符设备基础-第18章 点亮LED灯实验
经过前面章节的学习,我们已经对字符设备相关的知识进行了学习和实验,但实际上并没有涉及到对硬件的操作,而在本小节中将通过字符设备驱动及相关的应用程序对LED灯进行控制,通过对硬件的实际操作,从而对之前学习到的知识进行整合与回顾。原创 2023-09-08 10:38:47 · 1016 阅读 · 0 评论