CN109522056A - VxWorks系统下大容量存储设备的主机控制器驱动实现方法 - Google Patents

VxWorks系统下大容量存储设备的主机控制器驱动实现方法 Download PDF

Info

Publication number
CN109522056A
CN109522056A CN201811352220.5A CN201811352220A CN109522056A CN 109522056 A CN109522056 A CN 109522056A CN 201811352220 A CN201811352220 A CN 201811352220A CN 109522056 A CN109522056 A CN 109522056A
Authority
CN
China
Prior art keywords
function
host controller
pci
host
address
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.)
Granted
Application number
CN201811352220.5A
Other languages
English (en)
Other versions
CN109522056B (zh
Inventor
赵昶宇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tianjin Jinhang Computing Technology Research Institute
Original Assignee
Tianjin Jinhang Computing Technology Research Institute
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tianjin Jinhang Computing Technology Research Institute filed Critical Tianjin Jinhang Computing Technology Research Institute
Priority to CN201811352220.5A priority Critical patent/CN109522056B/zh
Publication of CN109522056A publication Critical patent/CN109522056A/zh
Application granted granted Critical
Publication of CN109522056B publication Critical patent/CN109522056B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4411Configuring for operating with peripheral devices; Loading of device drivers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/382Information transfer, e.g. on bus using universal interface adapter
    • G06F13/385Information transfer, e.g. on bus using universal interface adapter for adaptation of a particular data processing system to different peripheral devices

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Information Transfer Systems (AREA)

Abstract

本发明涉及一种VxWorks系统下大容量存储设备的主机控制器驱动实现方法,属于嵌入式通信技术领域。本发明首先利用VxWorks系统下的BSP取代PCI配置空间,裁剪掉系统中调用PCI总线的相关函数,实现对主机控制器的直接访问;然后将CPU地址映射为PCI地址,利用物理地址到虚拟地址的转换函数得到主机控制器初始化所用的寄存器基地址,并修改主机控制器中断函数;最后,利用主机控制器端口路由控制逻辑将不同类型的HCD挂接到USBD上,实现对低速、全速和高速三种传输速率的支持。本发明提出的方法能够解决基于PCI主机控制器传输速率较慢的问题,同时也为实现非PCI主机控制器在VxWorks下的驱动开发提供了较好的解决方案,提高了大容量存储设备的读写速度。

Description

VxWorks系统下大容量存储设备的主机控制器驱动实现方法
技术领域
本发明属于嵌入式通信技术领域,具体涉及一种VxWorks系统下大容量存储设备的主机控制器驱动实现方法。
背景技术
通用串行总线(USB)是一种用于连接计算机与外围设备的串行接口标准,具有结构简单、配置灵活、即插即用、支持热插拔、可靠性高、成本低等优点。基于VxWorks嵌入式操作系统完成USB接口主机控制器端的驱动设计和开发,能够很好的支持与USB外设的通信访问和控制。
目前VxWorks嵌入式操作系统下提供的USB主机控制器驱动程序都是基于PCI总线实现的,这些驱动程序不能直接应用于非PCI 总线架构的USB主机控制器上,需要完成驱动程序在非PCI主机控制器上的移植工作,而且这些PCI主机控制器驱动程序传输速率较慢或者不满足传输速率要求。此外,大多数非PCI主机控制器驱动程序只能实现对低速和全速存储设备的支持,不支持大容量存储设备或不满足高速数据传输的要求。
为了能够在VxWorks嵌入式操作系统下实现非PCI主机控制器驱动程序的开发,使得该驱动程序能够同时支持低速、全速和高速三种传输速率的存储设备,需要提出一种VxWorks系统下大容量存储设备的主机控制器驱动实现方法。
发明内容
(一)要解决的技术问题
本发明要解决的技术问题是:如何设计一种非PCI主机控制器驱动程序的实现方法,使得非PCI主机控制器驱动程序能够同时支持低速、全速和高速三种传输速率的存储设备。
(二)技术方案
为了解决上述技术问题,本发明提供了一种VxWorks系统下大容量存储设备的主机控制器驱动实现方法,包括以下步骤:
S1:将BSP中对PCI总线的相关操作屏蔽掉,利用BSP取代配置空间,完成记录总线读写状态和数据结构改变操作;
S2:利用物理地址到虚拟地址的转换函数得到主机控制器初始化所用的寄存器基地址;把CPU地址映射为PCI地址,将需要转换的地址值直接作为函数的返回值;修改主机控制器中断函数,使用 VxWorks提供的intConnect()函数直接进行中断挂接;
S3:利用主机控制器端口路由控制逻辑实现对低速、全速和高速三种传输速率的支持。
优选地,步骤S1具体为:
(1)修改主机处理器中的每一个PCI I/O地址和内存地址的偏移量;
(2)修改主机控制器初始化部分,将usbPciClassFind()函数的第三个参数编程接口修改为0x80,表示非PCI类型主机控制器,第五个参数驱动总线号指针指向usb_hcd_bus_info数据结构,第六个参数PCI设备号和第七个参数PCI功能号设置为 NULL,其余参数不变;
(3)注释掉usbPciConfigHeaderGet()函数,手动配置PCI配置头 pciCfgHdr,即设置寄存器基地址pciCfgHdr.baseReg[0]和中断向量号pciCfgHdr.intLine。
优选地,步骤S2具体为:
(1)在将HCD挂接到USBD的过程中,调用fncAttach()函数时,所有连接到主机控制器的信息都存储在HCD_HOST类型的结构体中,主机控制器寄存器基地址就在该结构体中,通过调用物理地址到虚拟地址的转换函数CACHE_DRV_PHYS_TO_VIRT 将物理地址转换成虚拟地址;
(2)在PCI主机控制器中,调用usbMemToPci将虚拟地址转换成物理地址,而在非PCI主机控制器中,直接使用虚拟地址而不用转换;
(3)在非PCI主机控制器中将中断向量号与相应的中断服务程序直接关联,用VxWorks系统提供的intConnect()函数直接注册,不用调用usbPciIntConnect()中断函数。
优选地,当非PCI控制器内包含一个EHCI和一个或多个UHCI,或包含一个EHCI和一个或多个OHCI时,一旦这些驱动被加载完成, EHCI主机控制器接口函数fncAttach()函数被USBD调用,EHCI主机控制器被设置成所有端口的所有者,当有大容量存储设备接入时,USBD 的root hub状态检测函数通过获取端口状态、复位,然后再次获取端口状态操作,首先调用EHCI主机控制器的rootGetStatus()函数检测该设备类型,若检测到是高速设备,则保持对该端口的控制;若检测到不是高速设备,则放弃端口的控制权,然后调用UHCI主机控制器或 OHCI主机控制器的rootGetStatus()函数检测设备类型,完成路由的切换;
在确定了大容量存储设备的类型后,调用 usbdHcdAttach(execFunc,&pciCfgHdr,pToken)函数将主机控制器驱动连接到USBD上。
优选地,usbdHcdAttach(execFunc,&pciCfgHdr,pToken)函数中, execFunc参数的值根据主机控制器驱动类型EHCI、OHCI或UHCI而定。
优选地,usbdHcdAttach(execFunc,&pciCfgHdr,pToken)函数中,pToken参数的值根据主机控制器驱动类型EHCI、OHCI或UHCI 而定。
(三)有益效果
本发明首先利用VxWorks系统下的BSP取代PCI配置空间,裁剪掉系统中调用PCI总线的相关函数,实现对主机控制器的直接访问;然后将CPU地址映射为PCI地址,利用物理地址到虚拟地址的转换函数得到主机控制器初始化所用的寄存器基地址,并修改主机控制器中断函数;最后,利用主机控制器端口路由控制逻辑将不同类型的HCD挂接到USBD上,实现对低速、全速和高速三种传输速率的支持。本发明提出的方法能够解决基于PCI主机控制器传输速率较慢的问题,同时也为实现非PCI主机控制器在VxWorks下的驱动开发提供了较好的解决方案,提高了大容量存储设备的读写速度。
附图说明
图1是本发明的总体方法流程图;
图2是本发明中的USB2.0主机协议栈原理图;
图3是本发明中USB2.0主机控制器原理图。
具体实施方式
为使本发明的目的、内容、和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
针对VxWorks下USB主机控制器驱动不能应用于非PCI主机控制器,以及大多数PCI主机控制器USB驱动传输速率较慢的问题,本发明提出了一种VxWorks系统下大容量存储设备的主机控制器驱动实现方法。如图1所示,本发明提供的一种VxWorks系统下大容量存储设备的主机控制器驱动实现方法,包括以下步骤:
S1:屏蔽PCI相关函数
传统的PCI主机控制器通过自身支持的PCI接口读取命令,传输给USB硬件设备,并通过PCI配置空间得到中断服务程序到中断行的挂接及解挂、主机控制器的基地址以及中断向量号。而由于非PCI 主机控制器没有配置空间的概念,因此需要将BSP中对PCI总线的相关操作屏蔽掉,利用BSP取代配置空间,完成记录总线读写状态和数据结构改变等操作,即主要完成以下工作:
(1)修改主机处理器中的每一个PCI I/O地址和内存地址的偏移量;
(2)修改主机控制器初始化部分,将usbPciClassFind()函数的第三个参数(编程接口)修改为0x80(表示非PCI类型主机控制器),第五个参数(驱动总线号指针)指向usb_hcd_bus_info 数据结构,第六个参数(PCI设备号)和第七个参数(PCI功能号)设置为NULL,其余参数不变;
(3)注释掉usbPciConfigHeaderGet()函数,手动配置PCI配置头 pciCfgHdr,即设置pciCfgHdr.baseReg[0](寄存器基地址)和 pciCfgHdr.intLine(中断向量号)。
S2:地址变换和中断函数挂接
本步骤中,利用物理地址到虚拟地址的转换函数得到主机控制器初始化所用的寄存器基地址;把CPU地址映射为PCI地址,将需要转换的地址值直接作为函数的返回值;修改主机控制器中断函数,使用 VxWorks提供的intConnect()函数直接进行中断挂接。
具体为:
(1)在将HCD挂接到USBD的过程中,调用fncAttach()函数时,所有连接到主机控制器的信息都存储在HCD_HOST类型的结构体中,主机控制器寄存器基地址就在该结构体中,通过调用物理地址到虚拟地址的转换函数CACHE_DRV_PHYS_TO_VIRT 将物理地址转换成虚拟地址;
(2)在PCI主机控制器中,调用usbMemToPci将虚拟地址转换成物理地址,而在非PCI主机控制器中,直接使用虚拟地址而不用转换;
(3)在非PCI主机控制器中将中断向量号与相应的中断服务程序直接关联,用VxWorks系统提供的intConnect()函数直接注册,不用调用usbPciIntConnect()中断函数。
S3:利用主机控制器端口路由控制逻辑实现对低速、全速和高速三种传输速率的支持
本步骤中,在EHCI HCD被加载时,首先由EHCI主机控制器接管所有端口,然后USBD通过获取端口状态、复位、再次获取端口状态的操作对存储设备类型进行识别,根据识别结果决定端口由哪个主机控制器控制,并通过usbdHcdAttach()函数对不同类型的HCD进行连接,实现对低速、全速和高速三种传输速率的支持。
具体而言,EHCI是为了支持USB2.0的高速模式而开发的主机控制器接口,它本身并不支持工作在低速和全速模式下的USB设备。如果大容量存储设备需要支持低速、全速和高速三种传输速率,必须有一个EHCI驱动支持高速通信,同时还需要一个OHCI驱动或者UHCI 驱动来处理主机控制器的低速与全速通信。USB2.0主机协议栈原理图如图2所示。
当非PCI控制器内包含一个EHCI和一个或多个UHCI(或OHCI) 时,一旦这些驱动被加载完成,EHCI主机控制器接口函数fncAttach() 函数被USBD调用,EHCI主机控制器被设置成所有端口的所有者。当有大容量存储设备接入时,USBD的root hub状态检测函数通过获取端口状态、复位,然后再次获取端口状态操作,首先调用EHCI主机控制器的rootGetStatus()函数检测该设备类型,若检测到是高速设备,则保持对该端口的控制;若检测到不是高速设备,则放弃端口的控制权,然后调用UHCI主机控制器或OHCI主机控制器的rootGetStatus()函数检测设备类型,完成路由的切换。USB2.0主机控制器原理图如图3所示。
在确定了大容量存储设备的类型后,调用 usbdHcdAttach(execFunc,&pciCfgHdr,pToken)函数将主机控制器驱动连接到USBD上。其中,execFunc和pToken参数的值根据主机控制器驱动类型(EHCI、OHCI或UHCI)而定。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。

Claims (6)

1.一种VxWorks系统下大容量存储设备的主机控制器驱动实现方法,其特征在于,包括以下步骤:
S1:将BSP中对PCI总线的相关操作屏蔽掉,利用BSP取代配置空间,完成记录总线读写状态和数据结构改变操作;
S2:利用物理地址到虚拟地址的转换函数得到主机控制器初始化所用的寄存器基地址;把CPU地址映射为PCI地址,将需要转换的地址值直接作为函数的返回值;修改主机控制器中断函数,使用VxWorks提供的intConnect()函数直接进行中断挂接;
S3:利用主机控制器端口路由控制逻辑实现对低速、全速和高速三种传输速率的支持。
2.如权利要求1所述的方法,其特征在于,步骤S1具体为:
(1)修改主机处理器中的每一个PCII/O地址和内存地址的偏移量;
(2)修改主机控制器初始化部分,将usbPciClassFind()函数的第三个参数编程接口修改为0x80,表示非PCI类型主机控制器,第五个参数驱动总线号指针指向usb_hcd_bus_info数据结构,第六个参数PCI设备号和第七个参数PCI功能号设置为NULL,其余参数不变;
(3)注释掉usbPciConfigHeaderGet()函数,手动配置PCI配置头pciCfgHdr,即设置寄存器基地址pciCfgHdr.baseReg[0]和中断向量号pciCfgHdr.intLine。
3.如权利要求1所述的方法,其特征在于,步骤S2具体为:
(1)在将HCD挂接到USBD的过程中,调用fncAttach()函数时,所有连接到主机控制器的信息都存储在HCD_HOST类型的结构体中,主机控制器寄存器基地址就在该结构体中,通过调用物理地址到虚拟地址的转换函数CACHE_DRV_PHYS_TO_VIRT将物理地址转换成虚拟地址;
(2)在PCI主机控制器中,调用usbMemToPci将虚拟地址转换成物理地址,而在非PCI主机控制器中,直接使用虚拟地址而不用转换;
(3)在非PCI主机控制器中将中断向量号与相应的中断服务程序直接关联,用VxWorks系统提供的intConnect()函数直接注册,不用调用usbPciIntConnect()中断函数。
4.如权利要求1所述的方法,其特征在于,当非PCI控制器内包含一个EHCI和一个或多个UHCI,或包含一个EHCI和一个或多个OHCI时,一旦这些驱动被加载完成,EHCI主机控制器接口函数fncAttach()函数被USBD调用,EHCI主机控制器被设置成所有端口的所有者,当有大容量存储设备接入时,USBD的root hub状态检测函数通过获取端口状态、复位,然后再次获取端口状态操作,首先调用EHCI主机控制器的rootGetStatus()函数检测该设备类型,若检测到是高速设备,则保持对该端口的控制;若检测到不是高速设备,则放弃端口的控制权,然后调用UHCI主机控制器或OHCI主机控制器的rootGetStatus()函数检测设备类型,完成路由的切换;
在确定了大容量存储设备的类型后,调用usbdHcdAttach(execFunc,&pciCfgHdr,pToken)函数将主机控制器驱动连接到USBD上。
5.如权利要求4所述的方法,其特征在于,usbdHcdAttach(execFunc,&pciCfgHdr,pToken)函数中,execFunc参数的值根据主机控制器驱动类型EHCI、OHCI或UHCI而定。
6.如权利要求4所述的方法,其特征在于,usbdHcdAttach(execFunc,&pciCfgHdr,pToken)函数中,pToken参数的值根据主机控制器驱动类型EHCI、OHCI或UHCI而定。
CN201811352220.5A 2018-11-14 2018-11-14 VxWorks系统下大容量存储设备的主机控制器驱动实现方法 Active CN109522056B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811352220.5A CN109522056B (zh) 2018-11-14 2018-11-14 VxWorks系统下大容量存储设备的主机控制器驱动实现方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811352220.5A CN109522056B (zh) 2018-11-14 2018-11-14 VxWorks系统下大容量存储设备的主机控制器驱动实现方法

Publications (2)

Publication Number Publication Date
CN109522056A true CN109522056A (zh) 2019-03-26
CN109522056B CN109522056B (zh) 2021-11-16

Family

ID=65777674

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811352220.5A Active CN109522056B (zh) 2018-11-14 2018-11-14 VxWorks系统下大容量存储设备的主机控制器驱动实现方法

Country Status (1)

Country Link
CN (1) CN109522056B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111506395A (zh) * 2020-06-17 2020-08-07 北京机电工程研究所 一种混合仿真的全数字虚拟运行环境的实现方法及装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101710312A (zh) * 2009-12-24 2010-05-19 中国航空工业集团公司第六三一研究所 一种采用高速usb接口实现数据加卸载的电路
US20120164984A1 (en) * 2007-05-03 2012-06-28 Qualcomm Incorporated Interactive control of access to services and capabilities of a mobile device
CN103309830A (zh) * 2013-07-08 2013-09-18 哈尔滨工业大学 VxWorks操作系统下CPCI总线CAN通信模块的驱动器及驱动方法
CN106648615A (zh) * 2016-11-07 2017-05-10 中国航空无线电电子研究所 一种基于VxWorks的BSP代码开发系统

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120164984A1 (en) * 2007-05-03 2012-06-28 Qualcomm Incorporated Interactive control of access to services and capabilities of a mobile device
CN101710312A (zh) * 2009-12-24 2010-05-19 中国航空工业集团公司第六三一研究所 一种采用高速usb接口实现数据加卸载的电路
CN103309830A (zh) * 2013-07-08 2013-09-18 哈尔滨工业大学 VxWorks操作系统下CPCI总线CAN通信模块的驱动器及驱动方法
CN106648615A (zh) * 2016-11-07 2017-05-10 中国航空无线电电子研究所 一种基于VxWorks的BSP代码开发系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
龚云: "基于VxWorks的USB驱动研究与实现", 《万方数据知识服务平台》 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111506395A (zh) * 2020-06-17 2020-08-07 北京机电工程研究所 一种混合仿真的全数字虚拟运行环境的实现方法及装置

Also Published As

Publication number Publication date
CN109522056B (zh) 2021-11-16

Similar Documents

Publication Publication Date Title
CN102231142B (zh) 一种带有仲裁器的多通道dma控制器
US8117347B2 (en) Providing indirect data addressing for a control block at a channel subsystem of an I/O processing system
CA2704133C (en) Bi-directional data transfer within a single i/o operation
EP2176771B1 (en) Providing indirect data addressing in an input/output processing system where the indirect data address list is non-contiguous
US20140164666A1 (en) Server and method for sharing peripheral component interconnect express interface
US10846254B2 (en) Management controller including virtual USB host controller
CN111831588A (zh) 一种存储设备访问方法、装置和系统
WO2009101058A1 (en) Processing a variable length device command word at a control unit in an i/o processing system
US5146605A (en) Direct control facility for multiprocessor network
US20060224792A1 (en) Method and apparatus for concurrent and independent data transfer on host controllers
CN106557442A (zh) 一种芯片系统
JP2503183B2 (ja) バス・アダプタ・システム
CN105528314B (zh) 一种数据处理方法及控制设备
CN109522056A (zh) VxWorks系统下大容量存储设备的主机控制器驱动实现方法
CN115454902A (zh) 一种基于pcie接口的nvme通信系统及方法
CN201804329U (zh) 一种基于arm微处理器的usb接口硬件装置
CN101976230A (zh) 通用序列总线传输转译器及输入请求同步传输方法
US6282626B1 (en) No stall read access-method for hiding latency in processor memory accesses
CN104598410B (zh) 一种免写驱动程序的计算机板卡及其开发方法
EP0316251B1 (en) Direct control facility for multiprocessor network
CN106775663B (zh) 一种sys/bios系统下基于sil3132控制器的sata硬盘驱动方法
US20220237132A1 (en) Data transmission method and ping-pong dma architecture
KR20220059906A (ko) 가상 머신을 지원하는 스토리지 가상화 장치, 이의 동작 방법, 및 이를 포함하는 시스템의 동작 방법

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
GR01 Patent grant
GR01 Patent grant