ubuntu安装在新组装的i9 14900机器上,用来学习笨叔的ARM64体系结构编程,也熟悉Linux的用法。但有时候写文档总是不方便,还是需要window来用。因此想在ubuntu 24.04上安装Linux版本的vmware worksation 17.5.1以虚拟机的方式安装windows 11。其结果是在启动vmware时报告"Cannot open /dev/mvmon: No such file or directory. Please make sure that the kernel module 'vmmon' is loaded"。也就是提示vmmon.ko 没有安装。由于ubuntu 24.04刚出没多久,vmware公司并没有发布可以支持24.04的内核的vmware 版本,但挺不住有牛人啊,他们修改了vmmon和vmnet的驱动源代码以支持24.04。本以为这就结束了,但是本机bios有secure boot啊,内核模块需要签名,但是怎么签都不成功,知道试了不同的参数(noenc)才算成功,弄到了凌晨2:30啊,这里记录下来以方便后来者。
安装编译内核模块依赖
sudo apt install net-tools libncurses-dev libssl-dev build-essential openssl openssl gcc-aarch64-linux-gnu gdb-multiarch git bison flex bc vim universal-ctags cscope cmake python3-dev python3-venv mokutil
下载vmmon和vmnet内核模块源代码
git clone https://github.com/mkubecek/vmware-host-modules.git
cd vmware-host-modules
git checkout -b workstation-17.5.1 remotes/origin/workstation-17.5.1
make
sudo make install
验证vmmon.ko和vmnet.ko已经安装
$ modinfo -n vmnet
/lib/modules/6.8.0-31-generic/misc/vmnet.ko
modinfo -n vmmon
/lib/modules/6.8.0-31-generic/misc/vmmon.ko
签名vmmon.ko和vmnet.ko
生成密钥对
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -noenc -days 36500 -subj "/CN=VMware/"
其中noenc非常关键,没有这个,运行下面的sign-file时总是报错。
签名
如果modinfo vmmon不能显示vmmon.ko则下面的命令直接使用绝对路径,替换掉$(modinfo -n vmmon),绝对路径为/lib/modules/6.8.0-31-generic/misc/vmmon.ko 和/lib/modules/6.8.0-31-generic/misc/vmnet.ko
sudo /usr/src/linux-headers-`uname -r`/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vmmon)
sudo /usr/src/linux-headers-`uname -r`/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vmnet)
将公钥导入系统的 MOK 列表
下面的命令会提示输入密码,请记住这个密码,系统重启时需要输入这个密码。
sudo mokutil --import MOK.der
重启系统,用于导入MOK
bios会提示是否Enroll MOK,选择它
然后输入密码
再次启动vmware,vmware启动成功!