核心、模組
核心引數說明
/proc目錄介紹詳見連結
核心引數目錄及配置檔案:
- /proc/*
- /usr/lib/sysctl.d/*
- /etc/sysctl.d/*.conf
- /etc/sysctl.conf #開機讀取的核心引數檔案:
修改核心引數的注意事項
- Sysctl命令用來配置與顯示在/proc/sys目錄中的核心引數.如果想使引數長期儲存,可以通過編輯/etc/sysctl.conf檔案來實現。
- 修改/proc下核心引數檔案內容,不能使用編輯器來修改核心引數檔案,理由是由於核心隨時可能更改這些檔案中的任意一個,另外,這些核心引數檔案都是虛擬檔案,實際中不存在,因此不能使用編輯器進行編輯,而是使用echo命令,然後從命令列將輸出重定向至 /proc 下所選定的檔案中。引數修改後立即生效,但是重啟系統後,該引數又恢復成預設值。因此,想永久更改核心引數,需要修改/etc/sysctl.conf檔案。
- echo 1 > /proc/sys/net/ipv4/ip_forward
- sysctl -w net.ipv4.ip_forward=1
- 永久的方法:
- echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
- 如果想使引數馬上生效,也可以執行如下命令sysctl -p
模組說明
全稱為動態可載入核心模組(Loadable Kernel Module,LKM),簡稱為模組
模組是具有獨立功能的程式,它可以被單獨編譯,但不能獨立執行。它在執行時被連結到核心作為核心的一部分在核心空間執行,這與執行在使用者空間的程序是不同的。模組通常由一組函式和資料結構組成,用來實現一種檔案系統、一個驅動程式或其他核心上層的功能。
總之,模組是一個為核心(從某種意義上來說,核心也是一個模組)或其他核心模組提供使用功能的程式碼塊。
模組存放目錄以及配置檔案:
- /etc/modprobe.d/*.conf | /run/modprobe.d/*.conf| /usr/lib/modprobe.d/*.conf #依次從/etc/,/run/,/usr/lib/目錄讀取,模組的額外引數
- /etc/modules-load.d/*.conf | /run/modules-load.d/*.conf | /usr/lib/modules-load.d/*.conf #依次從/etc/,/run/,/usr/lib/目錄讀取,讀取開機載入的模組
-
- 該目錄格式為每個模組一行
- 注意不要給模組名加任何字尾
- 具體效果可以詳見右圖
- /usr/lib/modules/$(uname -r)/kernel/ #注:不同版本核心的模組目錄不同,所有安裝的模組都在該目錄下,如果需要把模組載入到核心中,則可以通過命令來載入該目錄下的對應模組即可
- arch #與硬體平臺有關的專案,例如CPU的等級等等
- crypto #核心所支援的加密的技術,例如md5或者des等等
- drivers #一些硬體的驅動程式,例如顯示卡、網絡卡、PCI相關硬體等等
- fs #核心所支援的filesystems,例如vfat、reiserfs、nfs等等
- lib #一些函式庫
- net #與網路有關的各項協定資料,還有防火牆模組
- sound #與音效有關的各項模組
模組之間的依賴性
使用depmod命令讀取/lib/modules/$(uname -r )/kernel/目錄下每個模組並分析,然後把分析結果寫入/lib/modules/$(uname -r)/modules.dep檔案中。
語法結構
核心引數控制命令
sysctl [OPTIONS] [variable[=value]] [...] #在執行環境中配置核心引數
- OPTIONS
- -a #顯示所有變數
- -p #從檔案中讀取值
- -w #寫一個值到變數中
- EXAMPLE
模組控制命令
depmod #輸出適用於modprobe可用性的依賴列表,然後把分析結果寫入/lib/modules/$(uname -r)/modules.dep檔案中。
- EXAMPLE
- depmod -n #可以不寫入檔案而把結果輸出到螢幕上
- depmod -e #顯示出目前已載入的不可執行的模組名稱
lsmod #顯示當前系統下已經載入了哪些模組。共三列資訊Module(模組名)、size(模組的大小)、Used by(此模組被哪個模組所使用)
- EXAMPLE
- lsmod ##顯示當前系統下已經載入了哪些模組
modinfo [OPTIONS] <ModuleName|FileName...> #通過模組名或者模組檔名來檢視模組資訊
- OPTIONS
- -a #僅列出作者名稱
- -d #僅列出該module的description
- -l #僅列出該module的license
- -n #僅列出該module的filename項(module的檔案所在路徑)
- EXAMPLE
modprobe [OPTIONS] ModuleName #通過module的名字管理module(不能通過檔名);如果用該命令不加任何OPTIONS則是載入module,重啟後消失
modprobe(module探針)(自動處理可載入模組)是linux的一個命令,可載入指定的個別模組,或是載入一組相依的模組。modprobe會根據depmod.dep檔案的相依關係,決定要載入哪些模組。若在載入過程中發生錯誤,在modprobe會解除安裝整組的模組
- OPTIONS
- -c #列出目前系統所有的模組
- -f #強制載入該模組
- -r #移除摸個module
- EXAMPLE