CN109117390B - 一种Linux内核模块获取usb_bus_type符号地址的方法及系统 - Google Patents

一种Linux内核模块获取usb_bus_type符号地址的方法及系统 Download PDF

Info

Publication number
CN109117390B
CN109117390B CN201810904726.6A CN201810904726A CN109117390B CN 109117390 B CN109117390 B CN 109117390B CN 201810904726 A CN201810904726 A CN 201810904726A CN 109117390 B CN109117390 B CN 109117390B
Authority
CN
China
Prior art keywords
bus
usb
kernel
address
type
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.)
Active
Application number
CN201810904726.6A
Other languages
English (en)
Other versions
CN109117390A (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.)
BEIJING ZHONGFU TAIHE TECHNOLOGY DEVELOPMENT CO LTD
Zhongfu Information Co Ltd
Zhongfu Safety Technology Co Ltd
Original Assignee
BEIJING ZHONGFU TAIHE TECHNOLOGY DEVELOPMENT CO LTD
Shandong Zhongfu Safety Technology Co ltd
Zhongfu Information Co Ltd
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 BEIJING ZHONGFU TAIHE TECHNOLOGY DEVELOPMENT CO LTD, Shandong Zhongfu Safety Technology Co ltd, Zhongfu Information Co Ltd filed Critical BEIJING ZHONGFU TAIHE TECHNOLOGY DEVELOPMENT CO LTD
Priority to CN201810904726.6A priority Critical patent/CN109117390B/zh
Publication of CN109117390A publication Critical patent/CN109117390A/zh
Application granted granted Critical
Publication of CN109117390B publication Critical patent/CN109117390B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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/10Program control for peripheral devices
    • G06F13/102Program control for peripheral devices where the programme performs an interfacing function, e.g. device driver
    • 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/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4282Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Bus Control (AREA)
  • Information Transfer Systems (AREA)

Abstract

本发明实施例公开了一种Linux内核模块获取usb_bus_type符号地址的方法,其特征是,具体包括以下方法:查找内核pci总线地址;遍历pci总线上的子设备,查找usb控制器设备;对usb控制器设备进行内核结构体转换,获取usb总线地址。还公开了一种Linux内核模块获取usb_bus_type符号地址的系统。本发明通过遍历pci总线上的子设备查找usb控制器设备,从而获取usb_bus_type符号地址,使usb_bus_type符号地址不受新的系统内核参数变动的影响。

Description

一种Linux内核模块获取usb_bus_type符号地址的方法及 系统
技术领域
本发明涉及符号地址获取技术领域,具体地说是一种Linux内核模块获取usb_bus_type符号地址的方法及系统。
背景技术
在很多时候,usb设备驱动并不包含在内核中,因此内核模块会通过调用usb总线地址的方式进行加载usb设备。
就当下Linux操作系统各个发行版而言,其内核中usb_bus_type符号地址并不一定会允许第三方内核模块直接调用。
在系统内核进行微调重新编译后,如果系统内核发行号未发生变化,那么新的系统内核将会允许基于老的系统内核开发的第三方内核模块加载,但其中部分甚至绝大部分内核参数地址将会发生变化,其中包含pci_bus_type符号地址(pci总线地址)和usb_bus_type符号地址(usb总线地址)。这种现状无疑对于第三方内核模块调用该符号造成了困难。这就是现有技术的问题所在。
发明内容
本发明实施例中提供了一种Linux内核模块获取usb_bus_type符号地址的方法及系统,用于解决由于usb_bus_type符号地址随系统加载内核而变化,造成的第三方无法调用usb_bus_type符号地址的问题。
为了解决上述技术问题,本发明实施例公开了如下技术方案:
本发明第一方面提供了一种Linux内核模块获取usb_bus_type符号地址的方法,具体包括以下方法:
查找内核pci_bus_type符号地址;
遍历pci总线上的子设备,查找usb控制器设备;
对usb控制器设备进行内核结构体转换,获取usb_bus_type符号地址。
结合第一方面,在第一方面第一种可能的实现方式中,所述查找内核pci_bus_type符号地址通过调用内核符号。
结合第一方面,在第一方面第二种可能的实现方式中,遍历pci总线上的子设备的方法包括调用内核函数bus_for_each_dev传入参数pci_bus_type符号地址。
结合第一方面,在第一方面第三种可能的实现方式中,查找usb控制器设备的方法包括判断子设备的参数定义,当子设备配置空间中的class code中的base class为0x0C,sub class为0x03时,为usb控制器设备。
结合第一方面,在第一方面第四种可能的实现方式中,所述对usb控制器设备进行内核结构体转换的方法包括:
调用pci_get_drvdata获取当前usb控制器设备的内核驱动对象uhcd;
把usb控制器设备的内核驱动对象uhcd转换为当前usb总线的根设备结构体udev;
通过usb总线根设备结构体udev获取通用内核设备对象结构体cdev。
结合第一方面,在第一方面第五种可能的实现方式中,所述获取usb_bus_type符号地址的方法包括:
读取通用内核设备对象结构体cdev中的bus成员,所述的bus成员为usb_bus_type符号地址。
本发明第二方面提供了一种Linux内核模块获取usb_bus_type符号地址的系统,包括查询模块,用于查找内核pci_bus_type符号地址和usb控制器设备;和,
内核结构体转换模块,用于将usb控制器设备进行结构体转换,把内核驱动对象转换为通用内核设备对象结构体;和,
usb_bus_type符号地址获取模块,用于根据通用内核设备对象结构体获取usb_bus_type符号地址。
结合第二方面,在第二方面第一种可能的实现方式中,所述usb控制器设备的标志是子设备配置空间中的class code中的base class为0x0C,sub class为0x03。
结合第二方面,在第二方面第二种可能的实现方式中,所述的usb_bus_type符号地址即为通用内核设备对象结构体的bus成员。
本发明第一方面所述的方法能够实现第二方面以及其各个方面的系统,并取得相同的技术效果。
由以上技术方案可见,本发明通过遍历pci总线上的子设备查找usb控制器设备,从而获取usb_bus_type符号地址,使usb_bus_type符号地址不受新的系统内核参数变动的影响。
本发明的bus成员即为usb_bus_type符号地址,不受系统内核中usb_bus_type符号地址未导出或者以内核模块实现的限制。
本发明可嵌入第三方内核模块中,跨平台可移植性和通用性较好。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为一种Linux内核模块获取usb_bus_type符号地址的方法流程示意图;
图2为本发明实施例对usb控制器设备进行内核结构体转换的方法流程示意图;
图3为本发明实施例所应用的一种Linux内核模块获取usb_bus_type符号地址的系统结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
如图1所示,一种Linux内核模块获取usb_bus_type符号地址的方法,具体包括以下方法:
S1、查找内核pci_bus_type符号地址;可以通过调用内核符号查找函数查找,如:kallsyms_lookup_name、find_symbol。
S2、遍历pci总线上的子设备,查找usb控制器设备;通过调用内核函数bus_for_each_dev传入参数pci总线地址可以完成内核中pci总线(pci_bus_type符号)上所有子设备的遍历,通过pci总线上子设备配置空间中的class code可以判断是否是USB控制器设备,当class code中的base class为0x0C,sub class为0x03时,即为usb控制器设备。
S3、对usb控制器设备进行内核结构体转换,获取usb_bus_type符号地址。
如图2所示,对usb控制器设备进行内核结构体转换包括以下方法:
S31、调用pci_get_drvdata获取当前usb控制器设备的内核驱动对象uhcd;调用方法为uhcd=pci_get_drvdata(pdev)。
S32、把usb控制器设备的内核驱动对象uhcd转换为当前usb总线的根设备结构体udev;该步骤可以通过uhcd对象中的成员直接获取。转换方法为udev=uhcd->self.root_hub。
S33、通过usb总线根设备结构体udev获取通用内核设备对象结构体cdev。转换方法为cdev=&(udev->dev)。
S3中获取usb_bus_type符号地址的方法包括:
读取通用内核设备对象结构体cdev中的bus成员,bus成员为usb_bus_type符号地址,获取方法为:usb_bus_type=cdev->bus,获取到的符号可以直接使用。
如图3所示,一种Linux内核模块获取usb_bus_type符号地址的系统,包括查询模块101,用于查找内核pci_bus_type符号地址和usb控制器设备;和,内核结构体转换模块102,用于将usb控制器设备进行结构体转换,把内核驱动对象转换为通用内核设备对象结构体;和,usb_bus_type符号地址获取模块103,用于根据通用内核设备对象结构体获取usb_bus_type符号地址。
usb控制器设备的标志是子设备配置空间中的class code中的base class为0x0C,sub class为0x03。
usb_bus_type符号地址即为通用内核设备对象结构体的bus成员。
以上所述仅是本发明的具体实施方式,使本领域技术人员能够理解或实现本发明。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (8)

1.一种Linux内核模块获取usb_bus_type符号地址的方法,其特征是,具体包括以下方法:
查找内核pci_bus_type符号地址;
遍历pci总线上的子设备,查找usb控制器设备;
对usb控制器设备进行内核结构体转换,获取usb_bus_type符号地址;
所述对usb控制器设备进行内核结构体转换的方法包括:
调用pci_get_drvdata获取当前usb控制器设备的内核驱动对象uhcd;
把usb控制器设备的内核驱动对象uhcd转换为当前usb总线的根设备结构体udev;
通过usb总线根设备结构体udev获取通用内核设备对象结构体cdev。
2.根据权利要求1所述的方法,其特征是,所述查找内核pci_bus_type符号地址通过调用内核符号。
3.根据权利要求1所述的方法,其特征是,遍历pci总线上的子设备的方法包括调用内核函数bus_for_each_dev传入参数pci_bus_type符号地址。
4.根据权利要求1所述的方法,其特征是,查找usb控制器设备的方法包括判断子设备的参数定义,当子设备配置空间中的class code中的base class为0x0C,sub class为0x03时,为usb控制器设备。
5.根据权利要求1所述的方法,其特征是,所述获取usb总线地址的方法包括:
读取通用内核设备对象结构体cdev中的bus成员,所述的bus成员为usb_bus_type符号地址。
6.一种Linux内核模块获取usb_bus_type符号地址的系统,利用权利要求1-5任意一项所述的方法,其特征是,包括查询模块,用于查找内核pci_bus_type符号地址和usb控制器设备;和,
内核结构体转换模块,用于将usb控制器设备进行结构体转换,把内核驱动对象转换为通用内核设备对象结构体;和,
usb_bus_type符号地址获取模块,用于根据通用内核设备对象结构体获取usb_bus_type符号地址。
7.根据权利要求6所述的系统,其特征是,所述usb控制器设备的标志是子设备配置空间中的class code中的base class为0x0C,sub class为0x03。
8.根据权利要求6所述的系统,其特征是,所述的usb_bus_type符号地址即为通用内核设备对象结构体的bus成员。
CN201810904726.6A 2018-08-09 2018-08-09 一种Linux内核模块获取usb_bus_type符号地址的方法及系统 Active CN109117390B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810904726.6A CN109117390B (zh) 2018-08-09 2018-08-09 一种Linux内核模块获取usb_bus_type符号地址的方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810904726.6A CN109117390B (zh) 2018-08-09 2018-08-09 一种Linux内核模块获取usb_bus_type符号地址的方法及系统

Publications (2)

Publication Number Publication Date
CN109117390A CN109117390A (zh) 2019-01-01
CN109117390B true CN109117390B (zh) 2021-10-26

Family

ID=64853216

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810904726.6A Active CN109117390B (zh) 2018-08-09 2018-08-09 一种Linux内核模块获取usb_bus_type符号地址的方法及系统

Country Status (1)

Country Link
CN (1) CN109117390B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111221751B (zh) * 2020-01-13 2023-10-27 中孚安全技术有限公司 Linux系统下提升usb批量传输速度的方法及系统
CN113242322B (zh) * 2021-07-12 2021-10-08 广东睿江云计算股份有限公司 一种移动存储设备的映射方法及其系统
CN114546500B (zh) * 2022-01-28 2024-06-21 郑州信大捷安信息技术股份有限公司 一种支持多设备的密码卡驱动实现方法和系统

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101063952A (zh) * 2006-04-25 2007-10-31 英业达股份有限公司 通用串行总线主机控制器快速测试系统及其方法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100481032C (zh) * 2007-04-06 2009-04-22 北京理工大学 一种基于双usb密钥设备的usb接口锁
CN101552865B (zh) * 2009-03-25 2013-01-23 广州英码信息科技有限公司 一种基于嵌入式的多媒体数字平台
CN103777978A (zh) * 2014-01-07 2014-05-07 汉柏科技有限公司 一种基于Linux内核的用户态自动探测3G-USB网卡方法
US9917928B2 (en) * 2014-11-24 2018-03-13 Fortinet, Inc. Network address translation

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101063952A (zh) * 2006-04-25 2007-10-31 英业达股份有限公司 通用串行总线主机控制器快速测试系统及其方法

Also Published As

Publication number Publication date
CN109117390A (zh) 2019-01-01

Similar Documents

Publication Publication Date Title
CN109117390B (zh) 一种Linux内核模块获取usb_bus_type符号地址的方法及系统
US10560890B2 (en) Roaming network access method and apparatus
US10599413B2 (en) Method and device for identifying file
CN110795399B (zh) 一种为应用产生机器id的方法、装置和系统
CN103377067A (zh) 应用程序加载系统及方法
CN110990008B (zh) 更新页面的方法、装置、存储介质以及电子设备
CN108776602B (zh) 基于sca的波形动态切换方法
CN110888842A (zh) 一种文件存储方法、文件查询方法、装置及设备
CN104268472B (zh) 还原被第三方动态库修改函数地址的方法和装置
CN110263485B (zh) 一种芯片封装图的自动绘制系统以及计算机系统
CN106933611B (zh) 类加载方法及类加载器
CN117097682A (zh) 设备接入方法、装置、设备及存储介质
CN112256351A (zh) Feign组件的实现方法、微服务调用方法及装置
CN116432185B (zh) 一种异常检测方法、装置、可读存储介质及电子设备
CN107291637A (zh) 在安卓系统中兼容多型号移动通信模块的方法和装置
US10321302B2 (en) Method for acquiring use configuration information and terminal
CN111352993A (zh) 一种跨平台数据同步方法及装置、电子设备
CN111193805B (zh) 一种资源发现的方法及装置
CN110647568B (zh) 一种图数据库数据转化为编程语言数据方法及装置
CN103677846A (zh) 一种SQLite数据库开发工具包及开发方法
CN110471708B (zh) 基于可重用组件的配置项获取的方法及装置
CN103514123B (zh) 一种usb设备连接端口的识别方法及系统
CN113127006A (zh) 服务部署方法、装置、设备及存储介质
CN106648925B (zh) 移动终端及其字符串信息的获取方法
CN113840020B (zh) 基于ip地址信息的定位方法、装置、电子设备和存储介质

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
CP01 Change in the name or title of a patent holder
CP01 Change in the name or title of a patent holder

Address after: 250101 room 2530, building 2, Aosheng building, 1166 Xinluo street, high tech Zone, Jinan City, Shandong Province

Patentee after: Zhongfu Safety Technology Co.,Ltd.

Patentee after: ZHONGFU INFORMATION Co.,Ltd.

Patentee after: BEIJING ZHONGFU TAIHE TECHNOLOGY DEVELOPMENT Co.,Ltd.

Address before: 250101 room 2530, building 2, Aosheng building, 1166 Xinluo street, high tech Zone, Jinan City, Shandong Province

Patentee before: SHANDONG ZHONGFU SAFETY TECHNOLOGY CO.,LTD.

Patentee before: ZHONGFU INFORMATION Co.,Ltd.

Patentee before: BEIJING ZHONGFU TAIHE TECHNOLOGY DEVELOPMENT Co.,Ltd.