版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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 a)设备文件操作函数接口:字符设备驱动通read、write、open、close等文件作结构体将文件操作函数与驱动程序内的函数实现相关联。6b)应使用平台驱动结构platform_drc)应使用平台驱动程序注册函数platform_driver_r字符设备驱动程序开发应同时通过设备树和ACPI两种方式来封装设7 b)输入输出调度层:接收通用块层发出的I/O请求,缓存请求并合并相邻的请求,根据设置好staticblk_qc_txxx_make_request(structrequest_queue*q,strustaticirqreturn_tgdrom_command_interrupt(int平台设备驱动程序可分为平台控制器驱动和平台设备8平台设备驱动程序提供给应用层的接口应使用标准接口,提供的接口应有说明以及用例。d)slave从设备使用master主设9 b)网络设备接口层:向网络协议接口层提供的用于描述具体网络设备属a)sk_buff结构体是网络驱动程序框架中信息的载体,是网络分层模型中对数据进行层层打包b)net_device网络设备结构体用来描述一个网络设备,是设备接口层的核心,也是编写网络驱c)net_device_ops网络设备操作结构体定义了网络设备的操作方法集,其格式应符合附录D.2应根据实际业务特点和需要,按这两种方式之一进行中断 存设备的操作。应实现的显示帧缓存设备操作集结构体及应提供的设备操作函数接口格式应符合附录b)获取中断号,根据硬件手册规范,申请中断资源reque开源模块命名为:原始模块名-dkms_版本号a)除了在内核升级时保持不变的例如readl/writel/printk等最基本的工具函数外,不宜使用b)不宜使用内核的常见的框架代码;c)内核版本一般是通过编译时的宏进行判断的,除非一个内核版本发布一个二进制文件,否则a)应将核心逻辑层源码闭源,直接使用核心逻辑b)应复制源码以及封装二进制文件至编包目录中;d)应通过“dpkg-buildpackage-s 1234用于打印驱动软件开发,包含使用libcupsfilters56789123456提供相应的配置文件放置于指定目录下,以满足运行时的必要配置文件c)有新驱动库安装入系统时,要求驱动包自行向该配置d)配置文件中应指明打印机的具体型号,以及该型号的驱动库存放在操作系统e)驱动库应具有明确的标识符,安装于系统/usr/lib/kylin-printer/目录下,各厂商在此目录及对应的版本号,形成统一的组件列表及组件号版本。扫1234567用于获得系统库/模块的所有编译相关的信息,供扫描 123组件及对应的版本号,形成统一的组件列表及组件号版本。1234567用于获得系统库/模块的所有编译相关的信息,供打印8912{printk(“hellomodule!\********编写驱动程序需要实现的基础功能pci_register_driver(&driver}module_init(func_init);//声明入staticvoid__exit{***********关闭驱动程序初始化时占用的资源******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,consvoid__iomem*devm_ioremap(structdevice*dev,resource_size_toffvoid__iomem*devm_ior获取iomem资源voiddevm_iounmap(structdevice*dev,void__iomemvoiddevm_ioremap_release(structdevice*dev,voi释放iomem资源intplatform_get_irq(structplatform_device*dstaticinlinevoidclk_disstaticinlinelong__must_staticinlinebool__structnet_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/*超时时重新启动数据包发送过程或重新启动硬件等措施来恢复网络设备到正常状态显示帧缓存设备驱动程序中的显示帧缓存设备操作集结在各个接口函数中,显示帧缓存设备驱动程序应实现如下功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)/buiall: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.*.cmd KERNELDIR?=/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),##__VA_ARGSprintk(KERN_ALERTpr_fmt(fmt),##__VA_ARGSprintk(KERN_CRITpr_fmt(fmt),##__VA_ARGS__)printk(KERN_ERRpr_fmt(fmt),##__VA_ARGS_#definepr_warning(fprintk(KERN_WARNINGpr_fmt(fmt),##__VA_ARGS#definepr_notice(fmprintk(KERN_NOTICEpr_fmt(fmt),##__VA_ARGS_printk(KERN_INFOpr_fmt(fmt),##__VA_ARGS__)printk(KERN_CONTfmt,##__VA_ARGS__)OPPS信息是另外一种简便的调试方式,会将内核发生故障的现场打印出来,前提是需要计算 /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/ca
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 交通运输行业大气治理工作手册
- 锂电池热失控事故应急预案方案
- 泵站节能优化改造方案
- 水利灌溉泵站泵组调试方案
- ISOTS 212962026 油籽 兰德尔提取法测定含油量标准立项发展报告
- 食堂燃气泄漏应急演练课件
- 零碳园区绿电供应落地实施方案
- 个人信用借款担保合同6篇
- 办公楼电气火灾应急演练课件
- 污水处理技术培训讲义
- 2026浙江杭州胡庆余堂集团有限公司招聘6人笔试题库【巩固】附答案详解
- 国家能源集团《火力发电工程建设安全标准化图册》
- 校园超市经营投标方案(技术标)
- 2025年宜春市事业单位真题及答案
- 2026年北京市高考英语试卷(含答案及解析)
- 2026年档案职业技能大赛(理论知识)经典试题及答案
- 硅pu篮球场铺设专项施工方案
- 周三多-管理学:原理与方法(第七版),第三章
- 高考英语复习读后续写练习 善举篇 改变家乡为无法使用操场的孩子们带来福音 课件
- 煤矿岗位作业流程标准化手册2021
- 液化石油气重大危险源事故专项应急救援预案
评论
0/150
提交评论