版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ICS01.140.20ICS01.140.20CCSL70DB43/T2260—2021信息技术应用创新工程建设规范第9部分:驱动开发通用技术要求EngineeringspecificationfortheApplicationInnovationProjectofInformationTechnologyPart9:GeneraltechnicalrequirementsofdriverdevelopingI Ⅲ Ⅴ 1 1 1 2 2 2 3 3 3 4 5 5 6 7 9 请注意本文件的某些内容可能涉及专利。本文件的发布机构不承担识别专利的责任。——第6部分:操作系统软件兼容性通用技术要求;——第8部分:电子公文通用技术要求;V1信息技术应用创新工程建设规范第9部分:驱动开发通用技术要求本文件适用于国产操作系统上第三方驱动程序的开发,也为第三方驱动程序的调试验证提平台设备驱动模型platformd2版本魔术信息是驱动程序内存储的、用来描述操作系统内导出符号是操作系统内核模块导出的、可供其他模块中的函数使用的全局ACPI:高级配置和电源管理接口(AdvancedConfigurationandPowerManagementInterface)CPU:中央处理器(CentralProcessingDKMS:动态内核模块支持(DynamicKernelModuleSupporGPL:GNU通用公共许可证(GNUGeneralPublNAPI:网络数据处理API(NewAPI)PMU:性能监视单元(PerformanceMonitoringU3检查脚本来检查驱动程序代码的合规性。载到总线上,并通过总线来实现对驱动程序和设备应采用独立目录存放驱动程序的代码文件,驱动程序b)应使用.c源码文件来保存驱动程序实现,若驱动程序的功能复杂,通过多个源码文件来分类d)应使用Kconfig配置文件来描述驱动程序开发应定义和实现驱动程序的入口函数,驱动程序的入口函数应满足以驱动程序开发应定义和实现驱动程序的出口函数,驱动程序的出口函数应满足以c)应打印卸载相关信息,无需通过返回值来注明驱动程序的4“模块描述”等信息,信息声明示例见附录B.3。b)在数据结构中添加表示私有数据的指针,扩展时只需要修改该指针所指向的数据结构,而无需修改核心数据结构。核心数据结构的可扩展性实现示提供的内核操作函数接口进行,涉及的内核驱动程序开发时应添加必要的调试统计变量,以便于对驱动程序的EXPORT_SYMBOL_GPL宏导出的符号适用于包含GPEXPORT_SYMBOL_GPL(f5字符设备驱动程序框架见图1。用户空间调用设备文件操作函数接口内核空间硬件设备a)设备文件操作函数接口:字符设备驱动通过file_operation结构体函数集向用户空间提供设close(关闭)对/dev目录下字符设备节点进行操作时,会通过file_operation结构体中的read、write、open、close等文件操作函数接口所对应的函数实现,并通过file_operations文件操file_operations文件操作结构体格式应符合附录D.1要求。6a)应提前准备好驱动程序对应的主设备号,主设备号应使用内核已注册的主设备号之外的b)应使用平台驱动结构platform_driver封装驱动程序信息;c)应使用平台驱动程序注册函数platform_driver_register(drv)将驱动程序注册到平台总线的b)预生成设备号的主设备号为对应的驱动程序的主设备号,从设备号应从0开始,宜根据驱动程序所匹配的设备数量按序取值,最大取值不超过1048575;d)应对cdev结构体进行初始化,并将实现的file_oe)针对注册的字符设备,应使用内核提供的函数组创建对应sys文件系统节点,且需对返回值做错误处理,若有多个从设备,应创建class块设备驱动程序框架分为三个层次,见图2。块输入输出子系统a)通用块层:为各种类型的块设备建立7b)输入输出调度层:接收通用块层发出的I/O请求,缓存请求并合并相邻的请求,根据设置好staticblk_qc_txxx_make_request(structrequest_queue*q,strustaticirqreturn_tgdrom_command_interrupt(int平台设备驱动程序可分为平台控制器驱动和平台设备8用户空间驱动节点及文件系统函数接口平台设备驱动平台设备驱动内核空间总线接口平台设备驱动内核空间总线接口总线核心总线核心提供的对外接口应采用dev节点方式或sysfs节点方式。平台设备驱动程序应满足总线\设备\驱动的平台设备驱动模型,设备应注册在总线上.平台控制器驱动应注册成master主设备,控制器下设备驱动应注册成slave从设备,并使用master主设备提供的b)平台控制器设备驱动注册成总线master主设备的接口;c)控制器下设备驱动注册成总线slave从设备的接口;d)slave从设备使用master主设备xfer的接口。9述的信息。驱动程序加载标准的驱动程序加载应包括以下内容:a)使用设备树或者acpitable匹配的加载方法;b)使用标准的总线设备函数接口模型;c)驱动程序应提供设备树和acpitable匹配节点的方法。6.4网络设备驱动程序6.4.1驱动程序框架网络设备驱动程序框架分为网络协议接口层、网络设备接口层、提供实际功能的网络驱动接口层以及设备媒介层四层,见图4。接收数据包(中断处理)图4网络设备驱动程序框架a)网络协议接口层:向网络层协议提供统一的数据包收发接口,使得上层协议独立于具体的设备;b)网络设备接口层:向网络协议接口层提供的用于描述具体网络设备属性和操作的net_device结构体,该结构体是设备驱动功能层各函数的容器;c)网络驱动接口层:实现网络设备接口层net_device结构体中所声明的成员函数,驱使网络设备硬件完成相应动作的程序;d)设备媒介层是完成数据包发送和接收的物理实体,包括网络适配器和具体的传输媒介,根据设备驱动功能层中的函数在物理上驱动网络适配器等。6.4.2开发要求网络设备驱动程序开发应根据net_device网络设备结构体中声明的成员函数实现设备驱动功能层的相关函数接口,并将net_device网络设备结构体注册到系统内核中。网络设备驱动程序接口应包含初始化接口,发送接口和接收接口。a)分配及初始化网络设备net_device;c)注册/注销网络设备net_device;.2数据结构a)sk_buff结构体是网络驱动程序框架中信息的载体,是网络分层模型中对数据进行层层打包b)net_device网络设备结构体用来描述一个网络设备,是设备接口层的核心,也是编写网络驱c)net_device_ops网络设备操作结构体定义了网络设备的操作方法集,其格式应符合附录D.2网络设备的中断处理方式分为传统中断方式和NAPI处理方式两种,在进行网络设备中断处理时,显示帧缓存设备驱动程序框架见图5。帧缓存结构体显示帧缓存设备用户层驱动层硬件层注销帧缓冲区存设备的操作。应实现的显示帧缓存设备操作集结构体及应提供的设备操作函数接口格式应符合附录b)获取中断号,根据硬件手册规范,申请中断资源reque开源模块命名为:原始模块名-dkms_版本号a)除了在内核升级时保持不变的例如readl/writel/printk等最基本的工具函数外,不宜使用b)不宜使用内核的常见的框架代码;c)内核版本一般是通过编译时的宏进行判断的,除非一个内核版本发布一个二进制文件,否则a)应将核心逻辑层源码闭源,直接使用核心逻辑b)应复制源码以及封装二进制文件至编包目录中;d)应通过“dpkg-buildpackage-s6.7驱动程序的调试验证1234用于打印驱动软件开发,包含使用libcupsfilters56789123456提供相应的配置文件放置于指定目录下,以满足运行时的必要配置文件c)有新驱动库安装入系统时,要求驱动包自行向该配置d)配置文件中应指明打印机的具体型号,以及该型号的驱动库存放在操作系统e)驱动库应具有明确的标识符,安装于系统/usr/lib/kylin-printer/目录下,各厂商在此目录及对应的版本号,形成统一的组件列表及组件号版本。扫1234567用于获得系统库/模块的所有编译相关的信息,供扫描驱动,减少扫描仪驱动在不同操作系统版本上多次适配。扫描仪运行环境组件列表见表4。123组件及对应的版本号,形成统一的组件列表及组件号版本。1234567用于获得系统库/模块的所有编译相关的信息,供打印8912{printk(“hellomodule!\********编写驱动程序需要实现的基础功能pci_register_driver(&driver}module_init(func_init);//声明入{***********关闭驱动程序初始化时占用的资源******printk(“byebye%s!\n”,“module”}module_exit(func_exit);//声明出MODULE_LICENSE("GPL"MODULE_VERSION("版本");//MODULE_AUTHOR("作者");//可选MODULE_DESCRIPTION("对模块的描述");//可选unregister_chrdev_region(MKDEV(mem_major,0),MEMDEV_NR_DEVS);//释放设备号/*删除sys文件系统对应的字符设备节点device_destroy(class_memdev,MKDEV(me/*扩展时只需要修改该指针所指向的数据结构,而无需修改核心数据结构}MKDEV(ma,mi)intregister_chrdev_region(dev_tfrom,unsivoidcdev_init(structcdev*cdev,consvoidiomem*devm_ioremap(structdevice*de获取iomem资源voiddevm_iounmap(strucvoiddevm_ioremap_release(structdevice*dev,voi释放iomem资源intplatform_get_irq(structplatform_device*dstaticinlinevoidclk_disstructnet_device*alloc_etherdev(分配及初始化net_devicevoidfree_netdev(structnet_devicvoidether_setup(structnet_devicintregister_netdev(strvoidunregister_netdev(structnet_device*voidnetif_start_queue(structnet_devicvoidnetif_stop_queue(structnet_devic/*文件操作结构体,声明了文件操作函数接口与驱动内的函数实现的关联,xx为对应驱动名称。*/void*ndo_uninit)(structnet_devicint(*ndo_set_mac_addresint(*ndo_neigh_setup)(structnet/*超时时重新启动数据包发送过程或重新启动硬件等措施来恢复网络设备到正常状态显示帧缓存设备驱动程序中的显示帧缓存设备操作集结●设置时钟像素、水平同步和垂直同步等●设置行长度、光标等其他硬件参数●计算x、y偏移量d)fb_setcolreg函数●根据发送的blank信号来控制屏幕消隐的打开/关闭●实现矩形绘制功能g)fb_copyarea函数●实现数据拷贝功能h)fb_imageblit函数●实现绘图功能MAKE[0]="makeallKVERSION=$kernelvBUILT_MODULE_NAME[0]="cpDEST_MODULE_LOCATION[0]="/updobj-m:=cp210x.oKVERSION:=$(shelluname$(MAKE)-C/lib/modules/$(KVERSION)/buildM=$(MAKE)-C/lib/modules/$(KVERSION)/build[kylin@Kylin~]#格式:dk[kylin@Kylin~]#格式:dkmscp210x,1.0,4.4.13-20161212.kylin.5.server,aarcp210x,1.0,4.4.13-20161212.kyl[kylin@Kylin~]#格式:dkmsuni[kylin@Kylin~]#格式:dk然后查看状态,得到以下输出:cp210x,1.0,4.4.13-20161212.kylin.5.server,aar[kylin@Kylin~]#格式:dkmsremove[kylin@Kylin~]#格式注意:--all参数是将指定模块从所有内核中移除。如果只想移除某个内核版本的指定模块,那么可以使用-k<kernel-version>参数移除与指定内核版本如果需要系统在更新内核后能够自动编译模块,那ln-sf/usr/lib/dkms/dkms_autoinstaller/etc/init.d/dkmsystemctlenabledk建议在内核安装后进行以下操作,预先将所有第三方模块——闭源模块:版权比较敏感,只能提供二进制文件,适应性一般,原始模块命名为“包名例如开源的原始模块名为cp210x.ko1.0版本,使用DKMS技术编出的第三方模块包包名为cp210x-dkms_1.0_arm6Usageofkylin-dkms-creat-c源码是否为闭源。若为闭源,则需要加入developers@-d/home/developers/Packagedirectoryis"/home/developers/my-dkms/cp210x-dkms-closed-1.0".Packagedirectoryis"/tmp/build-dkms-package/cp210x-dkms-1.0".KDIR?=/lib/modules/$(shelluname-r)/bui$(MAKE)-C$(KDIR)M=$(rm-rf*.o*.ko*.depend*.mod.o*.mod.cModule.*developers@-d/home/develoPackagedirectoryis"/home/developers/my-dkms/cp210x-dkms-1[kylin@Kylin~]$cpcp210x.c/hoKERNELDIR?=/lib/modules/$(KERNELRELEASE)KERNELDIR?=/lib/modules/$(shelluname-r)/buall:cleanmodules#$(MAKE)-C$(KERNELDIR)SUBDIRS=$$(MAKE)-C$(KERNELD#$(MAKE)-C$(KERNELDIR)SUBDIRS=$(PWD)module[kylin@Kylin~]$cd/home/deve例如cp210x模块。该模块有一个源文件:cp210x.c,编译时使用的Makefile格式如下:KDIR?=/lib/modules/$(uname-r)/bui$(MAKE)-C$(KDIR)M=$(rm-rf*.o*.ko*.depend*.mod.o*.mod.cModule.*modules.*.*.ccp210x.mod.ccp210x.oMocp210x.kocp210x.mod.omdevelopers@-d/home/developers/Packagedirectoryis"/home/developers/my-dkms/cp210x-dkms-closed-1.0".[kylin@Kylin~]$cpcp210x.o/home/developers/my-dkms/cp210x-dKERNELDIR?=/lib/modules/$(KERNELRELEASE)KERNELDIR?=/lib/modules/$(shelluname-r)/bui$(MAKE)-C$(KERNELDIR)SUBDIRS#$(MAKE)-C$(KERNELDIR)SUBDIRS=$([kylin@Kylin~]$cd/home/developers/-o参数为:-o"a.o.dkmsb.o.dkmsc.oobj-m:=B.oKERNELDIR?=/lib/modules/$(shelluname-r)/buil$(MAKE)-C$(KERNELDIR)M=$(PWD)KBUILD_EXTRA_SYMBOLS=./Module.symverrm-rf*.o*~core.depend.*.cmdKERNELDIR?=/lib/modules/$(KERNELRELEASE)KERNELDIR?=/lib/modules/$(shelluname-r)/bui$(MAKE)-C$(KERNELDIR)SUBDIRS=$(PWD)KBUILD_$(MAKE)-C$(KERNELD#$(MAKE)-C$(KERNELDIR)SUBDIRS=$(行”makeclean”的时候Module.symvers被默认为编译中间文件而——重命名A模块的Module.symvers文件为A.symvers,并复制到src目录中;#cat/proc/sys/kerne第一个6表示级别高于6的消息才会被输出到控制台,第二个4表示如果printk没有指定日志#definepr_emerg(fmtprintk(KERN_EMERGpr_fmt(fmt),printk(KERN_ALERTpr_fmt(fmt),printk(KERN_CRITpr_fmt(fmt),printk(KERN_ERRpr_fmt(fmt),#definepr_warning(fprintk(KERN_WARNINGpr_fmt(fmt),#definepr_notice(fmprintk(KERN_NOTICEpr_fmt(fmt),printk(KERN_INFOpr_fmt(fmt),printk(KERN_CONTfmOPPS信息是另外一种简便的调试方式,会将内核发生故障的现场打印出来,前提是需要计算接串口,或者机器配置了netconsole等远程串口服务。/devices/pci0000:00/0000:00:01.0/0000:0d:00.0/0000:0e:01.0/0000:0f:00.1/sound/card0/inp/devices/pci0000:00/0000:00:01.0/0000:0d:00.0/0000:0e:01.0/0000:0f:00.1/sound/caDump信息很清晰的报告了错误发生点的信息,例如是否为User-Afte在没有串口线或者计算机无串口设备的情况下,netconsole是一关系,因此也可以主动调用函数调用栈信息来理清楚函Trace-cmd和kernelshark是ftrace前端工具,可以更为方便和高效地收集和提炼信息。例如追踪一个函数在内核中的调用关系和耗时,可以通过trace-cmdrecord-p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医学26年:心血管疾病死亡记录要点 心内科查房
- 医学26年:腹膜后疾病诊疗进展 查房课件
- 医学26年:出血性疾病诊疗进展 查房课件
- 2026年文化传媒AI内容生成创新报告
- 跨境电商2025年海外仓跨境电商仓储物流环保技术应用可行性研究报告
- 2026年人大制度说课稿
- 初中2025年说课稿郑和下西洋主题班会
- 7.2 数乘向量说课稿2025年中职数学基础模块下册人教版
- 2026年超能ESP完整测试题及答案
- 初中2025“思自信”主题班会说课稿
- 2025年作业学生宿舍楼综合布线设计方案解析
- 新疆三校生考试真题语文
- 患者跌倒坠床管理流程
- 人音版三年级下册音乐试题
- 公安机关保密协议
- 厂房转租合同模板协议
- 湖北省武汉市2024年中考物理真题试题(含答案)
- JCT 841-2024《耐碱玻璃纤维网布》
- BB∕T 0047-2018 气雾漆行业标准
- CTD申报资料撰写模板:模块三之3.2.S.3特性鉴定
- 预防接种工作规范(2023年版)解读课件
评论
0/150
提交评论