DB43∕T 2260-2021 信息技术应用创新工程建设规范第 9 部分:驱动开发通用技术要求(湖南省).pdf
《DB43∕T 2260-2021 信息技术应用创新工程建设规范第 9 部分:驱动开发通用技术要求(湖南省).pdf》由会员分享,可在线阅读,更多相关《DB43∕T 2260-2021 信息技术应用创新工程建设规范第 9 部分:驱动开发通用技术要求(湖南省).pdf(44页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、信息技术应用创新工程建设规范第9部分:驱动开发通用技术要求Engineering specification for the Application Innovation Project of Information TechnologyPart 9:General technical requirements of driver developing43湖南省地方标准ICSCCS 01.140.20L 70DB43/T 22602021 发 布湖南省市场监督管理局2021-12发布-292022-03实施-29DB43/T 22602021 I 目 次 前言 引言 1 范围 1 2 规范性引
2、用文件 1 3 术语和定义 1 4 缩略语 2 5 核内驱动总体要求 2 5.1 编程要求 2 5.2 设备驱动模型 3 5.3 文件组织形式 3 5.4 驱动程序实现 3 5.5 第三方技术使用 4 6 核内驱动具体要求 5 6.1 字符设备驱动程序 5 6.2 块设备驱动程序 6 6.3 平台设备驱动程序 7 6.4 网络设备驱动程序 9 6.5 显示帧缓存设备驱动程序 10 6.6 驱动程序的 DKMS 包制作 12 6.7 驱动程序的调试验证 13 7 常用外设开发要求 13 7.1 打印机驱动开发 13 7.2 扫描仪驱动开发 14 7.3 手写液晶屏驱动开发 15 附录 A(资料性
3、)设备驱动分类 16 附录 B(资料性)驱动程序实现函数示例 17 附录 C(资料性)驱动程序可调用的内核函数接口 19 附录 D(规范性)驱动程序相关的结构体 21 附录 E(资料性)DKMS 技术说明及示例 23 附录 F(资料性)第三方内核模块打包 26 附录 G(资料性)驱动程序的调试验证方法 32 附录 H(资料性)打印机驱动库配置文件示例 36 DB43/T 22602021 II DB43/T 22602021 III 前 言 本文件按照 GB/T 1.12020标准化工作导则 第 1 部分:标准化文件的结构和起草规则的规定起草。请注意本文件的某些内容可能涉及专利。本文件的发布机
4、构不承担识别专利的责任。信息技术应用创新工程建设规范分为以下几个部分:第 1 部分:台式微型计算机通用技术要求;第 2 部分:便携式微型计算机通用技术要求;第 3 部分:服务器通用技术要求;第 4 部分:操作系统通用技术要求;第 5 部分:操作系统硬件兼容性通用技术要求;第 6 部分:操作系统软件兼容性通用技术要求;第 7 部分:办公套件通用技术要求;第 8 部分:电子公文通用技术要求;第 9 部分:驱动开发通用技术要求;第 10 部分:应用开发通用技术要求;第 11 部分:迁移适配通用技术要求;第 12 部分:国产化信息系统建设质量管理规范;第 13 部分:国产化信息系统运行维护规范;第 1
5、4 部分:国产化信息系统建设验收规范;第 15 部分:云计算通用技术要求。本部分为第 9 部分。本部分由湖南省国家密码管理局提出。本部分由湖南省工业和信息化厅归口。本部分起草单位:银河麒麟软件(长沙)有限公司、中国人民解放军国防科技大学、飞腾信息技术有限公司、湖南湘江鲲鹏信息科技有限责任公司、湖南中软信息系统有限公司、湖南长城科技信息有限公司、湖南国科微电子股份有限公司、长沙景嘉微电子股份有限公司、鹏城实验室。本部分主要起草人:张铎、吴庆波、孙立明、刘云、王琦、刘正元、王勇军、李唯实、王晓川、马俊、齐璇、蔡威、张月、吕超、董昱、曹泽文、付志鹏。DB43/T 22602021 IV DB43/T
6、 22602021 V 引 言 湖南省为深入贯彻国家网络强国战略,全面落实中央有关文件精神,部署开展湖南省信息技术应用创新工程建设,保障全省各级党政机关关键信息基础设施信息安全和信息系统安全可靠运行。针对自主可控产品体系初具规模,但相关产品和工程实施标准规范还很缺乏的现状,为了规范工程建设,加速工程进度,扩大建设结果,同时有力提升自主可控产业发展水平,确保信息安全,由湖南省国家密码管理局作为业务主管单位、湖南省工业和信息化厅作为技术归口单位,由中国人民解放军国防科技大学、中国电子信息产业集团有限公司等单位与湖南省合作制定了 信息技术应用创新工程建设规范 地方标准。信息技术应用创新工程建设规范主
7、要由自主可控核心产品、典型应用、工程管理等方面的规范组成,重点解决应用创新工程建设当中产品选型、应用开发、工程实施等基础环节的实际问题,可为应用创新工程的用户使用单位、集成建设单位和相关产品研制单位,在产品和应用规范化、软硬件兼容适配、工程实施标准等方面提供一般性指引。信息技术应用创新工程建设规范 未来将根据自主可控产业和应用创新工程的发展变化进行相应的必要调整和补充。DB43/T 22602021 VI DB43/T 22602021 1 信息技术应用创新工程建设规范 第 9 部分:驱动开发通用技术要求 1 范围 本文件提出了国产操作系统驱动程序开发的编程要求、设备驱动模型、文件组织形式、驱
8、动程序实现、第三方技术使用等总体要求,并针对字符设备、块设备、平台设备、网络设备、显示帧缓存设备的驱动程序框架和开发提出具体要求。本文件适用于国产操作系统上第三方驱动程序的开发,也为第三方驱动程序的调试验证提供指导。2 规范性引用文件 下列文件中的内容通过文中的规范性引用而构成本文件必不可少的条款。其中,注日期的引用文件,仅该日期对应的版本适用于本文件;不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件。GB/T 152721994 程序设计语言 C 3 术语和定义 下列术语和定义适用于本文件。3.1 驱动程序 driver 驱动程序是硬件厂商根据操作系统编写的配置文件,操作系统通
9、过驱动来与控制设备和进行通信。3.2 设备 device 是计算机系统中输入、输出设备(包括外存储器)的统称。设备对数据和信息起着传输、转送和存储的作用。3.3 总线 bus 是计算机各种功能部件之间传送信息的公共通信干线。3.4 设备驱动模型 device driver model 设备驱动模型是操作系统内核为了管理硬件上的设备和对应的驱动程序所制定的一套软件体系。3.5 平台总线 platform bus 平台总线是操作系统内核定义的一种虚拟总线,操作系统内核通过平台总线来管理芯片内部集成设备。3.6 平台设备驱动模型 platform device driver model DB43/T
10、 22602021 2 平台设备驱动模型,即采用平台总线的方式对驱动程序和设备进行管理的设备驱动模型。3.7 字符设备 character device 字符设备是不可寻址的,仅提供数据的流式访问的设备。3.8 块设备 block device 块设备是以块为单位的、可以寻址的设备。块设备通常支持重定位操作,实现对数据的随机访问。3.9 网络设备 network device 网络设备通过网络适配器和特定的网络协议来完成网络访问的设备。3.10 版本魔术信息 vermagic information 版本魔术信息是驱动程序内存储的、用来描述操作系统内核版本号以及基础内核配置的字符串。3.11
11、导出符号 export symbol 导出符号是操作系统内核模块导出的、可供其他模块中的函数使用的全局变量或者函数。3.12 GNU 编译器套件 GNU Compiler Collection GNU 编译器套件是由 GNU 开发的编程语言编译器,它包括 C、C+、Objective-C、Fortran、Java、Ada 和 Go 语言前端,也包括了这些语言的库(如 libstdc+,libgcj 等。)3.13 OPPS 信息 OPPS Information 操作系统内核发生严重错误时所提示的信息,包括错误发生时的各个常用寄存器的值,调用的堆栈,以及出错的可能原因。4 缩略语 下列缩略语适
12、用于本文件:ACPI:高级配置和电源管理接口(Advanced Configuration and Power Management Interface)CPU:中央处理器(Central Processing Unit)DKMS:动态内核模块支持(Dynamic Kernel Module Support)GNU:开源标准(GNUs Not Unix)GPL:GNU 通用公共许可证(GNU General Public License)I/O:输入/输出(Input/Output)NAPI:网络数据处理 API(New API)PMU:性能监视单元(Performance Monitorin
13、g Unit)5 核内驱动总体要求 5.1 编程要求 驱动程序代码应符合 GB/T 15272-1994 和 Linux 内核编程的相关要求,并采用系统内核提供的代码DB43/T 22602021 3 检查脚本来检查驱动程序代码的合规性。为了保证内核升级时其内部调用符号的可用性,驱动程序代码分为内核框架层和核心代码逻辑层,其中内核框架层实现与内核对接的部分,而核心代码逻辑层实现驱动模块的核心功能,编写时应符合以下原则:a)不使用内核的 API 接口和数据结构;b)不使用内核的框架代码;c)不进行内核版本的判断处理;d)不使用宏进行同架构内 CPU 的判断处理;e)二进制文件只包含需要保护的代码
14、。5.2 设备驱动模型 应基于设备驱动模型来进行驱动程序开发,设备驱动模型分类参见附录 A,设备和驱动程序均应挂载到总线上,并通过总线来实现对驱动程序和设备的管理。5.3 文件组织形式 应采用独立目录存放驱动程序的代码文件,驱动程序目录:a)应包含 Makefile 驱动程序构建文件,用于驱动程序的自动化编译;b)应使用.c 源码文件来保存驱动程序实现,若驱动程序的功能复杂,通过多个源码文件来分类存放驱动程序实现;c)应使用.h 头文件来声明驱动程序中的函数、数据结构和变量,应安装内核提供的 linux/init.h、linux/module.h 和 linux/kernel.h 头文件,当需
15、要调用内核功能时,驱动应使用上述头文件中提供的函数接口来请求内核功能;d)应使用 Kconfig 配置文件来描述驱动程序源码文件相关的内核配置菜单;e)宜使用 Readme 说明文档来介绍驱动程序的功能和使用方法。5.4 驱动程序实现 5.4.1 入口函数 驱动程序开发应定义和实现驱动程序的入口函数,驱动程序的入口函数应满足以下要求:a)应使用_init 初始化修饰符来修饰入口函数;b)应完成驱动程序的注册和加载操作;c)应调用内核提供的驱动程序总线注册函数来完成驱动程序的注册;d)应通过具体的返回值来表示驱动程序是否加载成功,加载失败的返回值宜定义为负值,不同的负值对应不同的错误原因;e)应
16、通过内核提供的 module_init()模块初始化函数来声明驱动程序的入口函数。驱动程序入口函数示例见附录 B.1。5.4.2 出口函数 驱动程序开发应定义和实现驱动程序的出口函数,驱动程序的出口函数应满足以下要求:a)应使用_exit 退出修饰符来修饰出口函数;b)应完成驱动的卸载操作;c)应打印卸载相关信息,无需通过返回值来注明驱动程序的卸载是否成功;d)应通过内核提供的 module_exit()模块退出函数来声明驱动程序的出口函数。DB43/T 22602021 4 驱动程序出口函数示例见附录 B.2。5.4.3 信息声明 驱动程序的加载代码中应包含驱动程序的信息声明,包括“模块许可
17、协议”、“版本”、“作者”以及“模块描述”等信息,信息声明示例见附录 B.3。5.4.4 remove 卸载函数 驱动程序应实现 remove 卸载函数,在 remove 卸载函数中实现对驱动程序申请的设备、内存以及sys 文件系统节点等资源的释放。卸载程序中的资源释放示例见附录 B.4。若驱动程序中注册了回调函数,则 remove 卸载函数中应包含注销回调函数的操作。5.4.5 核心数据结构的可扩展性 应通过以下方式来实现驱动程序核心数据的可扩展性:a)在数据结构中添加 reserved 保留字段;b)在数据结构中添加表示私有数据的指针,扩展时只需要修改该指针所指向的数据结构,而无需修改核心
18、数据结构。核心数据结构的可扩展性实现示例见附录 B.5。5.4.6 probe 探测函数 驱动程序应实现 probe 探测函数,用于完成设备驱动程序注册的最后收尾工作。在 probe 探测函数中进行硬件资源的获取、内存结构的映射以及设备的创建等操作时,应通过内核提供的内核操作函数接口进行,涉及的内核操作函数接口见附录 C。5.4.7 用户空间内存访问 若驱动程序需访问用户空间内存,应在访问前先使用 access_ok 检验函数来检查用户空间内存指针的有效性。5.4.8 调试统计变量 驱动程序开发时应添加必要的调试统计变量,以便于对驱动程序的调试测试。调试统计变量宜实现分级开关,以提供各种粒度的
19、调试测试选项。5.4.9 导出符号规范 驱 动 程序 应 使用 内核提 供 的 EXPORT_SYMBOL_GPL 宏或 EXPORT_SYMBOL 宏 来导 出 符号。EXPORT_SYMBOL_GPL 宏导出的符号适用于包含 GPL 许可的模块,EXPORT_SYMBOL 宏导出的符号适用于任何模块。示例:驱动导出符号的两种方式 EXPORT_SYMBOL(func1);EXPORT_SYMBOL_GPL(func2);5.5 第三方技术使用 驱动程序开发若涉及对第三方技术的使用,应在驱动程序正式开发前对所涉及的第三方技术进行效率、兼容性、稳定性等方面的测试,确保第三方技术的使用不会对驱动
20、程序的功能、性能造成不良影响。DB43/T 22602021 5 6 核内驱动具体要求 6.1 字符设备驱动程序 6.1.1 驱动程序框架 字符设备驱动程序框架见图 1。图 1 字符设备驱动程序框架 字符设备驱动包括以下部分:a)设备文件操作函数接口:字符设备驱动通过 file_operation 结构体函数集向用户空间提供设备文件操作函数接口。file_operation 结构体中的函数集用于实现驱动与/dev 下的字符设备节点联通,当用户空间的应用程序通过调用文件操作函数 open(打开)、write(写)、read(读)、close(关闭)对/dev 目录下字符设备节点进行操作时,会通过
21、 file_operation 结构体中的对应函数来通知驱动实现对字符设备的对应操作。b)内核空间的字符设备驱动程序。驱动程序直接与字符设备硬件打交道,负责实现设备注册、设备操作等硬件操作功能。6.1.2 开发要求 6.1.2.1 函数接口 为实现系统/dev 下的字符设备节点与驱动程序的联通,字符设备驱动程序应提供并实现与 llseek、read、write、open、close 等文件操作函数接口所对应的函数实现,并通过 file_operations 文件操作结构体将文件操作函数与驱动程序内的函数实现相关联。file_operations 文件操作结构体格式应符合附录 D.1 要求。6.
22、1.2.2 驱动程序注册 字符设备驱动程序应基于平台驱动模型注册,包含以下内容:DB43/T 22602021 6 a)应提前准备好驱动程序对应的主设备号,主设备号应使用内核已注册的主设备号之外的数值;b)应使用平台驱动结构 platform_driver 封装驱动程序信息;c)应使用平台驱动程序注册函数 platform_driver_register(drv)将驱动程序注册到平台总线的驱动程序链表中。6.1.2.3 字符设备注册 字符设备的注册应包含如下内容:a)预生成一个尚未被申请使用的设备号;b)预生成设备号的主设备号为对应的驱动程序的主设备号,从设备号应从 0 开始,宜根据驱动程序所
23、匹配的设备数量按序取值,最大取值不超过 1048575;c)应使用静态申请方式申请设备号;d)应对 cdev 结构体进行初始化,并将实现的 file_operations 函数结构体与 cdev 关联;e)针对注册的字符设备,应使用内核提供的函数组创建对应 sys 文件系统节点,且需对返回值做错误处理,若有多个从设备,应创建 class 类。6.1.2.4 驱动匹配 字符设备驱动程序开发应同时通过设备树和 ACPI 两种方式来封装设备信息,并将封装后的信息分别添加到“驱动-设备”匹配队列中。6.2 块设备驱动程序 6.2.1 驱动程序框架 块设备驱动程序框架分为三个层次,见图 2。图 2 块设
24、备驱动程序框架 a)通用块层:为各种类型的块设备建立一个统一的模型,接受上层发出的数据读写请求,并最终发出 I/O 请求。通用块层隐藏了底层硬件块设备的特性,为块设备提供了一个通用的抽象视图;DB43/T 22602021 7 b)输入输出调度层:接收通用块层发出的 I/O 请求,缓存请求并合并相邻的请求,根据设置好的调度算法,回调驱动层提供的请求处理函数,以处理具体的 I/O 请求;c)块设备驱动层:处理集体 I/O 请求,处理过程根据块设备类型的不同而有所不同。块设备驱动程序的一般处理流程应为:上层调用通用块层提供的接口提交 I/O 请求,这些请求首先被放入输入输出调度层的 I/O 调度队
25、列,经过合并和排序,最终将转换后的 I/O 请求派发到具体块设备驱动准备的等待队列,由块设备驱动进一步处理。6.2.2 开发要求 6.2.2.1 函数接口 块设备驱动程序的函数接口应符合以下要求:a)虚拟块设备的驱动程序可以不提供 probe 探测函数接口;b)若块设备驱动程序中需要对 I/O 请求进行特殊处理,则应提供并实现 I/O 处理函数;示例:I/O 处理函数接口 static blk_qc_t xxx_make_request(struct request_queue*q,struct bio*bio);c)块设备驱动程序应实现 I/O 中断请求对应的中断处理函数接口,虚拟块设备的驱
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DB43T 2260-2021 信息技术应用创新工程建设规范第 部分:驱动开发通用技术要求湖南省 DB43 2260 2021 信息技术 应用 创新 工程 建设 规范 部分 驱动 开发 通用 技术
链接地址:https://www.taowenge.com/p-89774818.html
限制150内