成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何裝載/卸載Linux內核模塊

系統 Linux
運行中的 Linux 內核是您不希望被破壞的東西之一。畢竟,內核是驅動計算機所做的一切工作的軟件。考慮到在一個運行的系統上必須同時管理諸多細節,最好能讓內核盡可能的減少分心,專心的完成它的工作。

[[233216]]

找到并裝載內核模塊以解決外設問題。

本文來自 Manning 出版的 Linux in Action 的第 15 章。

Linux 使用內核模塊管理硬件外設。 我們來看看它是如何工作的。

運行中的 Linux 內核是您不希望被破壞的東西之一。畢竟,內核是驅動計算機所做的一切工作的軟件。考慮到在一個運行的系統上必須同時管理諸多細節,最好能讓內核盡可能的減少分心,專心的完成它的工作。但是,如果對計算環境進行任何微小的更改都需要重啟整個系統,那么插入一個新的網絡攝像頭或打印機就可能會嚴重影響您的工作流程。每次添加設備時都必須重新啟動,以使系統識別它,這效率很低。

為了在穩定性和可用性之間達成有效的平衡,Linux 將內核隔離,但是允許您通過可加載內核模塊 (LKM) 實時添加特定的功能。如下圖所示,您可以將模塊視為軟件的一部分,它告訴內核在哪里找到一個設備以及如何使用它。反過來,內核使設備對用戶和進程可用,并監視其操作。

內核模塊充當設備和 Linux 內核之間的轉換器。

內核模塊充當設備和 Linux 內核之間的轉換器。

雖然你可以自己編寫模塊來完全按照你喜歡的方式來支持一個設備,但是為什么要這樣做呢?Linux 模塊庫已經非常強大,通常不需要自己去實現一個模塊。 而絕大多數時候,Linux 會自動加載新設備的模塊,而您甚至不知道它。

不過,有時候,出于某種原因,它本身并不會自動進行。(你肯定不想讓那個招聘經理不耐煩地一直等待你的笑臉加入視頻面試。)為了幫助你解決問題,你需要更多地了解內核模塊,特別是,如何找到運行你的外設的實際模塊,然后如何手動激活它。

 

查找內核模塊

按照公認的約定,內核模塊是位于 /lib/modules/ 目錄下的具有 .ko(內核對象)擴展名的文件。 然而,在你找到這些文件之前,你還需要選擇一下。因為在引導時你需要從版本列表中選擇其一加載,所以支持您選擇的特定軟件(包括內核模塊)必須存在某處。 那么,/lib/modules/ 就是其中之一。 你會發現目錄里充滿了每個可用的 Linux 內核版本的模塊; 例如:

  1. $ ls /lib/modules
  2. 4.4.0-101-generic
  3. 4.4.0-103-generic
  4. 4.4.0-104-generic

在我的電腦上,運行的內核是版本號最高的版本(4.4.0-104-generic),但不能保證這對你來說是一樣的(內核經常更新)。 如果您將要在一個運行的系統上使用模塊完成一些工作的話,你需要確保您找到正確的目錄樹。

好消息:有一個可靠的竅門。相對于通過名稱來識別目錄,并希望能夠找到正確的目錄,你可以使用始終指向使用的內核名稱的系統變量。 您可以使用 uname -r-r 從系統信息中指定通常顯示的內核版本號)來調用該變量:

  1. $ uname -r
  2. 4.4.0-104-generic

通過這些信息,您可以使用稱為命令替換的過程將 uname 并入您的文件系統引用中。 例如,要導航到正確的目錄,您需要將其添加到 /lib/modules 。 要告訴 Linux “uname” 不是一個文件系統中的位置,請將 uname 部分用反引號括起來,如下所示:

  1. $ ls /lib/modules/`uname -r`
  2. build modules.alias modules.dep modules.softdep
  3. initrd modules.alias.bin modules.dep.bin modules.symbols
  4. kernel modules.builtin modules.devname modules.symbols.bin
  5. misc modules.builtin.bin modules.order vdso
  6.  

你可以在 kernel/ 目錄下的子目錄中找到大部分模塊。 花幾分鐘時間瀏覽這些目錄,了解事物的排列方式和可用內容。 這些文件名通常會讓你知道它們是什么。

  1. $ ls /lib/modules/`uname -r`/kernel
  2. arch crypto drivers fs kernel lib mm
  3. net sound ubuntu virt zfs

這是查找內核模塊的一種方法;實際上,這是一種快速的方式。 但這不是唯一的方法。 如果你想獲得完整的集合,你可以使用 lsmod 列出所有當前加載的模塊以及一些基本信息。 這個截斷輸出的第一列(在這里列出的太多了)是模塊名稱,后面是文件大小和數量,然后是每個模塊的名稱:

  1. $ lsmod
  2. [...]
  3. vboxdrv 454656 3 vboxnetadp,vboxnetflt,vboxpci
  4. rt2x00usb 24576 1 rt2800usb
  5. rt2800lib 94208 1 rt2800usb
  6. [...]

到底有多少?好吧,我們再運行一次 lsmod ,但是這一次將輸出管道輸送到 wc -l 看一下一共多少行:

  1. $ lsmod | wc -l
  2. 113

這是已加載的模塊。 總共有多少個? 運行 modprobe -c 并計算這些行將給我們這個數字:

  1. $ modprobe -c | wc -l
  2. 33350

有 33,350 個可用模塊!? 看起來好像有人多年來一直在努力為我們提供軟件來驅動我們的物理設備。

注意:在某些系統中,您可能會遇到自定義的模塊,這些模塊要么在 /etc/modules 文件中使用獨特的條目進行引用,要么在 /etc/modules-load.d/ 下的配置文件中。這些模塊很可能是本地開發項目的產物,可能涉及前沿實驗。不管怎樣,知道你看到的是什么總是好的。

這就是如何找到模塊的方法。 如果出于某種原因,它不會自行加載,您的下一個工作就是弄清楚如何手動加載未激活的模塊。

 

手動加載內核模塊

在加載內核模塊之前,邏輯上您必須確認它存在。在這之前,你需要知道它叫什么。要做到這一點,有時需要兼有魔法和運氣以及在線文檔作者的辛勤工作的幫助。

我將通過描述一段時間前遇到的問題來說明這個過程。在一個晴朗的日子里,出于某種原因,筆記本電腦上的 WiFi 接口停止工作了。就這樣。也許是軟件升級把它搞砸了。誰知道呢?我運行了 lshw -c network ,得到了這個非常奇怪的信息:

  1. network UNCLAIMED
  2.     AR9485 Wireless Network Adapter

Linux 識別到了接口(Atheros AR9485),但將其列為未聲明。 那么,正如他們所說的那樣,“當情況變得嚴峻時,就會在互聯網上進行艱難的搜索。” 我搜索了一下 atheros ar9 linux 模塊,在瀏覽了一頁又一頁五年前甚至是十年前的頁面后,它們建議我自己寫個模塊或者放棄吧,然后我終于發現(最起碼 Ubuntu 16.04)有一個可以工作的模塊。 它的名字是 ath9k 。

是的! 這場戰斗勝券在握!向內核添加模塊比聽起來容易得多。 要仔細檢查它是否可用,可以針對模塊的目錄樹運行 find,指定 -type f 來告訴 Linux 您正在查找文件,然后將字符串 ath9k 和星號一起添加以包含所有以你的字符串打頭的文件:

  1. $ find /lib/modules/$(uname -r) -type f -name ath9k*
  2. /lib/modules/4.4.0-97-generic/kernel/drivers/net/wireless/ath/ath9k/ath9k_common.ko
  3. /lib/modules/4.4.0-97-generic/kernel/drivers/net/wireless/ath/ath9k/ath9k.ko
  4. /lib/modules/4.4.0-97-generic/kernel/drivers/net/wireless/ath/ath9k/ath9k_htc.ko
  5. /lib/modules/4.4.0-97-generic/kernel/drivers/net/wireless/ath/ath9k/ath9k_hw.ko

再一步,加載模塊:

  1. # modprobe ath9k

就是這樣。無啟動,沒煩惱。

這里還有一個示例,向您展示如何使用已經崩潰的運行模塊。曾經有一段時間,我使用羅技網絡攝像頭和一個特定的軟件會使攝像頭在下次系統啟動前無法被任何其他程序訪問。有時我需要在不同的應用程序中打開相機,但沒有時間關機重新啟動。(我運行了很多應用程序,在引導之后將它們全部準備好需要一些時間。)

由于這個模塊可能是運行的,所以使用 lsmod 來搜索 video 這個詞應該給我一個關于相關模塊名稱的提示。 實際上,它比提示更好:用 video 這個詞描述的唯一模塊是 uvcvideo(如下所示):

  1. $ lsmod | grep video
  2. uvcvideo 90112 0
  3. videobuf2_vmalloc 16384 1 uvcvideo
  4. videobuf2_v4l2 28672 1 uvcvideo
  5. videobuf2_core 36864 2 uvcvideo,videobuf2_v4l2
  6. videodev 176128 4 uvcvideo,v4l2_common,videobuf2_core,videobuf2_v4l2
  7. media 24576 2 uvcvideo,videodev

有可能是我自己的操作導致了崩潰,我想我可以挖掘更深一點,看看我能否以正確的方式解決問題。但結果你知道的;有時你不關心理論,只想讓設備工作。 所以我用 rmmod 殺死了 uvcvideo 模塊,然后用 modprobe 重新啟動它,一切都好:

  1. # rmmod uvcvideo
  2. # modprobe uvcvideo

再一次:不重新啟動。沒有其他的后續影響。 

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2010-01-22 11:01:04

linux內核模塊

2019-07-08 20:00:35

Linux內核模塊

2023-05-08 08:05:42

內核模塊Linux

2010-04-12 11:19:47

編譯內核模塊

2021-09-03 08:44:51

內核模塊Linux社區

2021-07-06 14:36:05

RustLinux內核模塊

2022-05-14 17:01:21

開源LinuxNVIDIA

2009-12-17 15:28:32

內核模塊編譯

2017-10-24 17:03:48

Linux驅動程序編譯

2022-05-12 09:58:31

LinuxNVIDIA開源

2018-05-14 09:48:45

Linux內核模塊Kgotobed

2014-07-24 14:35:26

Linux內核模塊

2011-08-29 15:12:24

UbuntuLinux模塊

2010-01-14 20:57:59

2017-01-15 22:51:16

2020-04-14 08:00:00

KubernetesLinux

2023-10-30 10:47:45

Linux內核模塊

2020-05-13 21:11:37

KVM架構工具

2011-03-17 11:12:10

LinuxIptablestime模塊

2021-05-18 14:25:30

Linux運維Linux系統
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久精品免费观看 | 自拍偷拍中文字幕 | 免费成人高清 | 精品国产精品三级精品av网址 | 中文久久 | 国产精品久久久久久久久久久新郎 | 亚洲aⅴ | 欧美黄色网| 91啪亚洲精品| 亚洲成人国产 | 亚洲综合大片69999 | 一级黄色毛片子 | 在线婷婷 | 精品美女久久久 | av在线免费观看网址 | 操一草 | 国产精品视频入口 | 欧美日韩视频在线第一区 | 国产成人精品网站 | 亚洲一区黄色 | 国产黄色大片在线免费观看 | 男人天堂色 | 中文一区二区视频 | av在线播放国产 | 精品中文字幕一区二区 | 国产成人精品一区二区三 | 天堂网色 | 久久成人国产精品 | 国产精品一区二区三 | 国产视频精品区 | 国产精品免费在线 | a级片在线观看 | 日韩欧美国产一区二区 | 久久久久久久久久久91 | 欧美成年网站 | 天天干夜夜拍 | 夜夜爽99久久国产综合精品女不卡 | 日日干夜夜操 | 欧美一区不卡 | 最新国产精品视频 | 911网站大全在线观看 |