咱們在linux中安裝驅動,有時會遇到受限或衝突,一般解決方式都是要修改blacklist.conf, 那麼如何認識和深刻了解它呢?下面就解讀下
1、blacklist黑名單
對內核模塊來講,黑名單是指禁止某個模塊裝入的機制linux
在 /etc/modprobe.d/ 中建立 .conf 文件,使用 blacklist 關鍵字屏蔽不須要的模塊,例如若是不想裝入 pcspkr 模塊:ide
/etc/modprobe.d/blacklist.conf
blacklist pcspkr
或者經過命令行的模式
modprobe.blacklist=modname1,modname2
從這裏能夠看出blacklist是一個模塊參數,其實如今linux/module.c中
其源碼以下:
static bool blacklisted(const char module_name)
{
const char p;
size_t len;
#能夠看到module_blacklist 這個list 爲null,則直接返回false
if (!module_blacklist)
return false;
#這裏經過查詢這個list 來比較模塊的name 是否在module_blacklist中,若是在的話,返回true,就不在加載#layout_and_allocate 這個函數中加載這個模塊
for (p = module_blacklist; p; p += len) {
len = strcspn(p, ",");
if (strlen(module_name) == len && !memcmp(module_name, p, len))
return true;
if (p[len] == ',')
len++;
}
return false;
}
core_param(module_blacklist, module_blacklist, charp, 0400);
blacklisted 這個函數是在layout_and_allocate 中加載的
static struct module layout_and_allocate(struct load_info info, int flags)
{
/ Module within temporary copy. /
struct module mod;
unsigned int ndx;
int err;函數
mod = setup_load_info(info, flags); if (IS_ERR(mod)) return mod; #能夠看到若是blacklisted 返回true,則layout_and_allocate 就返回-EPERM,表示不加載這個模塊 if (blacklisted(info->name)) return ERR_PTR(-EPERM);
}工具
2、nvidia 顯卡驅動問題示例
Linux系統通常默認安裝的是開源的nouvea顯卡驅動,它與nvidia顯卡驅動產生衝突,欲裝nvidia必禁nouvea!其次Nvidia驅動默認安裝OpenGL桌面,然而這又與GNOME桌面衝突,爲了系統不宕機,也需禁用nvidia的OpenGL,過程當中須要搭建gcc、kernel等環境。如此,可順利安裝NVIDIA顯卡驅動。命令行
一、首先關閉secure boot
重啓電腦,進入BIOS
找到seure boot,通常在boot選項中
將 「Enable」 改成 「Disable」code
二、查看系統中存在的NVIDIA驅動 lspci | grep -i nvidia
選擇適合本主機linux的nvidia官網驅動,點擊搜索後進行下載server
由於驅動和內核的源碼進行編譯,須要安裝以下內核相關的包,以及一些編譯源碼的工具包:
yum install kernel-devel kernel-doc kernel-headers gcc* glibc* glibc-*ci
有時候 glx-utils.x86_64 會和驅動程序衝突,最好先刪除掉:
yum remove glx-utilsrem
三、把驅動加入黑名單中: /etc/modprobe.d/blacklist.conf 在後面加入:
#blacklist nvidiafb 將nvidiafb註釋掉
而後添加兩行
blacklist nouveau
options nouveau modeset=0
修改 /etc/default/grub 文件
在GRUB_CMDLINE_LINUX中添加源碼
rd.driver.blacklist nouveau nouveau.modeset=0
四、重建 initramfs image
mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
dracut /boot/initramfs-$(uname -r).img $(uname -r)
五、安裝編譯環境
yum install gcc kernel-devel kernerl-hearders -y
或 yum -y install gcc kernel-devel
六、安裝NVIDIA驅動
添加可執行權限
chmod +x NVIDIA-Linux-x86_64-375.39.run
七、退出X-server圖形,進入文本模式或修改下inittab
init 3
八、執行下
sh NVIDIA-Linux-x86_64-375.39.run --no-opengl-files
九、後面OK、Accept、yes就裝完了
十、最後使用nvidia-smi命令就能夠看到驅動詳情了
備註: depmod -a 對全部的模塊檢查下依賴性
echo modprobe wl >> /etc/rc.local