centos安装无线网卡驱动_CentOS下显卡驱动安装的相关思考
背景:最近在安裝顯卡驅(qū)動,查找了一些網(wǎng)上的教程,但總感覺思路不夠清晰,沒辦法弄清背后涉及的Linux原理,于是參考網(wǎng)上教程,并查閱了相關(guān)資料,希望能對顯卡驅(qū)動安裝作一個梳理,以做記錄。
首先,查看版本信息
# cat /etc/system-release CentOS Linux release 7.6.1810 (Core)# uname -r 3.10.0-957.21.3.el7.x86_64一、Linux module(模塊)機(jī)制
Linux內(nèi)核作用有以下作用:
1、管理內(nèi)存
2、調(diào)度任務(wù)
3、驅(qū)動硬件
4、網(wǎng)絡(luò)功能
5、安全
6、管理文件系統(tǒng)
Linux內(nèi)核框架龐大,隨著新硬件、文件系統(tǒng)和新功能的不斷發(fā)展,如果把所有需要的功能都編譯到Linux內(nèi)核中,會造成內(nèi)核體積龐大,每次加入新的功能都需要重新編譯內(nèi)核,非常麻煩。
為解決這個問題,Linux引入了模塊機(jī)制,簡單來講,就是kernel(內(nèi)核)只負(fù)責(zé)最主要的功能,當(dāng)需要添加新的硬件和功能時,可以把新功能和新硬件的驅(qū)動單獨(dú)編譯為一個模塊,開機(jī)載入kernel時,系統(tǒng)會同時載入模塊,從而提高靈活性。當(dāng)然,也可以把模塊看作kernel的一部分。
在我的機(jī)器上,驅(qū)動模塊放在以下目錄中
/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電源管理驅(qū)動,cdrom驅(qū)動,gpu驅(qū)動,還有nvme,pci,scsi,usb等驅(qū)動。由于本文主要討論顯卡驅(qū)動,我們進(jìn)入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結(jié)尾的文件,這就是Linux下模塊的文件類型。還有一個特別要注意的目錄nouveau,該目錄下有nouveau.ko.xz文件,在我們沒有安裝Nvidia官方驅(qū)動時,系統(tǒng)開機(jī)默認(rèn)使用的就是這個驅(qū)動。(nouveau是一個開源驅(qū)動,性能很差)
由于安裝顯卡驅(qū)動模塊,要重新編譯模塊,所以需要內(nèi)核模塊編譯的相關(guān)文件kernel-header和kernel-devel,通過yum安裝
# yum -y install kernel-header # yum -y install kernel-devel二、initramfs文件(參考自鳥哥的Linux私房菜)
開機(jī)時我們需要識別硬盤并掛載/目錄,從而載入kernel,然而此時并沒有硬盤SATA接口的SCSI驅(qū)動,那么該如何掛載并載入kernel呢?
Linux提供了initramfs文件,他的目的在于提供開機(jī)過程中所需要的最重要核心模塊,以讓系統(tǒng)開機(jī)過程可以順利完成。initramfs 可以將/lib/modules/.... 內(nèi)的“開機(jī)過程當(dāng)中一定需要的模塊”包成一個文件 (文件名就是initramfs),然后在開機(jī)時通過主機(jī)的INT 13硬件功能將該文件讀出來解壓縮,并且initramfs在內(nèi)存內(nèi)會仿真成為根目錄,由于此虛擬文件系統(tǒng) (Initial RAM Disk) 主要包含磁盤與文件系統(tǒng)的模塊,因此我們的核心最后就能夠認(rèn)識實(shí)際的磁盤,那就能夠進(jìn)行實(shí)際根目錄的掛載。
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的文件,系統(tǒng)會載入內(nèi)核對應(yīng)的.img文件。
所以說,initramfs 內(nèi)所包含的模塊大多是與開機(jī)過程有關(guān),而主要以文件系統(tǒng)及硬盤模塊 (如usb,SCSI 等) 為主。
一般來說,需要initramfs的時刻為:
根目錄所在磁盤為 SATA、USB 或 SCSI等接口;
根目錄所在文件系統(tǒng)為 LVM,RAID 等特殊格式;
根目錄所在文件系統(tǒng)為非傳統(tǒng) Linux 認(rèn)識的文件系統(tǒng)時;
其他必須要在核心載入時提供的模塊。
以上參考自鳥哥的Linux私房菜,然而,通過我的實(shí)踐,發(fā)現(xiàn) initramfs不僅僅載入了以上模塊,同時還載入了顯卡驅(qū)動,通過lsinitrd命令可以看到initramfs文件的內(nèi)容。
通過lsinitrd | grep gpu 查看 gpu相關(guān)內(nèi)容
# 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顯卡驅(qū)動載入的相關(guān)設(shè)置。
三、initramfs文件相關(guān)設(shè)置
既然我們要安裝新的顯卡驅(qū)動,首先需要屏蔽掉nouveau這個開源驅(qū)動,而這個驅(qū)動是由 initramfs載入的,所以我們需要修改initramfs文件,然而initramfs非常重要,隨意修改可能會導(dǎo)致系統(tǒng)無法正常開機(jī)。
要修改initramfs,Linux需要修改其配置文件,通過 options 選項(xiàng)來帶入相關(guān)參數(shù),然后使用dracut命令重新生成 initramfs,配置文件路徑如下
/lib/modprobe.d/dist-blacklist.conf(CentOS 6.x系統(tǒng)配置文件在/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 * 修改的內(nèi)容 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為顯示設(shè)備提供的一個接口,把顯存抽象后的一種設(shè)備,他允許上層應(yīng)用程序在圖形模式下直接對顯示緩沖區(qū)進(jìn)行讀寫操作。framebuffer是LCD對應(yīng)的一中HAL(硬件抽象層),提供抽象的,統(tǒng)一的接口操作,用戶不必關(guān)心硬件層是怎么實(shí)施的。這些都是由 Framebuffer設(shè)備驅(qū)動來完成的。
Linux FrameBuffer 本質(zhì)上只是提供了對圖形設(shè)備的硬件抽象,在開發(fā)者看來,FrameBuffer 是一塊顯示緩存,往顯示緩存中寫入特定格式的數(shù)據(jù)就意味著向屏幕輸出內(nèi)容。
簡單來講, framebuffer就是kernel與顯卡驅(qū)動的一個中間層(framebuffer也是驅(qū)動),然而,由于各顯卡廠商(AMD/Nvidia)的硬件架構(gòu),寄存器有差異,所以需要使用相對應(yīng)的framebuffer驅(qū)動。
我們可以在# framebuffer drivers 看到 radeonfb 對應(yīng)AMD顯卡,nvidiafb對應(yīng) Nvidia顯卡,不過默認(rèn)都是被屏蔽掉的(因?yàn)橄到y(tǒng)默認(rèn)使用nouveau驅(qū)動)。
我們要安裝Nvidia顯卡驅(qū)動,所以在blacklist nvidiafb前面加#號,取消nvidiafb的屏蔽。
那么又該如何屏蔽nouveau驅(qū)動呢?在 # framebuffer drivers下寫入以下配置:
blacklist nouveau //屏蔽 nouveau
options nouveau modeset=0 //關(guān)于這一行,網(wǎng)上的教程沒有給出這么寫的原因,通過搜索網(wǎng)絡(luò),我找到這么如下解釋:
linux內(nèi)核的modeset=0 或者 nomodeset參數(shù)的作用是什么啊??zhidao.baidu.com字符界面也可以打開 framebuffer 來提供 2D 加速,圖形顯示的功能。不過有的時候如果有問題,內(nèi)核還會繼續(xù)設(shè)置顯示模式而導(dǎo)致顯示不正常。這個時候這個命令就讓內(nèi)核不再去設(shè)置顯示模式而保證系統(tǒng)還可以進(jìn)入字符界面。不過當(dāng)然就是標(biāo)準(zhǔn)的顯示狀態(tài)了,至少能用的顯示狀態(tài)。
`nomodeset` 做什么_ubuntu_幫酷?www.helplib.com最新的內(nèi)核已經(jīng)將視頻模式設(shè)置移到內(nèi)核中。 所以在X 服務(wù)器啟動時,所有的硬件特定時鐘速率和寄存器上的寄存器都會發(fā)生。 這使得得到高分辨率的( 引導(dǎo)) 顯示屏和閃爍的自由轉(zhuǎn)換從啟動屏幕到登錄屏幕是可以能的。 不幸的是,有些卡不能正常工作,你最終會得到一個 black 屏幕。 添加nomodeset參數(shù)指示內(nèi)核不加載視頻驅(qū)動程序,而是使用BIOS模式,直到加載了X。
也就是說,如果不加這一行,字符界面下,可能導(dǎo)致顯示器黑屏,無法安裝驅(qū)動。
通過以上設(shè)置,我們完成了/lib/modprobe.d/dist-blacklist.conf的配置,接下來需要使用dracut命令根據(jù)我們的設(shè)置重新生成initramfs文件,從而完成顯卡驅(qū)動安裝前的準(zhǔn)備工作。
四、安裝顯卡驅(qū)動
1.安裝內(nèi)核模塊編譯的相關(guān)文件kernel-header和kernel-devel
# yum -y install kernel-header # yum -y install kernel-devel2.下載顯卡相對應(yīng)的顯卡驅(qū)動(AMD/Nvidia官網(wǎng)),我的驅(qū)動放在了根目錄下, 文件以.run結(jié)尾
# 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 var3. 屏蔽默認(rèn)的開源驅(qū)動nouveau
vim 編輯配置文件
# vim /lib/modprobe.d/dist-blacklist.conf找到 # framebuffer drivers一欄
將nvidiafb注釋掉
# blacklist nvidiafb然后添加以下語句:
blacklist nouveau options nouveau modeset=04. 重新生成 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文件名進(jìn)行修改,在文件名末尾加入.bak代表這是棄用的initramfs文件,這樣做是為了保險(xiǎn),當(dāng)然,你也可以把這個文件刪除掉,因?yàn)槲覀円尚碌膇nitramfs文件。
使用 dracut 命令重新生成 initramfs image 文件
dracut /boot/initramfs-3.10.0-957.21.3.el7.x86_64.img 3.10.0-957.21.3.el7.x86_645. 重啟計(jì)算機(jī)
# reboot由于我們禁用了nouvenv驅(qū)動,所以重啟后顯示效果很差
6.進(jìn)入字符界面
# init 37.賦予Nvidia驅(qū)動執(zhí)行權(quán)限
# chmod 777 NVIDIA-Linux-x86_64-430.34.run8. 執(zhí)行Nvidia驅(qū)動
# ./NVIDIA-Linux-x86_64-430.34.run安裝過程全部選擇Yes
9.返回圖形界面
# init 510.重啟計(jì)算機(jī)
# reboot到此安裝完成
重啟后我們可以使用 nvidia-smi 命令查看顯卡狀態(tài)
# 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 | +-----------------------------------------------------------------------------+總結(jié)
以上是生活随笔為你收集整理的centos安装无线网卡驱动_CentOS下显卡驱动安装的相关思考的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SAP 根据excel模板导入并批量生成
- 下一篇: 推荐系统——协同过滤