我在 Ubuntu 16.04 上为内核 4.4.0-1016-aws 构建了一个内核模块 fc.ko。我将内核模块复制到运行相同内核版本 4.4.0-1016-aws 的 Ubuntu 14.04 上,但出现错误:
insmod: ERROR: could not insert module /opt/fc/agent/modules/4.4.0-1016-aws/fc.ko: Invalid module format
这是否意味着相同的内核版本 4.4.0-1016-aws 对于 Ubuntu 16 和 14 是不同的?
更新:我尝试在 Ubuntu 14 上针对 4.4.0-1016-aws 内核头文件构建代码,但代码编译失败,因为 sock_recvmsg() 函数原型的内核定义与 Ubuntu 16 的 4.4.0-1016-aws 内核不同。区别如下:
Ubuntu 16:/usr/src/linux-aws-headers-4.4.0-1016/include/linux/net.h:
int sock_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
int flags);
Ubuntu 14:/usr/src/linux-aws-headers-4.4.0-1016/include/linux/net.h:
int sock_recvmsg(struct socket *sock, struct msghdr *msg, int flags);
看起来Ubuntu 16和14上相同的内核版本确实不同。