随笔分类 -  Linux驱动开发

摘要:内核中关于GPIO的操作API主要集中在和中,前者主要是GPIO直接与设备树相关的操作,在 "Linux 设备树操作API" 中已经记录过,后者主要是针对GPIO本身的操作,常用的有下面几个。 阅读全文
posted @ 2017-02-11 11:29 Abnor 编辑
摘要:"Linux设备树语法详解" 一文中介绍了设备树的语法,这里主要介绍内核中提供的操作设备树的API,这些API通常都在 "include/of.h" 中声明。 device_node 内核中用下面的这个结构描述设备树中的一个节点,后面的API都需要一个device_node对象作为参数传入。 str 阅读全文
posted @ 2017-02-06 10:08 Abnor 编辑
摘要:平台总线是一种实现设备信息与驱动方法相分离的方法,利用这种方法,我们可以写出一个更像样一点的字符设备驱动,即使用cdev作为接口,平台总线作为分离方式: xjkeydrv_init():模块加载函数 └──platform_driver_register()将驱动对象模块注册到平台总线 └──pla 阅读全文
posted @ 2017-02-06 08:58 Abnor 编辑
摘要:在 "Linux设备树语法详解" 和 "Linux Platform驱动模型(一) _设备信息" 中我们讨论了设备信息的写法,本文主要讨论平台总线中另外一部分 驱动方法,将试图回答下面几个问题: 1. 如何填充platform_driver对象? 2. 如何将驱动方法对象注册到平台总线中? 正文前的 阅读全文
posted @ 2017-02-06 08:16 Abnor 编辑
摘要:我在 "Linux字符设备驱动框架" 一文中简单介绍了Linux字符设备编程模型,在那个模型中,只要应用程序 open() 了相应的设备文件,就可以使用ioctl通过驱动程序来控制我们的硬件,这种模型直观,但是从软件设计的角度看,却是一种十分糟糕的方式,它有一个致命的问题,就是设备信息和驱动代码冗余 阅读全文
posted @ 2017-02-05 10:40 Abnor 编辑
摘要:驱动程序就是向下控制硬件,向上提供接口,这里的向上提供的接口最终对应到应用层有三种方式: 设备文件,/proc,/sys ,其中最常用的就是使用设备文件,而Linux设备中用的最多的就是字符设备,本文就以字符设备为例来分析创建并打开一个字符设备的文件内部机制。 struct inode Linux中 阅读全文
posted @ 2017-02-04 13:05 Abnor 编辑
摘要:我们在 "Linux设备管理(一)_kobject, kset,ktype分析" 一文中介绍了kobject的相关知识,在 "Linux设备管理(二)_从cdev_add说起" 和 "Linux设备管理(三)_总线设备的挂接" 举例介绍了内核中是如何进行设备管理的,并在 "Linux设备管理(四)_ 阅读全文
posted @ 2016-12-27 21:02 Abnor 编辑
摘要:sysfs 是一个基于ramfs的文件系统,在2.6内核开始引入,用来导出内核对象(kernel object)的数据、属性到用户空间。与同样用于查看内核数据的proc不同,sysfs只关心具有层次结构的设备信息,比如系统中的总线,驱动以及已经加载的模块等,而诸如PID等信息还是使用proc来管理。 阅读全文
posted @ 2016-12-21 08:41 Abnor 编辑
摘要:扒完了 "字符设备" ,我们来看看平台总线设备,平台总线是Linux中的一种虚拟总线,我们知道, 总线+设备+驱动 是Linux驱动模型的三大组件,设计这样的模型就是将驱动代码和设备信息相分离,对于稍微复杂一点的驱动,都要使用这种结构,我在 ""Linux设备管理(一)_kobject, kset, 阅读全文
posted @ 2016-12-20 08:08 Abnor 编辑
摘要:我在 "Linux字符设备驱动框架" 一文中已经简单的介绍了字符设备驱动的基本的编程框架,这里我们来探讨一下Linux内核(以4.8.5内核为例)是怎么管理字符设备的,即当我们获得了设备号,分配了 cdev 结构,注册了驱动的操作方法集,最后进行 cdev_add() 的时候,究竟是将哪些内容告诉了 阅读全文
posted @ 2016-12-19 09:05 Abnor 编辑
摘要:Linux内核大量使用面向对象的设计思想,通过追踪源码,我们甚至可以使用面向对象语言常用的UML类图来分析Linux设备管理的"类"之间的关系。这里以4.8.5内核为例从kobject,kset,ktype的分析入手,进而一探内核对于设备的管理方式 container_of宏 这个宏几乎是linux 阅读全文
posted @ 2016-12-18 13:28 Abnor 编辑
摘要:字符设备是Linux三大设备之一(另外两种是块设备,网络设备),字符设备就是字节流形式通讯的I/O设备,绝大部分设备都是字符设备,常见的字符设备包括鼠标、键盘、显示器、串口等等,当我们执行 ls l /dev 的时候,就能看到大量的设备文件, c 就是字符设备, b 就是块设备,网络设备没有对应的设 阅读全文
posted @ 2016-12-15 08:11 Abnor 编辑
摘要:Linux是单内核系统,可通用计算平台的外围设备是频繁变化的,不可能将所有的(包括将来即将出现的)设备的驱动程序都一次性编译进内核,为了解决这个问题,Linux提出了可加载内核模块(Loadable Kernel Module,LKM)的概念,允许一个设备驱动通过模块加载的方式,在内核运行起来之后" 阅读全文
posted @ 2016-12-13 21:15 Abnor 编辑
摘要:概念 Linux内核从3.x开始引入设备树的概念,用于实现 驱动代码与设备信息相分离 。在设备树出现以前,所有关于设备的具体信息都要写在驱动里,一旦外围设备变化,驱动代码就要重写。引入了设备树之后,驱动代码只负责处理驱动的逻辑,而关于设备的具体信息存放到设备树文件中,这样,如果只是硬件接口信息的变化 阅读全文
posted @ 2016-12-06 11:40 Abnor 编辑
摘要:Kconfig是我们进行内核配置的关键文件,用于生成menuconfig的界面并生成最终确定编译选项的 文件。关于Kconfig文件的编写规则,在 有详尽的叙述。这里主要用实例进行语法分析。 config 确定了条目前面是否有选项,menuconfig界面中的条目中一共有3种主动选项,分别是 ,`` 阅读全文
posted @ 2016-12-04 18:18 Abnor 编辑