Linux中實現在系統啟動時自動載入模組

2021-07-03 01:20:51 字數 4092 閱讀 6246

下面是以前學習linux時寫的,後來仔細研究rc.sysinit後發現,只需要修改下列地方就可以了,不必這麼麻煩的:

rc.sysinit中有這樣的一段**:

# load other user-defined modules

for file in /etc/sysconfig/modules/*.modules ; do

[ -x $file ] && $file

done

# load modules (for backward compatibility with vars)

if [ -f /etc/rc.modules ]; then

/etc/rc.modules fi

可見只需要配置兩個地方的任何乙個就可以了(以載入fuse核心模組為例)

(1) 在/etc/sysconfig/modules/下面建立*.modules檔案,參考已經有的*.modules檔案,例如我寫建立檔案my.modules,內容為modprobe fuse

記得最後chmod 755 my.modules

(2) 或者在/etc/rc.modules裡面加上modprobe fuse,沒有的話建立該檔案。

然後reboot,lsmod | grep fuse驗證一下就ok了。

**********====

automatically load kernel modules:

為搞清楚如何在系統啟動時自動載入模組,搜尋了好久,網上有很多人提出這個問題,但都沒有正確的答案,無論是中文社群還是英文社群,大家的回答都沒有講到點子上,無非是圍繞modprobe.conf、modprobe講來講去的,要不就是針對特定問題嘗試不同的方法。有的還建議把modprobe modulename寫入rc.local,卻不曾想,rc.local的執行被放在整個啟動順序的很後面,而啟動init.d下面定義的服務卻在rc.local前面,那麼如果某個服務要用這個模組,就不行了。

在測試lvs時,因為我的fedora7的kernel(2.6.21-1)預設沒有載入ip_vs模組,而核心中已經包含編譯好的ipvs相關的模組了,放在:/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/下面,有:

/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs.ko

/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_dh.ko

/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_ftp.ko

/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_lblc.ko

/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_lblcr.ko

/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_lc.ko

/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_nq.ko

/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_rr.ko

/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_sed.ko

/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_sh.ko

/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_wlc.ko

/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_wrr.ko

其中ip_vs.ko是ipvs的基本模組,不載入ipvs就不能工作(執行ipvsadm會報錯的),而其他的都是ipvs的排程演算法或特定協議的輔助模組,需要時則須載入。

如果系統執行時手動載入則需:modprobe ip_vs 和modprobe ip_vs_sh等。

要了解如何在系統啟動時自動載入模組(automatically load kernel modules),就得先了解系統是如阿啟動的,啟動的過程中按什麼順序做了什麼,怎麼做的,這些啟動操作都有那些檔案和指令碼控制。由於google和baidu出來的東西都解決不了問題,而且man modprobe和man modprobe.conf發現並不是需要修改的檔案。

於是溫習鳥哥的

「開機關機流程與loader」:

1. 整個開機流程是

(1) 載入bios的硬體資訊,並取得第乙個開機裝置的代號

(2)讀取第乙個開機裝置的mbr的boot loader (grub)的開機資訊

(3)載入os kernel資訊,解壓kernel,嘗試驅動硬體

(4) kernel執行init程式並獲得run-lebel資訊(如3或5)

(5) init執行

/etc/rc.d/rc.sysinit

(6)啟動核心外掛程式模組

(/etc/modprobe.conf)

(7) init執行run-level的各種scripts,啟動服務

(8) 

init執行

/etc/rc.d/rc.local

(9)執行

/bin/login,等待使用者login

(10)login後進入shell

看來正確的方式是把需要載入的模組放在(5)或(6),但正如網路上很多人的嘗試,修改modprobe.conf都沒有成功(例如在modprobe.conf中增加install ip_vs...)。於是我修改了

/etc/rc.d/rc.sysinit就成功載入了。

初步嘗試在rc.sysinit最後增加 modprobe.conf ip_vs,重啟後lsmod | grep ip_vs,發現成功自動載入了。

# load lvs ipvs modules

if [ -d /lib/modules/$unamer/kernel/net/ipv4/ipvs ]; then

for module in /lib/modules/$unamer/kernel/net/ipv4/ipvs/* ; do

module=$

module=$

modprobe $module >/dev/null 2>&1

done fi

就把/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/下的所有模組都自動載入了。其中:

if語句檢查ipvs模組的目錄是否存在

for迴圈遍歷該目錄下面的所有檔案

module=$ :其中##表示從前面刪除字元,*/表示刪除到最後乙個/,如果乙個#就表示只刪除到第乙個/。如果變數後面接##,表示在##後面的字串取最長的(一直到最後面),如果接#,表示取最小的一段。

module=$:表示從後面刪除.ko。如果變數後面接%%,表示在%%後面的字串取最長的(一直到最前面),如果接%,表示取最小的一段。

這樣多module的兩次修改就得到了模組名,就是檔名不帶路徑和.ko字尾。

modprobe $module >/dev/null 2>&1:載入模組,輸出都指向空裝置

這樣重啟後lsmod | grep ip_vs就會得到:

ip_vs_wrr 6977 0

ip_vs_wlc 6081 0

ip_vs_sh 6593 0

ip_vs_sed 6081 0

ip_vs_rr 6081 0

ip_vs_nq 5953 0

ip_vs_lc 5953 0

ip_vs_lblcr 10565 0

ip_vs_lblc 9797 0

ip_vs_ftp 10053 0

ip_vs_dh 6593 0

ip_vs 79425 22 ip_vs_wrr,ip_vs_wlc,ip_vs_sh,ip_vs_sed,ip_vs_rr,ip_vs_nq,ip_vs_lc,ip_vs_lblcr,ip_vs_lblc,ip_vs_ftp,ip_vs_dh

系統啟動時自動啟動程式

下面主要介紹採用編輯登錄檔的方式來實現。一般系統啟動時自動啟動程式的註冊資訊都在 software microsoft windows currentversion run 裡面。系統啟動時自動啟動 自動開啟的檔案,如果是可執行應用程式,即為程式的路徑及檔名 帶字尾 是否自動啟動,true表示自動啟...

系統啟動時顯示Recovery Menu

我的系統環境 寫道ubuntu 8.04.1 gnome 2.22.3 linux 2.6.24 21 generic 突然發現在錯誤修改 boot grub menu.lst後,其實也不能算是錯誤修改主要是想開機的時候顯示具體資訊而不是splash畫面.寫道 vmlinuz 2.6.24 21 g...

linux系統啟動時到底發生了什麼

該過程主要功能是完成硬體的初始化,包括顯示器 鍵盤以及主儲存器 記憶體 如果這步有問題的話,你的pc是開不了機的,說明你需要好好檢查下你的硬體裝置了。bois軟體儲存在主機板上的rom晶元上,在此之後,引導過程的其餘部分完全由作業系統控制。一旦bois自檢完成,系統控制由bois轉變為引導引導程式。...