本发明专利技术公开了一种基于数字电视的Linux硬件设备驱动系统,所述系统包括:Linux内核单元,用于为驱动程序提供操作系统环境;Linux内核面向对象设计单元,用于为Linux内核提供面向对象语言C++支持;驱动框架设计单元,用于为Linux内核提供面向对象的驱动设计框架;驱动开发单元,用于为开发人员按照驱动框架进行填充,完成驱动开发。本发明专利技术技术方案设计了一个可重用的Linux设备驱动系统,可大大提高代码复用度,简化开发过程。
【技术实现步骤摘要】
本专利技术涉及数字家庭
,具体涉及一种基于数字电视的Linux硬件设备驱动系统。
技术介绍
随着数字电视和Linux的不断发展,数字电视机顶盒采用Linux内核的产品越来越多。Linux内核完全由C语言和汇编语言写成,但是却频繁用到了面向对象的设计思想。 在设备驱动方面,往往为同类的设备设计了一个框架,而框架中的核心层则实现了该设备通用的一些功能。框架在为开发工作带来方便、健壮等优越性的同时,也带来了程序尺寸增大,运行速度降低等缺点,这不符合人们对驱动程序的要求。但随着CPU速度和存储器容量的快速发展,这样的情况正在发生变化。最终用户对驱动程序稳定性和开发者对驱动程序研发速度和质量的需求会成为选择驱动开发工具的首要因素。目前数字电视机机顶盒Linux的设备驱动开发非常繁琐,尽管几乎所有的设备驱动程序在结构上类似,但是要重用这些代码却并非易事。此外,现有的Linux设备驱动是基于过程设计的,容易出现控制流程过于复杂,模块间耦合度高的问题。
技术实现思路
为解决上述Linux驱动程序开发过程中的问题,本专利技术以C++为基础,设计了一个可重用的Linux设备驱动系统,可大大提高代码复用度,简化开发过程,并从面向对象的角度给出了一个设备驱动程序的构造视图。本专利技术提供一种基于数字电视的Linux硬件设备驱动系统,所述系统包括Linux内核单元,用于为驱动程序提供操作系统环境;Linux内核面向对象设计单元,用于为Linux内核提供面向对象语言C++支持;驱动框架设计单元,用于为Linux内核提供面向对象的驱动设计框架;驱动开发单元,用于为开发人员按照驱动框架进行填充,完成驱动开发。所述Linux内核单元中的处理流程包括提供修改Linux内核,使用面向对象语言C++与Linux内核兼容。使用Linux内核函数重载C++中的new和delete方法,保持面向对象语言在Linux 内核的特性;驱动程序生命周期行为设计,实现驱动程序的装载和卸载操作;驱动程序实体行为设计,在内部封装和系统交互的细节。所述系统使用extern C 关键字修饰 int init_module (void)和 void cleanup, module (void)装载/隹P载函数;对位于module, h中的kernel_version变量用violate关键字修饰,强制C++保有该变量;将Linux的内核头文件通过#include指令包裹在一个头文件中,并在这个头文件引用前利用#define指令转义C++关键字,引用完毕后,再使用 #undef重置C++关键字。所述系统重新定义KDriver抽象类,实现驱动程序装载以及驱动程序卸载。 附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。图1是本专利技术实施例中的基于数字电视的Linux硬件设备驱动系统架构图;图2是本专利技术实施例中的基于数字电视的Linux硬件设备驱动系统流程图;图3是本专利技术实施例中的面向对象语言C++与Linux内核兼容流程图;图4是本专利技术实施例中的面向对象语言C++在Linux内核中语言特性保持流程图;图5是本专利技术实施例中的驱动程序生命周期行为设计流程图;图6是本专利技术实施例中的驱动程序实体行为设计流程图。具体实施例方式下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述。本专利技术实施例提供一种基于数字电视的Linux硬件设备驱动系统,能够为Linux 驱动开发提供面向对象的可重用驱动设计方法,以下分别进行详细说明。如图1所示,本专利技术实施例中的驱动系统主要包括以下单元=Linux内核单元、 Linux内核面向对象设计单元、驱动框架设计单元、驱动开发单元。所述Linux内核单元为驱动程序提供操作系统环境。所述Linux内核面向对象设计单元为Linux内核提供面向对象语言C++支持。所述驱动框架设计单元为Linux内核提供面向对象的驱动设计框架。所述驱动开发单元,开发人员按照驱动框架进行填充,完成驱动开发。基于本专利技术实施例中的驱动系统,这里的实现方案包括如下步骤1 修改Linux内核,使用面向对象语言C++与Linux内核兼容。步骤2 使用Linux内核函数重载C++中的new和delete方法,保持面向对象语言在Linux内核的特性。步骤3 驱动程序生命周期行为设计,利用图3所示的驱动框架结构实现驱动程序的装载和卸载操作。步骤4 驱动程序实体行为设计,在内部封装和系统交互的细节。Kdriver, KDevice及其子类被定义为抽象类,类中除了声明满足Linux设备驱动规范的接口外,同时封装了系统请求分发等规程。Etream代表了字符设备驱动,KBlock表示块设备驱动。KDispatchObject及其子类封装了系统内核对象,如互斥同步、内核定时器等。STL for kernel完成了 C++标准模板库,在内核中可以使用如set,vector等高级容器和相应算法。此外还包括了部分IO接口标准。框架中,IO接口、STL、内核对象部分属于简单封装,目的在于提供一个面向对象的外观,可供开发人员直接使用。这部分的类不具备主动活动的能力,受KDriver及KDevice驱动进行工作。从开发者角度看,一个驱动程序由一个KDriver的子类和KDevice的子类构成。开发者为完成驱动程序所需的工作就是在MyDevice类中将继承自父类的虚函数重写,增加和设备操作实际相关的代码。图3为面向对象语言C++与Linux内核兼容流程图,Linux —直采用C作为内核开发语言,为了保持和内核的无缝结合,驱动程序也用C编码,尽管C++可用于内核编程,但由于驱动和普通应用的差异,以及内核缺乏对C++运行库的支持使得并不能直接利用C++构造驱动程序,故需要解决C++与Linux内核的兼容性问题。步骤11 使用 extern C 关键字修饰 int init_module (void)和 void cleanup, module (void)装载/卸载函数。步骤12 对位于module, h中的kernel_version变量用violate关键字修饰,强制C++保有该变量。步骤13 将Linux的内核头文件通过#include指令包裹在一个头文件中,并在这个头文件引用前利用#define指令转义C++关键字,引用完毕后,再使用#undef重置C++关键字。图4为面向对象语言C++在Linux内核中语言特性保持流程图由g++编译器产生的C++对象的内存布局在操作系统内核和用户态一致,基于此, C++语言的封装性和继承性在内核模式下得以保存。但是,多态性必须依赖于C++对象动态创建和销毁的能力,在内核模式下,没有用户态程序的堆区域,没有C++运行库的支持,必须自己维护一个处于内核模式下的“堆区域”和分配策略。解决这一问题的唯一途径就是重载 operator new 及其 operator delete。步骤21 重载operator new。使用内核函数kmalloc获取本文档来自技高网...
【技术保护点】
1.一种基于数字电视的Linux硬件设备驱动系统,其特征在于,所述系统包括:Linux内核单元,用于为驱动程序提供操作系统环境;Linux内核面向对象设计单元,用于为Linux内核提供面向对象语言C++支持;驱动框架设计单元,用于为Linux内核提供面向对象的驱动设计框架;驱动开发单元,用于为开发人员按照驱动框架进行填充,完成驱动开发。
【技术特征摘要】
1.一种基于数字电视的Linux硬件设备驱动系统,其特征在于,所述系统包括Linux内核单元,用于为驱动程序提供操作系统环境;Linux内核面向对象设计单元,用于为Linux内核提供面向对象语言C++支持;驱动框架设计单元,用于为Linux内核提供面向对象的驱动设计框架;驱动开发单元,用于为开发人员按照驱动框架进行填充,完成驱动开发。2.如权利要求1所述的基于数字电视的Linux硬件设备驱动系统,其特征在于,所述 Linux内核单元中的处理流程包括提供修改Linux内核,使用面向对象语言C++与Linux内核兼容。使用Linux内核函数重载C++中的new和delete方法,保持面向对象语言在Linux内核的特性;驱动程序生命周期行为设计,实现驱动程序的装载和卸载操作;驱动程序实体行为设计,在...
【专利技术属性】
技术研发人员:黄旭阳,张洁,孟思明,
申请(专利权)人:广东星海数字家庭产业技术研究院有限公司,中山大学,
类型:发明
国别省市:81
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。