Ubuntu Cinnamon 23.04执行apt安装时遭遇xtrx-dkms模块编译失败问题
Ubuntu Cinnamon 23.04执行apt安装时遭遇xtrx-dkms模块编译失败问题
看起来你在Ubuntu Cinnamon 23.04上执行sudo apt install gcc时,意外触发了xtrx-dkms模块的编译失败,导致apt命令报错。我帮你分析下问题根源,再给出可行的解决办法:
问题根源分析
从你提供的make.log日志可以看出两个核心问题:
- 内核API变更:Linux内核6.3+版本中,
struct vm_area_struct的vm_flags成员变为只读,而xtrx-dkms的旧版本代码(0.0.1+git20190320.5ae3a3e-3.2)还在直接修改这个变量(比如vma->vm_flags |= VM_LOCKED;),这直接导致编译报错。 - 多内核版本冲突:你的系统同时存在
6.2.0-20-generic和6.3.2-060302-generic两个内核,dkms尝试为两个内核都编译模块,但新内核不兼容旧驱动代码。
具体解决办法
根据你的需求,有三种方案可选:
方案一:快速恢复apt正常状态(临时跳过问题)
如果暂时不需要xtrx模块,可以先强制跳过有问题的包配置,让apt回到正常状态:
sudo dpkg --configure -a --force-confdef --force-confold
方案二:彻底卸载xtrx-dkms(推荐,若不需要该模块)
如果确认用不到xtrx相关硬件,直接卸载这个有问题的dkms包:
sudo apt remove --purge xtrx-dkms sudo apt autoremove
执行完这两条命令后,再运行sudo apt update && sudo apt upgrade就能正常操作了。
方案三:修复xtrx-dkms编译问题(若需要保留模块)
如果你确实需要使用xtrx硬件,得手动修改驱动代码适配新内核:
- 先获取xtrx-dkms的源码包:
sudo apt source xtrx-dkms cd xtrx-0.0.1+git20190320.5ae3a3e
- 编辑
build/xtrx.c文件,找到所有直接修改vm_flags的行(日志里标记的1075、1090、1115行),替换为内核推荐的API:- 将
vma->vm_flags |= VM_LOCKED;替换为:vm_set_page_prot(vma, vm_get_page_prot(vma->vm_flags | VM_LOCKED)); - 将
vma->vm_flags |= VM_IO;替换为:vm_set_page_prot(vma, vm_get_page_prot(vma->vm_flags | VM_IO));
- 将
- 重新编译并安装修改后的dkms模块:
sudo dkms build -m xtrx -v 0.0.1+git20190320.5ae3a3e-3.2 sudo dkms install -m xtrx -v 0.0.1+git20190320.5ae3a3e-3.2
- 最后完成系统包配置:
sudo dpkg --configure -a
附:你执行命令时的完整错误日志
执行sudo apt install gcc后的输出:
Reading package lists... Done Building dependency tree... Done Reading state information... Done gcc is already the newest version (4:12.2.0-3ubuntu1). gcc set to manually installed. The following packages were automatically installed and are no longer required: fortune-mod fortunes-min gir1.2-gexiv2-0.10 librecode0 python3-configobj Use 'sudo apt autoremove' to remove them. 0 upgraded, 0 newly installed, 0 to remove and 7 not upgraded. 1 not fully installed or removed. After this operation, 0 B of additional disk space will be used. Do you want to continue? [Y/n] y Setting up xtrx-dkms (0.0.1+git20190320.5ae3a3e-3.2) ... Removing old xtrx-0.0.1+git20190320.5ae3a3e-3.2 DKMS files... Module xtrx-0.0.1+git20190320.5ae3a3e-3.2 for kernel 6.2.0-20-generic (x86_64). Before uninstall, this module version was ACTIVE on this kernel. xtrx.ko: - Uninstallation - Deleting from: /lib/modules/6.2.0-20-generic/updates/dkms/ - Original module - No original module was found for this module on this kernel. - Use the dkms install command to reinstall any previous module version. depmod... Deleting module xtrx-0.0.1+git20190320.5ae3a3e-3.2 completely from the DKMS tree. Loading new xtrx-0.0.1+git20190320.5ae3a3e-3.2 DKMS files... Building for 6.2.0-20-generic 6.3.2-060302-generic Building initial module for 6.2.0-20-generic Done. xtrx.ko: Running module version sanity check. - Original module - No original module exists within this kernel - Installation - Installing to /lib/modules/6.2.0-20-generic/updates/dkms/ depmod... Building initial module for 6.3.2-060302-generic ERROR (dkms apport): kernel package linux-headers-6.3.2-060302-generic is not supported Error! Bad return status for module build on kernel: 6.3.2-060302-generic (x86_64) Consult /var/lib/dkms/xtrx/0.0.1+git20190320.5ae3a3e-3.2/build/make.log for more information. dpkg: error processing package xtrx-dkms (--configure): installed xtrx-dkms package post-installation script subprocess returned error exit status 10 Errors were encountered while processing: xtrx-dkms E: Sub-process /usr/bin/dpkg returned an error code (1)
/var/lib/dkms/xtrx/0.0.1+git20190320.5ae3a3e-3.2/build/make.log内容:
DKMS make.log for xtrx-0.0.1+git20190320.5ae3a3e-3.2 for kernel 6.3.2-060302-generic (x86_64) Mo 29 Mai 2023 12:56:35 CEST make: Entering directory '/usr/src/linux-headers-6.3.2-060302-generic' warning: the compiler differs from the one used to build the kernel The kernel was built by: x86_64-linux-gnu-gcc-12 (Ubuntu 12.2.0-17ubuntu1) 12.2.0 You are using: gcc-12 (Ubuntu 12.2.0-17ubuntu1) 12.2.0 CC [M] /var/lib/dkms/xtrx/0.0.1+git20190320.5ae3a3e-3.2/build/xtrx.o /var/lib/dkms/xtrx/0.0.1+git20190320.5ae3a3e-3.2/build/xtrx.c: In function ‘xtrxfd_mmap’: /var/lib/dkms/xtrx/0.0.1+git20190320.5ae3a3e-3.2/build/xtrx.c:1075:31: error: assignment of read-only member ‘vm_flags’ 1075 | vma->vm_flags |= VM_LOCKED; | ^~ /var/lib/dkms/xtrx/0.0.1+git20190320.5ae3a3e-3.2/build/xtrx.c:1090:31: error: assignment of read-only member ‘vm_flags’ 1090 | vma->vm_flags |= VM_IO; | ^~ /var/lib/dkms/xtrx/0.0.1+git20190320.5ae3a3e-3.2/build/xtrx.c:1115:31: error: assignment of read-only member ‘vm_flags’ 1115 | vma->vm_flags |= VM_LOCKED; | ^~ make[1]: *** [scripts/Makefile.build:252: /var/lib/dkms/xtrx/0.0.1+git20190320.5ae3a3e-3.2/build/xtrx.o] Error 1 make: *** [Makefile:2031: /var/lib/dkms/xtrx/0.0.1+git20190320.5ae3a3e-3.2/build] Error 2 make: Leaving directory '/usr/src/linux-headers-6.3.2-060302-generic'
备注:内容来源于stack exchange,提问作者Longlost
相关产品推荐
相关产品推荐

