上次解决qemu虚拟机使用无法和宿主机通信问题后,第一阶段留下两个问题,一个是ovs-dpctl show异常问题以及一个rpm方式编译debug问题。此次记录下对于第一个问题的处理过程。
首先根据上述日志可以看出这里其实netlink socket不支持某种特性导致的,阅读代码后可以发现报错位置如下:
这个NETLINK_EXT_ACK选项主要是用来返回更加详细的错误消息的,然而在内核3.10版本中其实并没有对他的支持,只有内核4.6以上才支持,因此才会报错。因此我尝试升级了内核最新6.5版本,此时问题能够解决,不再显示报错,但是奇怪的是我的网卡消失了,pci设备仍然存在,内核驱动模块r8169已经加载。
使用lspci -v观察
这个主板网卡其实是RTL的网卡,可以支持8168的驱动,但是在3.10内核中也能被8169驱动加载。于是决定下载最新的8168驱动,结果在RTL官网下载驱动是发现驱动最新支持到内核5.19版本,这应该能破案。于是我尝试安装内核5.19,结果发现网卡还是没有,结果发现内核模块没有加载,于是手动加载后发现确实可以看到网卡并能通过dhcp获取ip地址,大功告成。另外重启系统时发现r8169内核模块没有自动加载,需要检查/lib/modprobe.d/中有没有把驱动列入黑名单,并且在/lib/modules-load.d/r8169.conf中写入r8169即可实现自动加载。
rpm安装内核方法如下:
通过下面第一个网站获取需要的linux内核版本rpm包安装即可。当然如果想自己获取源码安装,可以在第二个网址获取源码压缩包编译安装。
http://193.49.22.109/elrepo/kernel/el7/x86_64/RPMS/
最后安装完后可以通过grub文件查看内核启动的选择顺序,通过grub2-set-default 0设置默认启动的内核,0表示第一个内核。
另外,由于5.19内核版本是由GCC-9.3.1版本编译,因此如果涉及内核模块的编译需要安装对应的gcc版本和内核devel包才能编译,安装方式如下:
centos-release-scl源下载:https://cbs.centos.org/koji/buildinfo?buildID=24739
centos-release-scl-rh依赖下载:https://cbs.centos.org/kojifiles/packages/centos-release-scl-rh/2/3.el7.centos/noarch/centos-release-scl-rh-2-3.el7.centos.noarch.rpm
scl-utils-build下载:http://mirror.centos.org/centos/7/os/x86_64/Packages/scl-utils-build-20130529-19.el7.x86_64.rpm
下载完上述3个rpm包后安装,通过yum install devtoolset-9-gcc.x86_64 devtoolset-9-gcc-c++.x86_64 devtoolset-9-gcc-gdb-plugin.x86_64 -y安装gcc。最后scl enable devtoolset-9 bash可以将当前bash切换到9.3.1 gcc,退出此bash后恢复。