前置準備
請先理解模組相關指令,尤其是「模組的相依性」環節: 驅動程式模組操作
註:本文中的 kvm-intel 實際上就等於 kvm_intel 模組
因為 kvm_intel 的模組名稱叫做 kvm-intel.ko
insmod 指令
insmod 指令與 modprobe 指令相近似,都是用於「載入模組」
不同之處在於,modprobe 指令會自動載入所有相依模組
因此只要載入你原本需要的模組,其他的相依模組 modprobe 會幫你自動載入
insmod 指令則不同,他「只會」幫你載入你指定的模組
他不會幫你做相依性的判別
換句話說,如果你沒有先載入你需要模組的相依套件
那麼 insmod 指令就會報錯。
實作 insmod 相關操作
移除所有模組
首先,一樣使用 kvm 來當作說明對象,請先熟悉模組的相依性關係
查看 kvm 模組的狀況,如圖 1
lsmod | grep kvm
依序輸入以下指令,移除「kvm_intel」「kvm」「irqbypass」,如圖 2
rmmod kvm_intel
rmmod kvm
rmmod irqbypass
尋找模組所在位置
首先要先知道 linux 核心版本,以便找出對應的模組目錄
uname -a
如圖 3,知道了現在的 linux 核心版本為 4.19.0.8-cloud-amd64
進入 /lib/modules 資料夾內,尋找跟核心版本相符合的資料夾並進入,如圖 4
cd /lib/modules/4.19.0.8-cloud-amd64
(這邊請對應成自己的核心版本)
ls
成功進入了模組所在資料夾,再來先尋找 kvm 模組,輸入以下指令可以尋找
(-name 參數後面加上的是 模組名稱.ko)
find ./ -name kvm.ko
圖 5,成功找到了 kvm.ko 模組位於 ./kernel/arch/x86/kvm/ 路徑下
再來一樣找出 kvm-intel 以及 irqbypass 的路徑
find ./ -name kvm-intel.ko
find ./ -name irqbypass.ko
如圖 6,kvm-intel.ko 位於 ./kernel/arch/x86/kvm/ 與 kvm.ko 模組同一路徑
irqbypass.ko 則位於不同路徑,在 ./kernel/virt/lib/
嘗試偷吃步載入模組
進入 kvm.ko 與 kvm-intel.ko 所在的路徑底下
cd ./kernel/arch/x86/kvm/

首先複習一下 kvm 模組的相依關係 (這邊借 poming 老師的圖,圖 6.1)

kvm_intel 模組需要 kvm 模組才能運作,而 kvm 模組需要 irqbypass 才能運作
那麼直接跳過 kvm 與 irqbypass 的情況下載入 kvm-intel 這個模組
insmod kvm-intel.ko

圖 7,模組無法成功載入,提示有其他模組尚未載入 (因為 kvm 模組尚未載入)
同理,在 irqbypass 尚未載入的情況下,kvm 模組也無法載入,圖 8
insmod kvm.ko

按照順序載入所有模組
既然無法偷吃步,那就只好一步一步來啦
透過圖 6.1 知道了模組的最上層是 irqbypass,那就先載入這個模組吧!
首先回到模組的最上層目錄
cd -

透過圖 6 知道了 irqbypass 在 ./kernel/virt/lib/ 路徑下
進入該路徑
cd ./kernel/virt/lib/

載入 irqbypass 模組
insmod irqbypass.ko

查看 irqbypass 是否載入回來了
lsmod | grep irq

接著繼續載入 kvm 模組
因為圖 6 的關係知道了 kvm 在與 irqbypass 不同的路徑下
所以要先回到模組的最上層目錄
cd -

進入 kvm 模組所在的目錄
cd ./kernel/arch/x86/kvm/

載入 kvm 模組
insmod kvm.ko

查看 kvm 模組是否載入回來了
lsmod | grep kvm

最後,因為 kvm 與 kvm-intel 在同一路徑下,載入 kvm-intel 模組吧!!
insmod kvm-intel.ko

查看 kvm-intel 模組是否載入回來了
lsmod | grep kvm

恭喜!!所有模組全部載入回來了!
- 受保護的內容: NAS 版 Mathbot 管理網站與 Linebot 啟動方法 - 2024 年 11 月 15 日
- Realtime 啥鬼的 - 2021 年 6 月 15 日
- nodejs 數學遊戲 - 2021 年 6 月 8 日





