CN108008945A - 一种linux系统下pci设备驱动开发方法 - Google Patents
一种linux系统下pci设备驱动开发方法 Download PDFInfo
- Publication number
- CN108008945A CN108008945A CN201711324797.0A CN201711324797A CN108008945A CN 108008945 A CN108008945 A CN 108008945A CN 201711324797 A CN201711324797 A CN 201711324797A CN 108008945 A CN108008945 A CN 108008945A
- Authority
- CN
- China
- Prior art keywords
- driving
- purpose project
- device model
- self
- pci
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了LINUX系统下PCI设备驱动开发方法,其中,包括:选择新建工程路径,用于指定存放目标工程,将驱动开发框架的模板复制到用户指定的路径作为目标工程,并以此为基础开展后续过程;将所有工程参数输入到目标工程,根据目标设备PCI控制器的信息填写厂商号、设备号、子厂商号以及子设备号,生成设备模型;将设备模型加入目标工程,将已选择设备模型的源代码加入到目标工程中的设备核心驱动、设备功能库和测试软件中,如果没有找到合适的设备模型,则跳过此过程;为新增的自定义IO控制命令生成源代码并加入到目标工程中的设备核心驱动、设备功能库和测试软件中;设备模型中的自定义IO控制命令和开发者新增的自定义IO控制命令显示在IO控制命令列表中;生成的目标工程。
Description
技术领域
本发明涉及一种LINUX系统下软件开发技术,尤其涉及一种PCI设备驱动开发方法。
背景技术
PCI局部总线规范是一种替代ISA总线的技术规范,它能够在计算机与外设之间提供性能更好的数据传输,且使数据传输独立于中央处理器体系平台,支持设备枚举实现设备的即插即用。随着通用处理器和嵌入式技术的迅猛发展,计算机系统周边配备了越来越多的外设,目前大多数计算机系统中的CPU和外设都会使用PCI总线进行连接,使PCI总线成为计算机系统中应用最广泛、最成熟的总线标准。Linux系统经过多年的发展,已经非常成熟和稳定,在通用PC和嵌入式等多个领域得到了大量的应用,然而由于PCI设备丰富,功能简繁不一,基于Linux操作系统开发PCI设备驱动程序也是各式各样,造成代码的可读性差、移植困难等缺点。
发明内容
本发明的目的在于提供一种LINUX系统下PCI设备驱动开发方法,用于解决上述现有技术的问题。
本发明一种LINUX系统下PCI设备驱动开发方法,其中,包括:选择新建工程路径,用于指定存放目标工程,将驱动开发框架的模板复制到用户指定的路径作为目标工程,并以此为基础开展后续过程;将所有工程参数输入到目标工程,根据目标设备PCI控制器的信息填写厂商号、设备号、子厂商号以及子设备号,生成设备模型;将设备模型加入目标工程,将已选择设备模型的源代码加入到目标工程中的设备核心驱动、设备功能库和测试软件中,如果没有找到合适的设备模型,则跳过此过程;为新增的自定义IO控制命令生成源代码并加入到目标工程中的设备核心驱动、设备功能库和测试软件中;设备模型中的自定义IO控制命令和开发者新增的自定义IO控制命令显示在IO控制命令列表中;生成的目标工程,包含设备核心驱动、设备功能库和测试软件三个子工程,每个子工程都包含编译脚本Makefile,以在Linux系统文本终端中进行编译,设备核心驱动编译生成内核模块、设备功能库生成共享库以及可执行程序。
本发明提供的一种LINUX系统下PCI设备驱动开发方法,以可视化的方式为驱动开发者提供软件开发功能,在PCI设备驱动开发和调试的过程中,开发者只需要关注PCI设备功能的实现,使用极少的代码即可以完成驱动软件的开发。通过分析Linux操作系统下PCI设备驱动程序的特点,开发一套通用PCI设备驱动模板,并且设计一套自动化开发方案贯穿于PCI设备驱动的信息描述、功能设计、代码生成、安装卸载等过程,适于了通用计算机系统和嵌入式计算机系统。
附图说明
图1所示为驱动开发系统的关系图;
图2所示为驱动开发流程图;
图3所示为驱动开发框架设计分层的示意图;
图4所示为设备核心驱动的结构示意图;
图5所示为第一工程配置中心示意图;
图6所示为第二工程配置中心示意图;
图7所示为第三工程配置中心示意图;
图8所示为第四工程配置中心示意图。
具体实施方式
为使本发明的目的、内容、和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
图1所示为LINUX系统下PCI设备驱动开发系统的模块图,如图1所示,所示为驱动开发流程图,图3所示为驱动开发框架设计分层的示意图;图4所示为设备核心驱动的结构示意图,如图1至图4所示,本发明LINUX系统下PCI设备驱动3开发系统包括:驱动开发框架1,提供PCI设备驱动3开发和调试的三个模板工程。设备模型库4,提供不同的PCI设备驱动3的功能源代码。工程配置中心2,以驱动开发框架1和设备模型库4为输入,并根据开发者设置的参数对上述输入进行源码层次的修改,最终集成新PCI设备驱动3工程。
如图1至图4所示,当开发者使用本发明提供的PCI设备驱动开发系统时,需要经历以下四个过程:首先选择新建工程路径;然后进入设备信息配置单元21输入工程所需要的参数;然后进入设备模型选择单元22选择设备模型;然后进入自定义IO控制单元23定义新的IO控制命令;最后生成新的设备驱动。
图5所示为第一工程配置中心示意图,如图1至图5所示,,选择新建工程路径,用于指定存放目标工程,当开发者执行该过程时,工程配置中心2将驱动开发框架1的模板复制到用户指定的路径作为目标工程,并以此为基础开展后续过程。
图6所示为第二工程配置中心示意图,如图6所示,设备信息配置单元21,用于开发者输入工程参数,当开发者执行该过程时,工程配置中心2会将所有工程参数输入到目标工程。开发都需要根据目标设备PCI控制器的信息填写该过程中厂商号、设备号、子厂商号、子设备号,图6的输入会使得最后生成的设备驱动程序在执行时无法扫描到目标设备。
图7所示为第三工程配置中心示意图,如图7所示,设备模型选择单元22,用于将设备模型加入目标工程,当开发者执行该过程时,工程配置中心2会将已选择设备模型的源代码相应的加入到目标工程中的设备核心驱动、设备功能库和测试软件中。如果没有找到合适的设备模型,开发都可以选择跳过此过程。
图8所示为第四工程配置中心示意图,如图8所示,自定义IO控制单元23,用于开发者定义新的扩展的IO控制命令,当开发者执行该过程时,工程配置中心2会为新增的自定义IO控制命令生成源代码并加入到目标工程中的设备核心驱动、设备功能库和测试软件中。设备模型中的自定义IO控制命令和开发者新增的自定义IO控制命令都会显示在IO控制命令列表中。
当开发者完成工程配置中心2的上述过程后,点击生成完成工程配置。生成的目标工程包含设备核心驱动、设备功能库和测试软件三个子工程,每个子工程都包含编译脚本Makefile,可以在Linux系统文本终端中进行编译,设备核心驱动编译生成内核模块、设备功能库生成共享库、测试软件生成可执行程序。
本发明另外提代一种PCI设备驱动3的自动安装方法,该方法是可逆的,自动安装方法实施步骤如下:
将内核模块复制到操作系统内核模块目录(/lib/modules/KERNEL_NAME/kernel/drivers/pci);
执行depmod命令更新内核模块依赖关系;
将共享库复制到操作系统用户库目录(/usr/lib);
修改内核模块列表文件(/etc/modules)实现内核模块注册;
编写设备发现脚本用于加入普通用户对设备的写属性;
修改系统自启服务列表(/etc/init.d),实现设备发现脚本开机时自启动。
本发明的目的是提供一种LINUX系统下PCI设备驱动开发方法,充分利用了Linux操作系统的特点和灵活性,以一种可视化的编辑环境为驱动软件开发者提供驱动开发和测试功能,在进行开发的过程中,能够最大化的减少驱动软件开发者设计、编写、调试PCI设备驱动3的时间。
图7所示为设备核心驱动的结构示意图,如图7所示,本发明提供的一种LINUX系统下PCI设备驱动开发系统,在可视化的编辑环境中实现,具体包括:
工程配置中心2,用于以向导界面展示给开发者,可以进行PCI设备类型选择的开发配置环境。
驱动开发框架1,分层次地提供设备驱动开发和调试的软件工程,用于描述PCI设备驱动3程序过程中的通用部分,其作为工程配置中心2生成PCI设备驱动3程序的模板。
设备模型库4,提供不同的PCI设备驱动3模型,包括串口设备驱动模型、数模转换设备驱动模型、开关量设备驱动模型、1553B总线设备驱动模型等,用于描述PCI设备驱动3程序的专用部分,其与驱动开发框架1被工程配置中心2集成并创建新的PCI设备驱动3软件。
其中,工程配置中心2具体包括:
设备信息配置单元21,用于软件开发者输入设备的基本信息,这些信息包含驱动名称、设备名称、软件版本、软件作者、厂商号、设备号、子厂商号、子设备号、设备描述、最大设备数、最大资源数等。
设备模型选择单元22,用于软件开发者选择设备模型库4的设备模型。
自定义IO控制单元23,在继承已经选择的设备模型中的自定义IO控制命令基础上,软件开发者可以自定义新的IO控制命令。
图8所示为驱动开发框架1设计分层的示意图,如图8所示,其中,驱动开发框架1包含设备驱动开发和调试所需的三个层次的软件工程,即设备核心驱动、设备功能库和测试软件,设备核心驱动向设备功能库提供基本读写接口以及自定义的IO控制接口,设备功能库向测试软件提供设备功能接口。
设备核心驱动负责驱动底层PCI硬件,实现设备的基本读写功能以及为自定义的输入输出控制功能提供代码框架,具体包括:
总线驱动适配单元,负责设备核心驱动的初始化和清理、设备的初始化、探测、删除、暂停、恢复和中断处理,当探测到PCI设备时进行结点的自动创建和特殊配置;
标准IO控制单元,实现PCI设备的打开、关闭、读取、写入以及自定义IO控制命令的分发;
自定义IO控制单元23,使用一系列PCI读取和写入功能实现自定义IO控制命令。
其中,设备模型库4由多种设备驱动模型的组合。设备模型库4将每种设备驱动源代码中的自定义IO控制部分的代码片段进行抽取,形成设备驱动模型。与驱动开发框架1类似,设备驱动模型的代码片段也分为三个层次,即设备核心驱动代码、设备功能库代码和测试软件代码。
本发明提供的一种LINUX系统下PCI设备驱动开发方法,以可视化的方式为驱动开发者提供软件开发功能,在PCI设备驱动开发和调试的过程中,开发者只需要关注PCI设备功能的实现,使用极少的代码即可以完成驱动软件的开发。通过分析Linux操作系统下PCI设备驱动程序的特点,开发一套通用PCI设备驱动模板,并且设计一套自动化开发方案贯穿于PCI设备驱动的信息描述、功能设计、代码生成、安装卸载等过程,适于了通用计算机系统和嵌入式计算机系统。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
Claims (1)
1.一种LINUX系统下PCI设备驱动开发方法,其特征在于,包括:
选择新建工程路径,用于指定存放目标工程,将驱动开发框架的模板复制到用户指定的路径作为目标工程,并以此为基础开展后续过程;
将所有工程参数输入到目标工程,根据目标设备PCI控制器的信息填写厂商号、设备号、子厂商号以及子设备号,生成设备模型;
将设备模型加入目标工程,将已选择设备模型的源代码加入到目标工程中的设备核心驱动、设备功能库和测试软件中,如果没有找到合适的设备模型,则跳过此过程;
为新增的自定义IO控制命令生成源代码并加入到目标工程中的设备核心驱动、设备功能库和测试软件中;设备模型中的自定义IO控制命令和开发者新增的自定义IO控制命令显示在IO控制命令列表中;
生成的目标工程,包含设备核心驱动、设备功能库和测试软件三个子工程,每个子工程都包含编译脚本Makefile,以在Linux系统文本终端中进行编译,设备核心驱动编译生成内核模块、设备功能库生成共享库以及可执行程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711324797.0A CN108008945A (zh) | 2017-12-13 | 2017-12-13 | 一种linux系统下pci设备驱动开发方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711324797.0A CN108008945A (zh) | 2017-12-13 | 2017-12-13 | 一种linux系统下pci设备驱动开发方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108008945A true CN108008945A (zh) | 2018-05-08 |
Family
ID=62058457
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711324797.0A Pending CN108008945A (zh) | 2017-12-13 | 2017-12-13 | 一种linux系统下pci设备驱动开发方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108008945A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109270846A (zh) * | 2018-10-22 | 2019-01-25 | 赵永存 | 基于流程图的自动化设备软件快速开发系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1725177A (zh) * | 2004-07-21 | 2006-01-25 | 中国科学院软件研究所 | 嵌入式设备集成开发系统及其使用方法 |
CN1928816A (zh) * | 2006-09-26 | 2007-03-14 | 武汉大学 | 嵌入式系统软件的模型驱动与构件化开发方法 |
KR20080041373A (ko) * | 2006-11-07 | 2008-05-13 | 한국전자통신연구원 | 디바이스 드라이버 개발 지원 방법 및 시스템 |
CN101630343A (zh) * | 2009-08-18 | 2010-01-20 | 中兴通讯股份有限公司 | 仿真方法及系统 |
CN102253834A (zh) * | 2011-07-05 | 2011-11-23 | 广东星海数字家庭产业技术研究院有限公司 | 一种基于数字电视的Linux硬件设备驱动系统 |
CN103544005A (zh) * | 2013-09-10 | 2014-01-29 | Tcl集团股份有限公司 | 一种Android自定义控件的扩展开发方法及装置 |
-
2017
- 2017-12-13 CN CN201711324797.0A patent/CN108008945A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1725177A (zh) * | 2004-07-21 | 2006-01-25 | 中国科学院软件研究所 | 嵌入式设备集成开发系统及其使用方法 |
CN1928816A (zh) * | 2006-09-26 | 2007-03-14 | 武汉大学 | 嵌入式系统软件的模型驱动与构件化开发方法 |
KR20080041373A (ko) * | 2006-11-07 | 2008-05-13 | 한국전자통신연구원 | 디바이스 드라이버 개발 지원 방법 및 시스템 |
CN101630343A (zh) * | 2009-08-18 | 2010-01-20 | 中兴通讯股份有限公司 | 仿真方法及系统 |
CN102253834A (zh) * | 2011-07-05 | 2011-11-23 | 广东星海数字家庭产业技术研究院有限公司 | 一种基于数字电视的Linux硬件设备驱动系统 |
CN103544005A (zh) * | 2013-09-10 | 2014-01-29 | Tcl集团股份有限公司 | 一种Android自定义控件的扩展开发方法及装置 |
Non-Patent Citations (1)
Title |
---|
新一: "利用WinDriver开发PCI设备驱动程序", 《HTTPS://WWW.CNBLOGS.COM/SUNCOOLCAT/P/3365996.HTML》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109270846A (zh) * | 2018-10-22 | 2019-01-25 | 赵永存 | 基于流程图的自动化设备软件快速开发系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Deitel | Java how to program | |
US7945895B2 (en) | Graphical programs with FIFO structure for controller/FPGA communications | |
US11579856B2 (en) | Multi-chip compatible compiling method and device | |
CN109408354B (zh) | 应用组件的数据处理方法和装置 | |
US20060036799A1 (en) | Multi-platform development and execution of graphical programs | |
US20050223360A1 (en) | System and method for providing a generic user interface testing framework | |
CN107832059B (zh) | 一种基于Makefile的代码静态分析方法和装置 | |
JPH08512152A (ja) | インクリメンタル生成システム | |
CN103718155A (zh) | 运行时系统 | |
CN104350475A (zh) | 可视化的代码审阅 | |
KR20070039877A (ko) | 콘텐츠를 생성하기 위한 자동 이미지 캡처 | |
US20050229161A1 (en) | Generic user interface testing framework with load-time libraries | |
CN111338925A (zh) | 小程序测试方法及装置、系统、电子设备和存储介质 | |
Lacamera | Embedded Systems Architecture: Explore architectural concepts, pragmatic design patterns, and best practices to produce robust systems | |
US20050228644A1 (en) | Generic user interface testing framework with rules-based wizard | |
KR101409528B1 (ko) | Mda 기반 스마트 크로스 플랫폼 어플리케이션 저작 방법 및 장치 | |
EP3563232A1 (en) | Methods and systems for verifying a software program | |
CN108089854A (zh) | 一种linux系统下pci设备驱动开发系统 | |
US20210026609A1 (en) | Support device and non-transitory computer-readable recording medium | |
CN108008945A (zh) | 一种linux系统下pci设备驱动开发方法 | |
CN114201382A (zh) | 测试用例生成方法、装置、存储介质和电子设备 | |
CN103617063A (zh) | 一种移动终端的软件更新方法和装置 | |
CN110865573A (zh) | 一种基于python的控制系统 | |
CN112162921B (zh) | 一种工业自动化测试与控制系统 | |
CN105446788A (zh) | 一种信息处理方法及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20180508 |
|
RJ01 | Rejection of invention patent application after publication |