1. 程式人生 > >核心、模組

核心、模組

核心引數說明

/proc目錄介紹詳見連結

核心引數目錄及配置檔案:

  1. /proc/*
  2. /usr/lib/sysctl.d/*
  3. /etc/sysctl.d/*.conf
  4. /etc/sysctl.conf #開機讀取的核心引數檔案:

修改核心引數的注意事項

  1. Sysctl命令用來配置與顯示在/proc/sys目錄中的核心引數.如果想使引數長期儲存,可以通過編輯/etc/sysctl.conf檔案來實現。
  2. 修改/proc下核心引數檔案內容,不能使用編輯器來修改核心引數檔案,理由是由於核心隨時可能更改這些檔案中的任意一個,另外,這些核心引數檔案都是虛擬檔案,實際中不存在,因此不能使用編輯器進行編輯,而是使用echo命令,然後從命令列將輸出重定向至 /proc 下所選定的檔案中。引數修改後立即生效,但是重啟系統後,該引數又恢復成預設值。因此,想永久更改核心引數,需要修改/etc/sysctl.conf檔案。
    1. echo 1 > /proc/sys/net/ipv4/ip_forward
    2. sysctl -w net.ipv4.ip_forward=1
    3. 永久的方法:
    4. echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
  3. 如果想使引數馬上生效,也可以執行如下命令sysctl -p

模組說明

全稱為動態可載入核心模組(Loadable Kernel Module,LKM),簡稱為模組

模組是具有獨立功能的程式,它可以被單獨編譯,但不能獨立執行。它在執行時被連結到核心作為核心的一部分在核心空間執行,這與執行在使用者空間的程序是不同的。模組通常由一組函式和資料結構組成,用來實現一種檔案系統、一個驅動程式或其他核心上層的功能。

總之,模組是一個為核心(從某種意義上來說,核心也是一個模組)或其他核心模組提供使用功能的程式碼塊。

模組存放目錄以及配置檔案:

  1. /etc/modprobe.d/*.conf | /run/modprobe.d/*.conf| /usr/lib/modprobe.d/*.conf #依次從/etc/,/run/,/usr/lib/目錄讀取,模組的額外引數
  2. /etc/modules-load.d/*.conf | /run/modules-load.d/*.conf | /usr/lib/modules-load.d/*.conf #依次從/etc/,/run/,/usr/lib/目錄讀取,讀取開機載入的模組

 

    1. 該目錄格式為每個模組一行
    2. 注意不要給模組名加任何字尾
    3. 具體效果可以詳見右圖
  • /usr/lib/modules/$(uname -r)/kernel/ #注:不同版本核心的模組目錄不同,所有安裝的模組都在該目錄下,如果需要把模組載入到核心中,則可以通過命令來載入該目錄下的對應模組即可
    1. arch #與硬體平臺有關的專案,例如CPU的等級等等
    2. crypto #核心所支援的加密的技術,例如md5或者des等等
    3. drivers #一些硬體的驅動程式,例如顯示卡、網絡卡、PCI相關硬體等等
    4. fs #核心所支援的filesystems,例如vfat、reiserfs、nfs等等
    5. lib #一些函式庫
    6. net #與網路有關的各項協定資料,還有防火牆模組
    7. sound #與音效有關的各項模組

模組之間的依賴性

使用depmod命令讀取/lib/modules/$(uname -r )/kernel/目錄下每個模組並分析,然後把分析結果寫入/lib/modules/$(uname -r)/modules.dep檔案中。

語法結構

核心引數控制命令

sysctl [OPTIONS] [variable[=value]] [...] #在執行環境中配置核心引數

  1. OPTIONS
    1. -a #顯示所有變數
    2. -p #從檔案中讀取值
    3. -w #寫一個值到變數中
  2. EXAMPLE

模組控制命令

depmod #輸出適用於modprobe可用性的依賴列表,然後把分析結果寫入/lib/modules/$(uname -r)/modules.dep檔案中。

  1. EXAMPLE
    1. depmod -n #可以不寫入檔案而把結果輸出到螢幕上
    2. depmod -e #顯示出目前已載入的不可執行的模組名稱

lsmod #顯示當前系統下已經載入了哪些模組。共三列資訊Module(模組名)、size(模組的大小)、Used by(此模組被哪個模組所使用)

  1. EXAMPLE
    1. lsmod ##顯示當前系統下已經載入了哪些模組

modinfo [OPTIONS] <ModuleName|FileName...> #通過模組名或者模組檔名來檢視模組資訊

  1. OPTIONS
    1. -a #僅列出作者名稱
    2. -d #僅列出該module的description
    3. -l #僅列出該module的license
    4. -n #僅列出該module的filename項(module的檔案所在路徑)
  2. EXAMPLE

modprobe [OPTIONS] ModuleName #通過module的名字管理module(不能通過檔名);如果用該命令不加任何OPTIONS則是載入module,重啟後消失

modprobe(module探針)(自動處理可載入模組)是linux的一個命令,可載入指定的個別模組,或是載入一組相依的模組。modprobe會根據depmod.dep檔案的相依關係,決定要載入哪些模組。若在載入過程中發生錯誤,在modprobe會解除安裝整組的模組

  1. OPTIONS
    1. -c #列出目前系統所有的模組
    2. -f #強制載入該模組
    3. -r #移除摸個module
  2. EXAMPLE