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

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

Info

Publication number
CN109117390A
CN109117390A CN201810904726.6A CN201810904726A CN109117390A CN 109117390 A CN109117390 A CN 109117390A CN 201810904726 A CN201810904726 A CN 201810904726A CN 109117390 A CN109117390 A CN 109117390A
Authority
CN
China
Prior art keywords
bus
usb
kernel
symbolic address
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
CN201810904726.6A
Other languages
English (en)
Other versions
CN109117390B (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 INFORMATION INDUSTRY Co Ltd
Shandong Zhongfu Safe Technology 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 INFORMATION INDUSTRY Co Ltd, Shandong Zhongfu Safe Technology 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

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 (9)

1.一种Linux内核模块获取usb_bus_type符号地址的方法,其特征是,具体包括以下方法:
查找内核pci_bus_type符号地址;
遍历pci总线上的子设备,查找usb控制器设备;
对usb控制器设备进行内核结构体转换,获取usb_bus_type符号地址。
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控制器设备进行内核结构体转换的方法包括:
调用pci_get_drvdata获取当前usb控制器设备的内核驱动对象uhcd;
把usb控制器设备的内核驱动对象uhcd转换为当前usb总线的根设备结构体udev;
通过usb总线根设备结构体udev获取通用内核设备对象结构体cdev。
6.根据权利要求5所述的方法,其特征是,所述获取usb总线地址的方法包括:
读取通用内核设备对象结构体cdev中的bus成员,所述的bus成员为usb_bus_type符号地址。
7.一种Linux内核模块获取usb_bus_type符号地址的系统,利用权利要求1-6任意一项所述的方法,其特征是,包括查询模块,用于查找内核pci_bus_type符号地址和usb控制器设备;和,
内核结构体转换模块,用于将usb控制器设备进行结构体转换,把内核驱动对象转换为通用内核设备对象结构体;和,
usb_bus_type符号地址获取模块,用于根据通用内核设备对象结构体获取usb_bus_type符号地址。
8.根据权利要求7所述的系统,其特征是,所述usb控制器设备的标志是子设备配置空间中的class code中的base class为0x0C,sub class为0x03。
9.根据权利要求7所述的系统,其特征是,所述的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 true CN109117390A (zh) 2019-01-01
CN109117390B 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)

Cited By (3)

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

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101030176A (zh) * 2007-04-06 2007-09-05 北京理工大学 一种基于双usb密钥设备的usb接口锁
CN101063952A (zh) * 2006-04-25 2007-10-31 英业达股份有限公司 通用串行总线主机控制器快速测试系统及其方法
CN101552865A (zh) * 2009-03-25 2009-10-07 广州英码信息科技有限公司 一种基于嵌入式的多媒体数字平台
CN103777978A (zh) * 2014-01-07 2014-05-07 汉柏科技有限公司 一种基于Linux内核的用户态自动探测3G-USB网卡方法
US20160149748A1 (en) * 2014-11-24 2016-05-26 Fortinet, Inc. Network address translation

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101063952A (zh) * 2006-04-25 2007-10-31 英业达股份有限公司 通用串行总线主机控制器快速测试系统及其方法
CN101030176A (zh) * 2007-04-06 2007-09-05 北京理工大学 一种基于双usb密钥设备的usb接口锁
CN101552865A (zh) * 2009-03-25 2009-10-07 广州英码信息科技有限公司 一种基于嵌入式的多媒体数字平台
CN103777978A (zh) * 2014-01-07 2014-05-07 汉柏科技有限公司 一种基于Linux内核的用户态自动探测3G-USB网卡方法
US20160149748A1 (en) * 2014-11-24 2016-05-26 Fortinet, Inc. Network address translation

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
张中将: "基于嵌入式Linux操作系统的捷联惯导软件实时性研究", 《中国优秀硕士学位论文全文数据库 信息科技辑》 *

Cited By (5)

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

Also Published As

Publication number Publication date
CN109117390B (zh) 2021-10-26

Similar Documents

Publication Publication Date Title
CN103763433B (zh) 终端应用的运行控制方法及系统
CN109117390A (zh) 一种Linux内核模块获取usb_bus_type符号地址的方法及系统
CN102855138B (zh) 一种api的拦截方法、装置及移动终端
CN105163234B (zh) 一种自拍杆的适配方法、装置及相应移动设备
US8897804B2 (en) System and method for providing customer support using a location-aware portable device
CN104346127A (zh) 语音输入的实现方法、装置及终端
CN106095051B (zh) 一种移动终端应用程序的处理方法、装置及移动终端
CN102546953A (zh) 一种全语音操控移动终端的系统及方法
CN105338594B (zh) 一种wifi网络连接方法及装置
CN207625682U (zh) 视频监控设备
CN103529988A (zh) 一种移动终端触摸屏多固件设置方法及系统
AU2015328644A1 (en) Methods and apparatuses of WLAN alarm notification in cellular networks
CN106303031A (zh) 一种终端的处理方法、系统及终端
CN105159667A (zh) 一种web service接口调用参数转换方法及系统
CN106251590A (zh) 一种寻找网络设备的方法及路由器
CN105578285A (zh) 一种电视机自动定位设置多国语言的方法及电视机
CN105303114A (zh) 基于windows的系统服务函数调用方法及装置
CN203912109U (zh) 手机摄像模组检测装置
CN107808662A (zh) 更新语音识别用的语法规则库的方法及装置
CN103442134B (zh) 实现移动终端触摸屏开关功能的方法及系统
CN104184768A (zh) 一种物联网数据传输方法、装置和系统
CN105430159A (zh) 一种根据网络状态进行解锁卡的方法、系统及移动终端
CN106210265A (zh) 一种移动终端与电话座机的自动连接方法
US9614946B2 (en) Method of matching operations between vehicular apparatus and portable terminal, vehicle system including vehicular apparatus and portable terminal, portable terminal, and information center
CN102833728B (zh) 基于手机启动信息及imei信息的sim卡信息保护方法

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.