一种基于Linux内核的用户态自动探测及驱动加载3G-USB网卡方法

文档序号:6535129阅读:598来源:国知局
一种基于Linux内核的用户态自动探测及驱动加载3G-USB网卡方法
【专利摘要】本发明涉及一种基于Linux内核的用户态自动探测及驱动加载3G-USB网卡方法,在Linux内核初始化阶段,USB总线注册各个驱动并扫描所有挂载在USB总线上的设备,判断驱动是否与该设备匹配,若匹配,则继续判断该设备的厂商ID是否为3G-USB网卡设备的厂商ID,若不是,则将该设备初始化;若是,则将设备识别为3G-USB网卡,保存3G-USB网卡信息并放弃对3G-USB网卡的初始化,且用户态获取3G-USB网卡信息,并根据3G-USB网卡信息加载对应的3G-USB网卡驱动。本发明将3G-USB网卡的自动探测和及驱动加载均放在用户态,来消除内核态驱动带来的系统调用及数据包拷贝的高额开销,同时,用户态驱动提供了非常强悍的调试能力,能将驱动开发人员在Linux下繁琐的调试作业中解放出来,进一步提高开发效率。
【专利说明】—种基于Linux内核的用户态自动探测及驱动加载3G-USB网卡方法
【技术领域】
[0001]本发明涉及计算机【技术领域】,尤其涉及一种基于Linux内核的用户态自动探测及驱动加载3G-USB网卡方法。
【背景技术】
[0002]随着技术的不断发展,多核时代初期极大缓解了 CPU资源在配备IOGE或更多网卡的网络包处理设备上又显得力不从心,究其原因,是由于报文的大量冲击引发的大量中断消耗了一定的CPU资源,特别是X86体系结构;Linux操作系统的内核态到用户态的数据拷贝损失的性能也将成为包处理设备无法充分利用多核CPU的拦路虎;因此,如果消除内核态驱动带来的系统调用及数据包拷贝的高额开销,成为了业内的主要研究问题。

【发明内容】

[0003]本发明所要解决的技术问题是如何能够减少对Linux内核的修改,对用户态3G-USB网卡驱动实现如Linux内核一样的自动探测和加载。
[0004]为此目的,本发明提出了一种基于Linux内核的用户态自动探测及驱动加载3G-USB网卡方法,所述方法具体包括:
[0005]S1:在Linux内核初始化阶段,USB总线注册各个驱动并扫描所有挂载在USB总线上的设备;
[0006]S2:所述各个驱动分别遍历所有挂载在所述USB总线上的设备,并判断所述驱动是否与该设备匹配,若是,则执行步骤S3,若不是,则返回步骤SI ;
[0007]S3:判断所述设备的厂商ID是否为3G-USB网卡设备的厂商ID,若不是,则将该设备初始化,若是,则执行步骤S4 ;
[0008]S4:将所述设备识别为3G-USB网卡,保存所述3G-USB网卡信息并放弃对所述3G-USB网卡的初始化;
[0009]S5:用户态获取所述3G-USB网卡信息,并根据所述3G-USB网卡信息加载对应的3G-USB网卡驱动。
[0010]优选的,所述步骤S2进一步包括:
[0011 ] 所述各个驱动分别遍历所有挂载在所述USB总线上的设备,并根据VendorID以及DeviceID判断所述驱动是否与该设备匹配。
[0012]优选的,所述步骤S5进一步包括:用户态通过iocl函数访问内核态,获取所述内核态探测到的所述3G-USB网卡信息。
[0013]优选的,所述步骤S5进一步包括:用户态根据所述3G-USB网卡信息对所述3G-USB网卡进行初始化。
[0014]优选的,所述3G-USB网卡信息包括3G-USB网卡类型、3G-USB网卡个数、3G-USB网卡对应的驱动类型以及3G-USB网卡设备的总线编号、设备编号和、厂商ID和产品ID。。[0015]通过采用本发明所公开一种基于Linux内核的用户态自动探测及驱动加载3G-USB网卡方法,通过将3G-USB网卡的自动探测及驱动加载均放在用户态,来消除内核态驱动带来的系统调用及数据包拷贝的高额开销,同时,用户态驱动提供了非常强悍的调试能力,能将驱动开发人员在Linux下繁琐的调试作业中解放出来,进一步提高开发效率。
【专利附图】

【附图说明】
[0016]通过参考附图会更加清楚的理解本发明的特征和优点,附图是示意性的而不应理解为对本发明进行任何限制,在附图中:
[0017]图1示出了本发明实施例中的一种基于Linux内核的用户态自动探测及驱动加载3F-USB网卡方法的步骤流程图。
【具体实施方式】
[0018]下面将结合附图对本发明的实施例进行详细描述。
[0019]如图1所述,本发明提供了一种基于Linux内核的用户态自动探测及驱动加载3G-USB网卡方法,包括以下步骤:
[0020]步骤S1:在Linux内核初始化阶段,USB总线注册各个驱动并扫描所有挂载在USB总线上的设备;在内核初始化阶段USB驱动加载会调用统一接口 usb_register_driver注册各个驱动。
[0021]步骤S2:各个驱动分别遍历所有挂载在USB总线上的设备,并判断驱动是否与该设备匹配,若是,则执行步骤S3,若不是,则返回步骤SI。
[0022]具体地,步骤S2进一步包括:
[0023]各个驱动分别遍历所有挂载在USB总线上的设备,并根据VendorID以及DeviceID判断驱动是否与该设备匹配。根据设备的VendorlD、DeviceID等信息的匹配情况,判定该驱动是否能支持挂载在USB总线上的该设备。
[0024]具体地,利用usb_match_device函数对遍历的所有挂载在USB总线上的设备与预先存储在全局变量中的设备信息进行匹配。其中,将192d,即为中兴的VendorID ;12dl,即为华为的VendorID预先存储在全局变量中。
[0025]步骤S3:判断设备的厂商ID是否为3G-USB网卡设备的厂商ID,若不是,则将该设备初始化,若是,则执行步骤S4。
[0026]步骤S4:将设备识别为3G-USB网卡,保存3G-USB网卡信息并放弃对3G-USB网卡的初始化。
[0027]步骤S5:用户态获取3G-USB网卡信息,并根据3G-USB网卡信息加载对应的3G-USB网卡驱动。
[0028]具体地,用户态获取3G-USB网卡信息包括3G-USB网卡类型、3G-USB网卡个数、3G-USB网卡对应的驱动类型以及3G-USB网卡设备的总线编号、设备编号和、厂商ID和产品ID0
[0029]进一步地,步骤S5进一步包括:用户态通过iocl函数访问内核态,获取内核态探测到的3G-USB网卡信息。
[0030]进一步地,步骤S5进一步包括:用户态根据3G-USB网卡信息对3G-USB网卡进行初始化。
[0031]本发明提供一种基于Linux内核的用户态自动探测及驱动加载3G-USB网卡方法,通过将3G-USB网卡的自动探测及驱动加载均放在用户态,来消除内核态驱动带来的系统调用及数据包拷贝的高额开销,同时,用户态驱动提供了非常强悍的调试能力,能将驱动开发人员在Linux下繁琐的调试作业中解放出来,进一步提高开发效率。
[0032]虽然结合附图描述了本发明的实施方式,但是本领域技术人员可以在不脱离本发明的精神和范围的情况下做出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。
【权利要求】
1.一种基于Linux内核的用户态自动探测及驱动加载3G-USB网卡方法,其特征在于,所述方法具体包括: 51:在Linux内核初始化阶段,USB总线注册各个驱动并扫描所有挂载在USB总线上的设备; 52:所述各个驱动分别遍历所有挂载在所述USB总线上的设备,并判断所述驱动是否与该设备匹配,若是,则执行步骤S3,若不是,则返回步骤SI ; 53:判断所述设备的厂商ID是否为3G-USB网卡设备的厂商ID,若不是,则将该设备初始化,若是,则执行步骤S4; 54:将所述设备识别为3G-USB网卡,保存所述3G-USB网卡信息并放弃对所述3G-USB网卡的初始化; 55:用户态获取所述3G-USB网卡信息,并根据所述3G-USB网卡信息加载对应的3G-USB网卡驱动。
2.如权利要求1所述的方法,其特征在于,所述步骤S2进一步包括: 所述各个驱动分别遍历所有挂载在所述USB总线上的设备,并根据VendorID以及DeviceID判断所述驱动是否与该设备匹配。
3.如权利要求1所述的方法,其特征在于,所述步骤S5进一步包括:用户态通过ioctl函数访问内核态,获取所述内核态探测到的所述3G-USB网卡信息。
4.如权利要求1所述的方法,其特征在于,所述步骤S5进一步包括:用户态根据所述3G-USB网卡信息对所述3G-USB网卡进行初始化。
5.如权利要求1-4任一项所述的方法,其特征在于,所述3G-USB网卡信息包括3G-USB网卡类型、3G-USB网卡个数、3G-USB网卡对应的驱动类型以及3G-USB网卡设备的总线编号、设备编号、厂商ID和产品ID。
【文档编号】G06F9/445GK103744703SQ201410006535
【公开日】2014年4月23日 申请日期:2014年1月7日 优先权日:2014年1月7日
【发明者】高福亮 申请人:汉柏科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1