前置准备
请先理解模组相关指令,尤其是「模组的相依性」环节: 驱动程式模组操作
注:本文中的 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 日





