内核模块软件包指南
Arch 软件包指南
32 位 – CLR – CMake – 交叉 – DKMS – Eclipse – Electron – 字体 – Free Pascal – GNOME – Go – Haskell – Java – KDE – 内核模块 – Lisp – Meson – MinGW – Node.js – 非自由 – OCaml – Perl – PHP – Python – R – Ruby – Rust - 安全 – Shell – VCS – Web – Wine
软件包分离
包含内核模块的软件包应特殊对待,以支持希望在系统上安装多个内核的用户。
当打包包含内核模块和其他非模块支持文件/实用程序的软件时,将内核模块与支持文件分离非常重要。
指南
当打包此类软件(以 NVIDIA 驱动程序为例)时,约定是
- 创建一个 nvidia 软件包,仅包含为 vanilla 内核构建的内核模块
- 创建一个 nvidia-utils 软件包,包含支持文件
- 确保 nvidia 依赖于 nvidia-utils(除非有充分的理由不这样做)
- 对于像 linux-mm 这样的另一个内核,创建 nvidia-mm,其中包含针对该内核构建的内核模块,该模块 提供 nvidia 并且还 依赖 于 nvidia-utils
- 确保 nvidia 依赖于内核,例如
depends=('linux' 'nvidia-utils')
理由
虽然为不同内核构建的内核模块始终存在于不同的目录中并且可以和平共处,但支持文件应位于一个位置。如果一个软件包包含模块和支持文件,您将无法为多个内核安装模块,因为软件包中的支持文件会导致 pacman 文件冲突。
模块和随附文件的分离允许在同一系统上为多个内核安装多个内核模块软件包,同时在预期位置在它们之间共享支持文件。
文件放置
如果软件包包含旨在覆盖同名现有模块的内核模块,则应将此类模块放置在 /lib/modules/X.Y.Z-arch1-1/updates
目录中。当运行 depmod 时,此目录中的模块将优先。