电玩城打鱼捕鱼-专业24小时上下分

网络内核模块编译错误,linux报错解决

六月 12th, 2019  |  电玩城捕鱼系统简介

今天把 Ubuntu 14.04
升级到了最新的 4.0.5
的内核版本,本来不打算记录下来的,但是升级的过程中确实遇到了一些问题,所以还是记录下来,分享给遇到同样问题的猿友。

关于VMWARE
WORKSTATION在Fedora21下的安装问题

安装中错误信息:

先去官网下载最新的内核压缩包:

 

Using 2.6.x kernel build system.
make: Entering directory `/tmp/vmware-config0/vmmon-only’
make -C /lib/modules/2.6.20-5-generic/build/include/.. SUBDIRS=$PWD
SRCROOT=$PWD/. modules
make[1]: Entering directory
`/usr/src/linux-headers-2.6.20-5-generic’
CC [M] /tmp/vmware-config0/vmmon-only/linux/driver.o
In file included from
/tmp/vmware-config0/vmmon-only/linux/driver.c:80:
/tmp/vmware-config0/vmmon-only/./include/compat_kernel.h:21: error:
expected declaration specifiers or ‘…’ before ‘compat_exit’
/tmp/vmware-config0/vmmon-only/./include/compat_kernel.h:21: error:
expected declaration specifiers or ‘…’ before ‘exit_code’
/tmp/vmware-config0/vmmon-only/./include/compat_kernel.h:21: warning:
type defaults to ‘int’ in declaration of ‘_syscall1’
make[2]: *** [/tmp/vmware-config0/vmmon-only/linux/driver.o] 错误
1
make[1]: *** [_module_/tmp/vmware-config0/vmmon-only] 错误 2
make[1]: Leaving directory
`/usr/src/linux-headers-2.6.20-5-generic’
make: *** [vmmon.ko] 错误 2
make: Leaving directory `/tmp/vmware-config0/vmmon-only’
Unable to build the vmmon module.

网速不给力,只能用虚拟机里的迅雷下载,然后再拷贝出来。

(1)在Fedora21下安装vmware如果在终端下启动,提示你找不到内核头文件Kernel
Headers的话使用命令:

以上的compat_kernel.h定义与2.6.20的内核有不兼容的地方,那我们就来修改compat_kernel.h使其与compat_kernel.h与内核兼容就可以了。

LZ 把源码包拷贝到 /usr/src 下面,直接就在这里编译安装了:

 

首先备份原始文件,然后解压vmmon.tar:

# 切换到 root 身份
>$ su
# 解压缩源码,得到文件夹 /usr/src/linux-4.0.5
># tar xvf linux-4.0.5.tar.xz
># cd linux-4.0.5
# make mrproper 命令用来清理以前编译时留下的临时文件,
# 因为 LZ 是解压缩的新包,所以不需要这步
># make mrproper
# 把当前正在使用的内核编译配置文件拷过来作为模板
># cp /boot/config-`uname -r` .config
#
启动基于ncurse库绘制的图形配置界面,已经按照当前正在使用的内核的配置选好相关选项了,再启用一些新特性即可
># make menuconfig
# 正常是要执行下面这三条命令的,但是 Ubuntu 上不用这么麻烦
># make install
># make modules
># make modules_install
# Ubuntu 上用包管理器可以把内核和相关模块编译成 deb 包,熟悉 Ubuntu
的童鞋这下觉得好办多了吧?
# 如果提示没有 make-kpkg 命令的话,可以先用 apt-get 安装
># apt-get install kernel-package
#> make-kpkg clean
# 与 make 命令一样,j8 参数可以指定 8 个线程同时编译
#> make-kpkg –initrd kernel-image kernel-headers -j8
# 坐等编译完成吧,会在上一级目录中生成两个 deb 包,接下来安装它们:
># dpkg -i linux-image-4.0.5_4.0.5-10.00.Custom_amd64.deb
># dpkg -i linux-headers-4.0.5_4.0.5-10.00.Custom_amd64.deb
# grub 貌似不用更新也可以,安装 deb 的时候会自动更新
># update-grub
# 重启系统,进入新的内核吧
># reboot

sudo yum install
kernel-devel

cd /usr/lib/vmware/modules/sourcesudo cp vmmon.tar vmmon.tar.oldsudo tar
xvf vmmon.tarsudo gedit vmmon-only/include/compat_kernel.h

编译、安装、重启都很顺利,但是发现在新内核中启动 vmware
的时候提示必须更新内核模块,可是在编译网络模块的时候死活过不去,LZ
猜测可能是由于内核中某些接口被修改了,而 vmware
的驱动源码却不跟最新的内核接口不匹配,所以才报了一些语法错误,没办法,只能手工修改了。

 

将21行:

在 shell 中启动 vmware,让它自己编译安装模块,编译失败之后会在 shell
中留下编译失败的错误提示,沿着提示修改代码。

你的内核头文件默认是在/usr/src/kernels下

static inline _syscall1(int, compat_exit, int, exit_code);

>$ vmware
/tmp/modconfig-WpjYEn/vmnet-only/userif.c: In function
‘VNetCopyDatagram’:
/tmp/modconfig-WpjYEn/vmnet-only/userif.c:526:4: error: implicit
declaration of function ‘skb_copy_datagram_iovec’
[-Werror=implicit-function-declaration]
    return skb_copy_datagram_iovec(skb, 0, &iov, len);
    ^
/tmp/modconfig-WpjYEn/vmnet-only/driver.c: In function
‘VNetFileOpUnlockedIoctl’:
/tmp/modconfig-WpjYEn/vmnet-only/driver.c:1194:20: error: ‘struct file’
has no member named ‘f_dentry’
    if (filp && filp->f_dentry) {
                    ^
/tmp/modconfig-WpjYEn/vmnet-only/driver.c:1195:19: error: ‘struct file’
has no member named ‘f_dentry’
      inode = filp->f_dentry->d_inode;
… 此处省略一千行

使用命令后再检查内核头文件就应该已经存在了

替换为:

标签:,

Your Comments

近期评论

    功能


    网站地图xml地图