Linux系统下用户态网卡自动探测及驱动加载的方法技术方案

技术编号:8800987 阅读:279 留言:0更新日期:2013-06-13 05:41
本发明专利技术提供一种Linux系统下用户态网卡自动探测及驱动加载的方法,在Linux内核初始化阶段,PCI总线注册各个驱动并扫描所有挂载在PCI总线上的设备;所述各个驱动分别遍历所述挂载在PCI总线上的设备,判断所述驱动是否与该设备匹配,若匹配,则继续判断该设备的类别码是否为为网卡设备的类别码,若不是,则将该设备初始化;若是,则将所述设备识别为网卡,保存所述网卡信息并放弃对所述网卡的初始化,且用户态获取所述网卡信息,并根据所述网卡信息加载对应的网卡驱动;本发明专利技术将网卡的自动探测及驱动加载均放在用户态,来消除内核态驱动带来的系统调用及数据包拷贝的高额开销。

【技术实现步骤摘要】

本专利技术涉及计算机操作系统领域,特别涉及一种Linux系统下基于内核态的用户态网卡自动探测及驱动加载的方法。
技术介绍
随着技术的不断发展,多核时代初期极大缓解了的CPU资源在配备IOGE或更多网卡的网络包处理设备上又显得力不从心;究其原因,是由于报文的大量冲击引发的大量中断消耗了一定的CPU资源(特别是X86体系结构);Linux操作系统的内核态到用户态的数据拷贝损失的性能也将成为包处理设备无法充分利用多核CPU的拦路虎;因此,如何消除内核态驱动带来的系统调用及数据包拷贝的高额开销,成为了业内的主要研究范畴。
技术实现思路
针对现有技术的不足,本专利技术提供一种,通过将网卡的自动探测及驱动加载均放在用户态,来消除内核态驱动带来的系统调用及数据包拷贝的高额开销。为实现以上目的,本专利技术通过以下技术方案予以实现:本专利技术提供一种,包括以下步骤:S1、在Linux内核初始化阶段,PCI总线注册各个驱动并扫描所有挂载在PCI总线上的设备;S2、所述各个驱动分别遍历所述挂载在PCI总线上的设备,并判断所述驱动是否与该设备匹配,若是,则执行步骤S3,若不是,则返回步骤SI ;S3、判断所述设备的类别码是否为网卡设备的类别码,若不是,则将该设备初始化,若是,则执行步骤S4;S4、将所述设备识别为网卡,保存所述网卡信息并放弃对所述网卡的初始化;S5、用户态获取所述网卡信息,并根据所述网卡信息加载对应的网卡驱动。优选的,所述步骤S2进一步包括:所述各个驱动分别遍历所述挂载在PCI总线上的设备,并根据VendorIDXlass以及DeviceID判断所述驱动是否与该设备匹配。优选的,所述用户态包括大块内存申请的补丁以及Mmap内存映射。优选的,所述步骤S5进一步包括:用户态通过ioctl函数访问内核态,获取所述内核态探测到的所述网卡信息。优选的,所述步骤S5进一步包括:用户态根据所述网卡信息对所述网卡进行初始化。优选的,所述网卡信息包括网卡类型、网卡个数、所述网卡对应的驱动类型以及网卡设备的总线编号、设备编号和功能编号。本专利技术提供一种,通过将网卡的自动探测及驱动加载均放在用户态,来消除内核态驱动带来的系统调用及数据包拷贝的高额开销,同时,用户态驱动提供了非常强悍的调试能力,能将驱动开发人员在Linux下繁琐的调试作业中解放出来,进一步提高开发效率。附图说明图1为本专利技术一实施例的流程图。具体实施例方式下面对于本专利技术所提出的一种,结合附图和实施例详细说明。如图1所示,本专利技术提供一种,包括以下步骤:S1、在Linux内核初始化阶段,PCI总线注册各个驱动并扫描所有挂载在PCI总线上的设备;在内核初始化阶段PCI驱动加载会调用统一的接口 pci_register_driver注册各个驱动;S2、所述各个驱动分别遍历所述挂载在PCI总线上的设备,并判断所述驱动是否与该设备匹配,若是,则执行步骤S3,若不是,则返回步骤SI ;S3、判断所述设备的类别码是否为网卡设备的类别码,若不是,则将该设备初始化,若是,则执行步骤S4;S4、将所述设备识别为网卡,保存所述网卡信息并放弃对所述网卡的初始化,所述网卡的类别码Class Code为0x20000S5、用户态获取所述网卡信息,并根据所述网卡信息加载对应的网卡驱动。优选的,所述步骤S2进一步包括:所述各个驱动分别遍历所述挂载在PCI总线上的设备,并根据VendorIDXlass以及DeviceID判断所述驱动是否与该设备匹配。优选的,所述用户态包括大块内存申请的补丁以及Mmap内存映射;所述大块内存申请的补丁(Bigphysarea)用来解决Linux无法申请大块连续内存的问题;所述Mmap内存映射用来提供物理地址映射为用户态地址的功能,使得用户态空间可以访问到DMA的内存。其中,Linux初始化阶段,在创建的所述大块内存申请的补丁中保留内存区中申请所有的内存,得到物理内存的起始地址和大小,并记录;同时网卡自动探测保存的信息也被记录下来。优选的,所述步骤S5进一步包括:用户态通过ioctl函数访问内核态,获取所述内核态探测到的所述网卡信息。优选的,所述步骤S5进一步包括:用户态根据所述网卡信息对所述网卡进行初始化。优选的,所述网卡信息包括网卡类型、网卡个数、所述网卡对应的驱动类型以及网卡设备的总线编号、设备编号和功能编号。本专利技术提供一种,通过将网卡的自动探测及驱动加载均放在用户态,来消除内核态驱动带来的系统调用及数据包拷贝的高额开销,同时,用户态驱动提供了非常强悍的调试能力,能将驱动开发人员在Llinux下繁琐的调试作业中解放出来,进一步提高开发效率。以上实施方式仅用于说明本专利技术,而并非对本专利技术的限制,有关
的普通技术人员,在不脱离本专利技术的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本专利技术的范畴,本专利技术的专利保护范围应由权利要求限定。本文档来自技高网
...

【技术保护点】
一种Linux系统下用户态网卡自动探测及驱动加载的方法,其特征在于,包括以下步骤:S1、在Linux内核初始化阶段,PCI总线注册各个驱动并扫描所有挂载在PCI总线上的设备;S2、所述各个驱动分别遍历所述挂载在PCI总线上的设备,并判断所述驱动是否与该设备匹配,若是,则执行步骤S3,若不是,则返回步骤S1;S3、判断所述设备的类别码是否为网卡设备的类别码,若不是,则将该设备初始化,若是,则执行步骤S4;S4、将所述设备识别为网卡,保存所述网卡信息并放弃对所述网卡的初始化;S5、用户态获取所述网卡信息,并根据所述网卡信息加载对应的网卡驱动。

【技术特征摘要】
1.一种Linux系统下用户态网卡自动探测及驱动加载的方法,其特征在于,包括以下步骤: 51、在Linux内核初始化阶段,PCI总线注册各个驱动并扫描所有挂载在PCI总线上的设备; 52、所述各个驱动分别遍历所述挂载在PCI总线上的设备,并判断所述驱动是否与该设备匹配,若是,则执行步骤S3,若不是,则返回步骤SI ; 53、判断所述设备的类别码是否为网卡设备的类别码,若不是,则将该设备初始化,若是,则执行步骤S4; 54、将所述设备识别为网卡,保存所述网卡信息并放弃对所述网卡的初始化; 55、用户态获取所述网卡信息,并根据所述网卡信息加载对应的网卡驱动。2.如权利要求1所述的方法,其特征在于,所述步骤S2进一步包...

【专利技术属性】
技术研发人员:高福亮
申请(专利权)人:汉柏科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1