centos安装无线网卡驱动_CentOS下显卡驱动安装的相关思考

f2540ce20654f32f686f2ec0299b8678.png

背景:最近在安装显卡驱动,查找了一些网上的教程,但总感觉思路不够清晰,没办法弄清背后涉及的Linux原理,于是参考网上教程,并查阅了相关资料,希望能对显卡驱动安装作一个梳理,以做记录。


首先,查看版本信息

# cat /etc/system-release
CentOS Linux release 7.6.1810 (Core)# uname -r
3.10.0-957.21.3.el7.x86_64

一、Linux module(模块)机制

Linux内核作用有以下作用:

1、管理内存

2、调度任务

3、驱动硬件

4、网络功能

5、安全

6、管理文件系统

Linux内核框架庞大,随着新硬件、文件系统和新功能的不断发展,如果把所有需要的功能都编译到Linux内核中,会造成内核体积庞大,每次加入新的功能都需要重新编译内核,非常麻烦。

为解决这个问题,Linux引入了模块机制,简单来讲,就是kernel(内核)只负责最主要的功能,当需要添加新的硬件和功能时,可以把新功能和新硬件的驱动单独编译为一个模块,开机载入kernel时,系统会同时载入模块,从而提高灵活性。当然,也可以把模块看作kernel的一部分。

在我的机器上,驱动模块放在以下目录中

/lib/modules/3.10.0-957.21.3.el7.x86_64/kernel/drivers

来看看该目录下有什么东西:

# ls /lib/modules/3.10.0-957.21.3.el7.x86_64/kernel/drivers
acpi        block      crypto  firewire  hv     infiniband  md        misc  nvdimm   pinctrl   ptp   staging  usb    virtio
ata         bluetooth  dax     firmware  hwmon  input       media     mmc   nvme     platform  pwm   target   uwb    watchdog
auxdisplay  cdrom      dca     gpio      i2c    iommu       memstick  mtd   parport  power     rtc   thermal  vfio   xen
base        char       dma     gpu       idle   isdn        message   net   pci      powercap  scsi  tty      vhost
bcma        cpufreq    edac    hid       iio    leds        mfd       ntb   pcmcia   pps       ssb   uio      video

可以看到有acpi电源管理驱动,cdrom驱动,gpu驱动,还有nvme,pci,scsi,usb等驱动。由于本文主要讨论显卡驱动,我们进入gpu目录来看看有什么。

# cd gpu
# ls
drm
# cd drm
# ls
amd  bochs   drm_kms_helper.ko.xz  drm_panel_orientation_quirks.ko.xz  i2c   mgag200  qxl     scheduler  udl     vmwgfx
ast  cirrus  drm.ko.xz             gma500                              i915  nouveau  radeon  ttm        virtio

可以看到有以.ko.xz结尾的文件,这就是Linux下模块的文件类型。还有一个特别要注意的目录nouveau,该目录下有nouveau.ko.xz文件,在我们没有安装Nvidia官方驱动时,系统开机默认使用的就是这个驱动。(nouveau是一个开源驱动,性能很差)

由于安装显卡驱动模块,要重新编译模块,所以需要内核模块编译的相关文件kernel-header和kernel-devel,通过yum安装

# yum -y install kernel-header 
# yum -y install kernel-devel

二、initramfs文件(参考自鸟哥的Linux私房菜)

开机时我们需要识别硬盘并挂载/目录,从而载入kernel,然而此时并没有硬盘SATA接口的SCSI驱动,那么该如何挂载并载入kernel呢?

Linux提供了initramfs文件,他的目的在于提供开机过程中所需要的最重要核心模块,以让系统开机过程可以顺利完成。initramfs 可以将/lib/modules/.... 内的“开机过程当中一定需要的模块”包成一个文件 (文件名就是initramfs),然后在开机时通过主机的INT 13硬件功能将该文件读出来解压缩,并且initramfs在内存内会仿真成为根目录,由于此虚拟文件系统 (Initial RAM Disk) 主要包含磁盘与文件系统的模块,因此我们的核心最后就能够认识实际的磁盘,那就能够进行实际根目录的挂载。

initramfs文件位于以下目录:

# cd /boot
# ls
config-3.10.0-957.21.3.el7.x86_64
efi
grub
grub2
initramfs-0-rescue-740f2d9ceee54b1cb523569c7bf00ac8.img
initramfs-3.10.0-957.21.3.el7.x86_64.img
initramfs-3.10.0-957.21.3.el7.x86_64kdump.img
symvers-3.10.0-957.21.3.el7.x86_64.gz
System.map-3.10.0-957.21.3.el7.x86_64
vmlinuz-0-rescue-740f2d9ceee54b1cb523569c7bf00ac8
vmlinuz-3.10.0-957.21.3.el7.x86_64

就是后缀为.img的文件,系统会载入内核对应的.img文件。

所以说,initramfs 内所包含的模块大多是与开机过程有关,而主要以文件系统及硬盘模块 (如usb,SCSI 等) 为主。

一般来说,需要initramfs的时刻为:

根目录所在磁盘为 SATA、USB 或 SCSI等接口;

根目录所在文件系统为 LVM,RAID 等特殊格式;

根目录所在文件系统为非传统 Linux 认识的文件系统时;

其他必须要在核心载入时提供的模块。


以上参考自鸟哥的Linux私房菜,然而,通过我的实践,发现 initramfs不仅仅载入了以上模块,同时还载入了显卡驱动,通过lsinitrd命令可以看到initramfs文件的内容。

通过lsinitrd | grep gpu 查看 gpu相关内容

# lsinitrd | grep gpu
drwxr-xr-x   3 root     root            0 Jul 13 20:24 usr/lib/modules/3.10.0-957.21.3.el7.x86_64/kernel/drivers/gpu
drwxr-xr-x   4 root     root            0 Jul 13 20:24 usr/lib/modules/3.10.0-957.21.3.el7.x86_64/kernel/drivers/gpu/drm
-rw-r--r--   1 root     root        69320 Jun 19 00:57 usr/lib/modules/3.10.0-957.21.3.el7.x86_64/kernel/drivers/gpu/drm/drm_kms_helper.ko.xz
-rw-r--r--   1 root     root       145824 Jun 19 00:57 usr/lib/modules/3.10.0-957.21.3.el7.x86_64/kernel/drivers/gpu/drm/drm.ko.xz
-rw-r--r--   1 root     root         2080 Jun 19 00:57 usr/lib/modules/3.10.0-957.21.3.el7.x86_64/kernel/drivers/gpu/drm/drm_panel_orientation_quirks.ko.xz
drwxr-xr-x   2 root     root            0 Jul 13 20:24 usr/lib/modules/3.10.0-957.21.3.el7.x86_64/kernel/drivers/gpu/drm/nouveau
-rw-r--r--   1 root     root       554788 Jun 19 00:57 usr/lib/modules/3.10.0-957.21.3.el7.x86_64/kernel/drivers/gpu/drm/nouveau/nouveau.ko.xz
drwxr-xr-x   2 root     root            0 Jul 13 20:24 usr/lib/modules/3.10.0-957.21.3.el7.x86_64/kernel/drivers/gpu/drm/ttm
-rw-r--r--   1 root     root        43728 Jun 19 00:57 usr/lib/modules/3.10.0-957.21.3.el7.x86_64/kernel/drivers/gpu/drm/ttm/ttm.ko.xz

可以看到initramfs有nouveau.ko.xz显卡驱动载入的相关设置。


三、initramfs文件相关设置

既然我们要安装新的显卡驱动,首先需要屏蔽掉nouveau这个开源驱动,而这个驱动是由 initramfs载入的,所以我们需要修改initramfs文件,然而initramfs非常重要,随意修改可能会导致系统无法正常开机。

要修改initramfs,Linux需要修改其配置文件,通过 options 选项来带入相关参数,然后使用dracut命令重新生成 initramfs,配置文件路径如下

/lib/modprobe.d/dist-blacklist.conf

(CentOS 6.x系统配置文件在/etc/modprobe.d/blacklist.conf下)

使用vim编辑此配置文件

# vim /lib/modprobe.d/dist-blacklist.conf#
# Listing a module here prevents the hotplug scripts from loading it.
# Usually that'd be so that some other driver will bind it instead,
# no matter which driver happens to get probed first.  Sometimes user
# mode tools can also control driver binding.
#
# Syntax: see modprobe.conf(5).
## watchdog drivers
blacklist i8xx_tco# framebuffer drivers
blacklist aty128fb
blacklist atyfb
blacklist radeonfb
blacklist i810fb
blacklist cirrusfb
blacklist intelfb
blacklist kyrofb
blacklist i2c-matroxfb
blacklist hgafb
#blacklist nvidiafb               /*
blacklist nouveau                *  修改的内容
options nouveau modeset=0      */
blacklist rivafb
blacklist savagefb
blacklist sstfb
blacklist neofb
blacklist tridentfb
blacklist tdfxfb
blacklist virgefb
blacklist vga16fb
blacklist viafb# ISDN - see bugs 154799, 159068
blacklist hisax
blacklist hisax_fcpcipnp# sound drivers
blacklist snd-pcsp# I/O dynamic configuration support for s390x (bz #563228)
blacklist chsc_sch# crypto algorithms
blacklist sha1-mb# see bz #1562114
blacklist sha256-mb                                           

找到# framebuffer drivers这一栏,我们需要解释一下 framebuffer

帧缓冲(framebuffer)是Linux为显示设备提供的一个接口,把显存抽象后的一种设备,他允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。framebuffer是LCD对应的一中HAL(硬件抽象层),提供抽象的,统一的接口操作,用户不必关心硬件层是怎么实施的。这些都是由 Framebuffer设备驱动来完成的。

Linux FrameBuffer 本质上只是提供了对图形设备的硬件抽象,在开发者看来,FrameBuffer 是一块显示缓存,往显示缓存中写入特定格式的数据就意味着向屏幕输出内容。

简单来讲, framebuffer就是kernel与显卡驱动的一个中间层(framebuffer也是驱动),然而,由于各显卡厂商(AMD/Nvidia)的硬件架构,寄存器有差异,所以需要使用相对应的framebuffer驱动。

我们可以在# framebuffer drivers 看到 radeonfb 对应AMD显卡,nvidiafb对应 Nvidia显卡,不过默认都是被屏蔽掉的(因为系统默认使用nouveau驱动)。

我们要安装Nvidia显卡驱动,所以在blacklist nvidiafb前面加#号,取消nvidiafb的屏蔽。

那么又该如何屏蔽nouveau驱动呢?在 # framebuffer drivers下写入以下配置:

blacklist nouveau //屏蔽 nouveau

options nouveau modeset=0 //关于这一行,网上的教程没有给出这么写的原因,通过搜索网络,我找到这么如下解释:

linux内核的modeset=0 或者 nomodeset参数的作用是什么啊?​zhidao.baidu.com
3c47105599c93988b1b03d634bdac802.png

字符界面也可以打开 framebuffer 来提供 2D 加速,图形显示的功能。不过有的时候如果有问题,内核还会继续设置显示模式而导致显示不正常。这个时候这个命令就让内核不再去设置显示模式而保证系统还可以进入字符界面。不过当然就是标准的显示状态了,至少能用的显示状态。

`nomodeset` 做什么_ubuntu_帮酷​www.helplib.com

最新的内核已经将视频模式设置移到内核中。 所以在X 服务器启动时,所有的硬件特定时钟速率和寄存器上的寄存器都会发生。 这使得得到高分辨率的( 引导) 显示屏和闪烁的自由转换从启动屏幕到登录屏幕是可以能的。 不幸的是,有些卡不能正常工作,你最终会得到一个 black 屏幕。 添加nomodeset参数指示内核不加载视频驱动程序,而是使用BIOS模式,直到加载了X。

也就是说,如果不加这一行,字符界面下,可能导致显示器黑屏,无法安装驱动。

通过以上设置,我们完成了/lib/modprobe.d/dist-blacklist.conf的配置,接下来需要使用dracut命令根据我们的设置重新生成initramfs文件,从而完成显卡驱动安装前的准备工作。


四、安装显卡驱动

1.安装内核模块编译的相关文件kernel-header和kernel-devel

# yum -y install kernel-header 
# yum -y install kernel-devel

2.下载显卡相对应的显卡驱动(AMD/Nvidia官网),我的驱动放在了根目录下, 文件以.run结尾

# cd /
# ls
bin   dev  home  lib64  mnt                             opt   root  sbin  sys  usr
boot  etc  lib    media  NVIDIA-Linux-x86_64-430.34.run   proc  run   srv   tmp  var

3. 屏蔽默认的开源驱动nouveau

vim 编辑配置文件

# vim /lib/modprobe.d/dist-blacklist.conf

找到 # framebuffer drivers一栏

将nvidiafb注释掉

# blacklist nvidiafb

然后添加以下语句:

blacklist nouveau
options nouveau modeset=0

4. 重新生成 initramfs image 文件

mv /boot/initramfs-3.10.0-957.21.3.el7.x86_64.img /boot/initramfs-3.10.0-957.21.3.el7.x86_64.img.bak

上面这一行的作用是把旧的initramfs文件名进行修改,在文件名末尾加入.bak代表这是弃用的initramfs文件,这样做是为了保险,当然,你也可以把这个文件删除掉,因为我们要生成新的initramfs文件。

使用 dracut 命令重新生成 initramfs image 文件

dracut /boot/initramfs-3.10.0-957.21.3.el7.x86_64.img 3.10.0-957.21.3.el7.x86_64

5. 重启计算机

# reboot

由于我们禁用了nouvenv驱动,所以重启后显示效果很差

6.进入字符界面

# init 3

7.赋予Nvidia驱动执行权限

# chmod 777 NVIDIA-Linux-x86_64-430.34.run

8. 执行Nvidia驱动

# ./NVIDIA-Linux-x86_64-430.34.run

安装过程全部选择Yes

9.返回图形界面

# init 5

10.重启计算机

# reboot

到此安装完成

重启后我们可以使用 nvidia-smi 命令查看显卡状态

# nvidia-smi 
Sat Jul 20 23:06:28 2019       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 430.34       Driver Version: 430.34         CUDA Version: 10.1     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 770     Off  | 00000000:01:00.0 N/A |                  N/A |
| 31%   56C    P0    N/A /  N/A |    283MiB /  1996MiB |     N/A      Default |
+-------------------------------+----------------------+----------------------++-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0                    Not Supported                                       |
+-----------------------------------------------------------------------------+

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/428270.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

获取select被选中的option的值

<select id"select"> <option>绥江</option> <option>西江</option> <option>北江</option> <option>贺江</option> <option>新兴江</option> </select> $(funct…

红石32位cpu通用计算机,我的世界无命令方块32位红石电脑装置详解

来源&#xff1a;游戏园日期&#xff1a;2019-05-14 04:03:07我的世界无命令方块32位红石电脑装置详解。那下面给大家分享的是我的世界中的一个叫做机器编号为RSC-3230的红石电脑装置哦~有喜欢的顽疾啊不妨进来看看下的这个电脑哦~喜欢的话还可以下载下面的存档哦~本作品是一台…

python字符串字面量有哪四种定义方式_Python学习笔记(四)字符串型

字符串是 Python 中最常用的数据类型。我们可以使用引号(或")来创建字符串。 在最新的Python 3版本中&#xff0c;字符串是以Unicode编码的&#xff0c;也就是说&#xff0c;Python的字符串支持多语言。 创建字符串很简单&#xff0c;只要为变量分配一个值即可 View Code …

bzoj4380[POI2015]Myjnie dp

[POI2015]Myjnie Time Limit: 40 Sec Memory Limit: 256 MBSec Special JudgeSubmit: 368 Solved: 185[Submit][Status][Discuss]Description 有n家洗车店从左往右排成一排&#xff0c;每家店都有一个正整数价格p[i]。有m个人要来消费&#xff0c;第i个人会驶过第a[i]个开始…

全国计算机等级考试用报名吗,全国计算机等级考试网上报名流程及考生报名使用说明...

全国计算机等级考试网上报名流程及考生报名使用说明附件&#xff1a;考生报名使用说明(一)注册账号和登录1)考生首次登录系统需要注册登录通行证&#xff0c;若考生有通行证账号&#xff0c;可以直接登录。2)考生也可使用其他账号登录&#xff0c;例如使用“QQ账号”登录。点击…

iptables nat实验_【零基础学云计算】LVS负载均衡群集之NAT模式搭建 (实践篇)...

实验原理图实验环境LVS调度器作为web服务器池的网关LVS服务器配置两块网卡分别连接内外网使用轮询&#xff08;rr&#xff09;调度算法LVS负载调度器网段规划 内网33网关&#xff1a;192.168.144.1 外网36&#xff1a;12.0.0.1web1 192.168.144.151web2 192.168.144.170nfs服务…

rs232串口驱动_RS232与RS485在性能上有啥区别和联系?老电工总结分析,一目了然...

串口是一种非常通用的设备接口&#xff0c;是仪器仪表设备常用的通信接口&#xff0c;常用于远程采集设备数据或者实现远程控制。串口的开发也比较简单&#xff0c;它是很多工程师最喜欢的接口之一。常见的串口协议有RS-232、RS-422、RS-485等&#xff0c;它是电子工程师面对的…

win7里面计算机叫什么,Win7电脑中的mrt.exe是甚么文件

咱们正在运用Win7体系的时分&#xff0c;只有咱们翻开使命办理便能够看失到有一个mrt.exe 步伐正在运转&#xff0c;也没有知叙mrt.exe 是甚么入程的&#xff0c;否不成以制止。这Win7电脑外的mrt.exe 是甚么文件呢&#xff1f;如今便随小编一同来看看电脑外的mrt.exe是甚么文件…

svn权限配置

转载于:https://www.cnblogs.com/wzlbigdata/p/8329601.html

pytorch gather_【Pytorch】Pytorch-1.1.0 版本新特性

2019年05月01日&#xff0c;Pytorch 1.1.0 版本正式发布啦~https://github.com/pytorch/pytorch/releases/tag/v1.1.0主要的几个功能&#xff1a;1. TensorBoard (currently experimental)2. JIT 的升级 [JIT] Attributes in ScriptModules [JIT] Dictionary and List Support …

MySQL-5.7.21非图形化下载、安装、连接问题记录

1、安装包下载链接&#xff1a;https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.21-winx64.zip 官网&#xff1a;https://www.mysql.com/downloads/ -> Community ->MySQl Community Sever ->选择与电脑对应的版本DownLoad 2、解压安装包到自定义的文件夹…

c++定义一个动态全局变量_静态链接与动态链接的宏观概述及微观详解

静态链接与动态链接的宏观概述及微观详解第一部分 宏观概述 1. 静态链接静态链接就是在程序运行前&#xff0c;链接器通过对象文件中包含的重定位表&#xff0c;完成所有重定位操作&#xff0c;并最终形成一个在运行时不需要再次进行依赖库的加载和重定位操作&#xff08;因为所…

pwm控制舵机转动角度程序_Mixly 第15课 舵机的使用

第15课 舵机的使用舵机的旋转不像普通电机那样只是转圈圈&#xff0c;它可以根据你的指令旋转到0至180度之间的任意角度然后精准的停下来。舵机的转动的角度是通过调节PWM(脉冲宽度调制)信号的占空比来实现的。舵机比较多的用于对角度有要求的场合&#xff0c;比如机器人、摄像…

1、初始JAVA

一、 语言的翻译分两种&#xff1a; 编译型语言&#xff1a;例如c语言、c语言 优点&#xff1a;速度快 缺点&#xff1a;不能跨平台 编译器编译——>特定平台的目标文件obj——>特定平台 解释型语言&#xff1a;例如PHP语言、JavaScript语言 优点&am…

base64 转文件_PHP伪协议与文件包含

PHP伪协议与文件包含PHP伪协议与文件包含php:// 协议php://inputphp://filterdata:// 协议file:// 协议zip://、bzip2://、zlib://协议zip://协议bzip2://协议zlib://协议phar://伪协议文件包含漏洞(File Inclusion)文件包含漏洞&#xff1a;即file inclusion&#xff0c;意思是…

redis 登录_Redis集群架构+Dubbo开发框架+SSO单点登录+Nginx+ZooKeeper

Redis集群架构【课程介绍】Redis是现在使用为广泛的NoSQL数据库技术&#xff0c;其自身不仅拥有着良好的操作性能&#xff0c;也被广泛的应用于各种集群架构的数据整合处理之中&#xff0c;而本课程将通过Redis的核心作用&#xff0c;以及单实例redis存在的问题为读者进行分析&…

NopCommerce用.net core重写ef

最近看了NopCommerce源码&#xff0c;用core学习着写了一个项目&#xff0c;修改的地方记录下。项目地址 NopCommerce框架出来好久了。18年的第一季度 懒加载出来后也会全部移动到.net core。那么就更好玩了。 项目内容 模仿部分分层模式引擎机制DI容器EF仓储模式Mapping部分修…

服务器u8系统数据库不存在,用友u8服务器端数据库不装

用友u8服务器端数据库不装 内容精选换一换本章节指导您使用MongoDB客户端&#xff0c;通过弹性云服务器内网方式连接GaussDB(for Mongo)集群实例。操作系统使用场景&#xff1a;弹性云服务器的操作系统以Linux为例&#xff0c;客户端本地使用的计算机系统以Windows为例。目标实…

ie传递给系统调用的数据区域太小_内存区域与内存溢出异常

自动内存管理机制运行时数据区&#xff1a;Java虚拟机定义了在程序执行期间使用的各种运行时数据区域。其中一些数据区域是在Java虚拟机启动时创建的&#xff0c;仅在Java虚拟机退出时销毁。其他数据区域是每个线程所占的空间。线程数据区域是随着线程销毁和创建的。PC 寄存器(…

0010服务器无对应信息,服务器版本对应的内存

服务器版本对应的内存 内容精选换一换硬件要求如表1所示。操作系统要求如表2所示。上表中所需Ubuntu下载地址&#xff1a;服务器1&#xff1a;Ubuntu 18.04.1镜像包、Ubuntu 16.04.4 镜像包。服务器2&#xff1a;Ubuntu 16.04.3 镜像包。在安装操作系统过程中“选择软件列表”时…