前言

安装windows系统一般都会下载驱动总裁或者鲁大师,又或者通过微软的自动更新来更新系统的驱动,但在Linux里面,驱动一般是集成在linux内核里面的,如果我们有一个pci设备没有驱动且内核不支持该怎么处理?

查看设备驱动

1
lspci -k 

可以先浏览一遍所有的pci设备,只需要关注每个设备是否有Kernel driver in use等字样,如果有的话就代表该设备可以驱动

  • 举个例子
1
2
3
4
5
02:01.0 Ethernet controller: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01)
DeviceName: Ethernet0
Subsystem: VMware PRO/1000 MT Single Port Adapter
Kernel driver in use: e1000
Kernel modules: e1000

例如我有一个网卡,他成功加载了e1000的驱动,这样就代表我们可以使用该网卡

没有驱动的处理

如果没有Kernel driver in use字样,处理手段一般是确认硬件型号->搜寻源代码->编译安装来解决的

确定型号

1
lspci -nn | grep -i eth

我们通过-nn参数来将厂商号:设备号输出如下

1
02:01.0 Ethernet : Intel Corporation 82545EM Gigabit  [8086:100f] (rev 01)

其中,我们只需要关注[8086:100f]这组数据就可以了

含义

8086是厂商号,代表某家厂商,100f是设备号,代表该厂商的产品

一般来说,如果内核完全不认网卡的话我们只能看出产品名字写的是Ethernet,也有一部分系统可以认出全名,如果能认出全名我们直接搜索全名就可以了,但如果没有全名我们只能依赖厂商号:设备号来定位设备

网页搜索

登陆devicehunt网站,我们只需要将我们的device id,即我例子中的100f填入搜索框,他就会将该设备的名字查询出来,类似这种网站的还有很多,比如 pci-ids.ucw.cz

查找驱动

既然已经知道型号了,那么就可以搜索对应的驱动源代码,一般找的网站有如下

  1. 各个产品的官网
  2. github或者gitee
  3. 我不知道了

假设我们成功的找到的某个产品的驱动源代码,我们只需要导入我们的linux发行版进行编译安装

编译安装

例如我成功在INTEL官网下载了e1000e-3.8.7.tar.gz源码包

  • 解压源码包
1
tar -xvf e1000e-3.8.7.tar.gz
  • 查看README

每个产品都会有类似的README文档来指导你如何使用,例如有如下2种方式,第一种就是让我们用rpmbuild来自己生成一个rpm包,第二种会让我生成一个ko文件,然后安装到内核里面去,然后我们再去使用lspci查看驱动的办法来验证是否记载驱动就可以了

  1. rpmbuild -tb e1000e-<x.x.x>.tar.gz
  2. 手动编译
    1. 查看具体步骤,是否要先./configure
    2. make编译
    3. insmod xx.ko 手动加载驱动
    4. 使用lspci -nvs 01:00.0这种来看设备的驱动是否加载
    5. 如果加载成功就make install
  1. makera,centos这些系统有的命令
  2. make,gcc,g++这种命令属于开发工具,如果系统没有的话需要自己安装