报错信息如下:
In file included from /tmp/vbox.0/combined-os-specific.c:44:0: /tmp/vbox.0/r0drv/linux/memuserkernel-r0drv-linux.c: 在函数‘VBoxGuest_RTR0MemUserIsValidAddr’中: /tmp/vbox.0/r0drv/linux/memuserkernel-r0drv-linux.c:82:55: 错误:宏“access_ok”传递了 3 个参数,但只需要 2 个 bool fRc = access_ok(VERIFY_READ, (void *)R3Ptr, 1); ^ /tmp/vbox.0/r0drv/linux/memuserkernel-r0drv-linux.c:82:16: 错误:‘access_ok’未声明(在此函数内第一次使用) bool fRc = access_ok(VERIFY_READ, (void *)R3Ptr, 1); ^~~~~~~~~ /tmp/vbox.0/r0drv/linux/memuserkernel-r0drv-linux.c:82:16: 附注:每个未声明的标识符在其出现的函数内只报告一次 make[2]: *** [scripts/Makefile.build:303:/tmp/vbox.0/combined-os-specific.o] 错误 1 make[2]: *** 正在等待未完成的任务.... make[1]: *** [Makefile:1667: _module_/tmp/vbox.0] Error 2 make: *** [/tmp/vbox.0/Makefile-footer.gmk:133: vboxguest] Error 2 shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory cannot verify if kernel modules and services were reloaded
参考文章:https://blog.csdn.net/qq_18572023/article/details/118719918
上面文章介绍的是欧拉,麒麟和文章中几乎一摸一样,报错的原因是:
access_ok函数在Linux内核5版本之后由传三个参数被改为了传两个参数,VBoxAdditions根据Linux版本号是4.x.x还是5.x.x来进行判断传三个还是两个参数,而麒麟使用的内核版本号为4,却已经合并了Linux内核5.x.x版本之后的补丁,也就是access_ok函数只要两个参数,因而我们只需要更改VBoxAdditions源代码,让它在4.x.x时也使用两个参数调用access_ok就行啦!
备份解决方案:
#修改VBoxAdditions源代码(注意根据VBoxAdditions版本号更改对应路径) cd /opt/VBoxGuestAdditions-7.0.8/src/vboxguest-7.0.8/vboxguest/r0drv/linux vi memuserkernel-r0drv-linux.c #使用i进行编辑,将以下两处RTLNX_VER_MIN(5,0,0)改为RTLNX_VER_MIN(4,0,0)即可啦 #可以直接搜索RTLNX_VER_MIN(5 修改后,保存退出 #随后还有一个文件中需要更改该函数问题,继续执行命令: cd ../../../vboxsf vi regops.c #同样,也是执行上面搜索,然后保存退出,这个文件只有一个地方需要修改
改了以上文件以后,一定要执行下面这个路径的安装命令,不能直接打开目录中的sh文件,否则,修改就无效了
/sbin/rcvboxadd setup
这样就可以顺利装上了。
------------正 文 已 结 束, 感 谢 您 的 阅 读 (折雨的天空)--------------------
转载请注明本文标题和链接:《Kylin-Server-V10-SP3安装VirtualBox增强功能报错的处理》
发表评论