论文部分内容阅读
摘 要:为了探讨嵌入式Linux设备驱动程序开发,文中对其设备驱动程序完成了以下分析:Linux设备驱动程序开发过程;基本组成结构;设备驱动程序的框架。
关键词:嵌入式;Linux设备;驱动程序;开发过程
中图分类号:TP311.52
1 设备驱动程序
1.1 Linux设备驱动程序开发过程
Linux操作系统的主要设备是块设备、字符设备和网络设备这三类类型的文。
字符设备能够保证在文件存取时减少缓存垃圾,这样一来就能使字符设备能够驱动程序能够像访问文件一样的字符设备以此来负责实现这些行为,并实现操作。
块设备可以看作是类似磁盘这样的文件系统的宿主。同时能被Linux允许一次传输的字节数目不限,在读取设备时也能像读取字符设备那样并且能使两者的读取数方式是一致。
而网络设备异于其他两者,因为其设备面向的上一层是一个网络协议层,要想实现数据访问就必须得需要通过BSD套接口。
但实际上,无论所有嵌入式Linux设备的驱动程序有多少不同,都会有一些共性,所以在开发过程中,能够实现任何类型的驱动程序通用化,这些特性举例如下:
(1)读/写。输入和输出是几乎所有设备都支持的两种基本操作,并由各个驱动程序自身来完成。接口是由系统规定好并实行读/写操作的,这样一来就能直接由驱动程序来实践并完成具体的操作和功能。一旦当驱动程序逐渐初始化的过程中,那么则需要注册读/写函数到操作系统的接口中。
(2)中断。作为计算机中的一个非常重要的功能,中断处理程序也应当同读写一样注册到系统中,因为使操作系統在程序无响应时能够提供使驱动程序中断的能力。这样一来操作系统会在硬件中断发生后自动调用驱动程序并处理程序。
(3)时钟。许多开发设备驱动程序时上也会运用到时钟,由于驱动程序必须由操作系统提供定时机制,所以在注册时钟函数时通常是在预定的时问过了之后。完成一个Linux嵌入式设备驱动程序的流程如下:给主、次设备号下定义,或实现动态获取;完成初始化或清除驱动函数→设计好预定要实现的文件的各种操作→审核定义file—operations结构→调试所需的文件操作→向内核保证实现中断服务并注册→用命令将驱动编译到内核并完成加载→优化生成设备节点的文件。这样的流程是该程序的基本流程。
1.2 基本组成结构
综上所述可分析得出,通常可以将加载设备驱动程序的工作流程解析如下。
首先,为了保险地往内核中插入设备程序我们可以通过模块的加载命令insmod,然后,毫无疑问地需要使用init—module的方法,这样一来就可以直接得到insmod对设备的init函数进行指针初始化的结果,最后就可以通过register-dev方法注册该设备到Linux系统。
这种方法一旦成功,则能够完全实现通过调用init函数指针初始化所指的设备这一方法,在设备链表的末尾直接插入device数据结构,最后通过rmmod调用cleanupmodule这种设备驱动程序来方便执行模块卸载命令的方法。
1.3 设备驱动程序的框架
图1为嵌入式Linux的系统架构,实现Linux的设备驱动程序与内核的接口连接即可分为三部分:为实现设备的初始化与系统启动的代码的接口实现对接;通过file2operation来完成与内核接口的对接;与设备的接口对接后的对设备进行读写等操作。
由此可见,每一个设备驱动程序都有其特定的的任务与相对应的函数集。当一个被称为file2opera2tion的数据结构被一个驱动程序所拥有,那么显而易见的是其中包含的指针会指向驱动程序内部的大多数函数。通常我们在实行一系列的与引导系统相关联的操作时,内核的作用就是能够调用所有的驱动程序的初始化函数并将其统一在一起,并将得到的信息输出给内核,通常此类信息包括:驱动程序的主设备号或是内部的函数地址结构。这如此一来,仅需通过内核,就能了解到各个设备驱动程序的信息,这种方法不仅简单而且快捷方便,也节省了许多时间。
2 结语
通常,针对特殊的硬件设施问题,因此会在驱动程序原有的上作出调整,结合各类信息并为其编写出个别的基本的函数,这样一来,设计构想就完成了。再者再通过各种渠道向虚拟文件系统(VFS)投递并注册,这种工作也就是被称为为Linux内核系统编写驱动程序。相应的好处就是当上层应用在使用的过程中发生变更时,VFS系统也会随之作出相应的调整或是更改设备函数,好使整体更加契合。
参考文献:
[1]肖杰,李仁发,徐成.基于嵌入式Linux设备驱动程序的开发[J].科学技术与工程,2006,3:323-326.
[2]甄诚,董秀珍,付峰,刘晓东.小型医疗仪器中嵌入式Linux设备驱动程序的开发[J].医疗卫生装备,2006,5:20-21.
[3]董志国,李式巨.嵌入式Linux设备驱动程序开发[J].计算机工程与设计,2006,20:3737-3740.
[4]赵伟,张昕凯,谭彩虹.基于嵌入式Linux的DPR设备驱动程序开发[J].仪器仪表学报,2006,S3:2050-2053.
[5]苟培培,郭麦成,孙静,王涛.嵌入式Linux设备驱动的研究与开发[J].电脑编程技巧与维护,2007,4:72-74.
关键词:嵌入式;Linux设备;驱动程序;开发过程
中图分类号:TP311.52
1 设备驱动程序
1.1 Linux设备驱动程序开发过程
Linux操作系统的主要设备是块设备、字符设备和网络设备这三类类型的文。
字符设备能够保证在文件存取时减少缓存垃圾,这样一来就能使字符设备能够驱动程序能够像访问文件一样的字符设备以此来负责实现这些行为,并实现操作。
块设备可以看作是类似磁盘这样的文件系统的宿主。同时能被Linux允许一次传输的字节数目不限,在读取设备时也能像读取字符设备那样并且能使两者的读取数方式是一致。
而网络设备异于其他两者,因为其设备面向的上一层是一个网络协议层,要想实现数据访问就必须得需要通过BSD套接口。
但实际上,无论所有嵌入式Linux设备的驱动程序有多少不同,都会有一些共性,所以在开发过程中,能够实现任何类型的驱动程序通用化,这些特性举例如下:
(1)读/写。输入和输出是几乎所有设备都支持的两种基本操作,并由各个驱动程序自身来完成。接口是由系统规定好并实行读/写操作的,这样一来就能直接由驱动程序来实践并完成具体的操作和功能。一旦当驱动程序逐渐初始化的过程中,那么则需要注册读/写函数到操作系统的接口中。
(2)中断。作为计算机中的一个非常重要的功能,中断处理程序也应当同读写一样注册到系统中,因为使操作系統在程序无响应时能够提供使驱动程序中断的能力。这样一来操作系统会在硬件中断发生后自动调用驱动程序并处理程序。
(3)时钟。许多开发设备驱动程序时上也会运用到时钟,由于驱动程序必须由操作系统提供定时机制,所以在注册时钟函数时通常是在预定的时问过了之后。完成一个Linux嵌入式设备驱动程序的流程如下:给主、次设备号下定义,或实现动态获取;完成初始化或清除驱动函数→设计好预定要实现的文件的各种操作→审核定义file—operations结构→调试所需的文件操作→向内核保证实现中断服务并注册→用命令将驱动编译到内核并完成加载→优化生成设备节点的文件。这样的流程是该程序的基本流程。
1.2 基本组成结构
综上所述可分析得出,通常可以将加载设备驱动程序的工作流程解析如下。
首先,为了保险地往内核中插入设备程序我们可以通过模块的加载命令insmod,然后,毫无疑问地需要使用init—module的方法,这样一来就可以直接得到insmod对设备的init函数进行指针初始化的结果,最后就可以通过register-dev方法注册该设备到Linux系统。
这种方法一旦成功,则能够完全实现通过调用init函数指针初始化所指的设备这一方法,在设备链表的末尾直接插入device数据结构,最后通过rmmod调用cleanupmodule这种设备驱动程序来方便执行模块卸载命令的方法。
1.3 设备驱动程序的框架
图1为嵌入式Linux的系统架构,实现Linux的设备驱动程序与内核的接口连接即可分为三部分:为实现设备的初始化与系统启动的代码的接口实现对接;通过file2operation来完成与内核接口的对接;与设备的接口对接后的对设备进行读写等操作。
由此可见,每一个设备驱动程序都有其特定的的任务与相对应的函数集。当一个被称为file2opera2tion的数据结构被一个驱动程序所拥有,那么显而易见的是其中包含的指针会指向驱动程序内部的大多数函数。通常我们在实行一系列的与引导系统相关联的操作时,内核的作用就是能够调用所有的驱动程序的初始化函数并将其统一在一起,并将得到的信息输出给内核,通常此类信息包括:驱动程序的主设备号或是内部的函数地址结构。这如此一来,仅需通过内核,就能了解到各个设备驱动程序的信息,这种方法不仅简单而且快捷方便,也节省了许多时间。
2 结语
通常,针对特殊的硬件设施问题,因此会在驱动程序原有的上作出调整,结合各类信息并为其编写出个别的基本的函数,这样一来,设计构想就完成了。再者再通过各种渠道向虚拟文件系统(VFS)投递并注册,这种工作也就是被称为为Linux内核系统编写驱动程序。相应的好处就是当上层应用在使用的过程中发生变更时,VFS系统也会随之作出相应的调整或是更改设备函数,好使整体更加契合。
参考文献:
[1]肖杰,李仁发,徐成.基于嵌入式Linux设备驱动程序的开发[J].科学技术与工程,2006,3:323-326.
[2]甄诚,董秀珍,付峰,刘晓东.小型医疗仪器中嵌入式Linux设备驱动程序的开发[J].医疗卫生装备,2006,5:20-21.
[3]董志国,李式巨.嵌入式Linux设备驱动程序开发[J].计算机工程与设计,2006,20:3737-3740.
[4]赵伟,张昕凯,谭彩虹.基于嵌入式Linux的DPR设备驱动程序开发[J].仪器仪表学报,2006,S3:2050-2053.
[5]苟培培,郭麦成,孙静,王涛.嵌入式Linux设备驱动的研究与开发[J].电脑编程技巧与维护,2007,4:72-74.