Kernel module package guidelines (简体中文)
Arch 软件包准则
32-bit – CLR – CMake – Cross – DKMS – Eclipse – Electron – Font – Free Pascal – GNOME – Go – Haskell – Java – KDE – Kernel – Lisp – Meson – MinGW – Node.js – Nonfree – OCaml – Perl – PHP – Python – R – Ruby – Rust – VCS – Web – Wine
打包分离
包含内核模块的软件包应予以特殊对待,以支持希望在系统上安装多个内核的用户。
当打包包含内核模块和其他非模块支持文件/实用程序的软件时,将内核模块与支持文件分开很重要。
准则
打包此类软件时(以 NVIDIA 驱动程序为例),约定为:
- 创建一个
nvidia
包,其中只包含为vanilla内核构建的内核模块 - 创建包含支持文件的
nvidia-utils
包 - 确保
nvidia
依赖于nvidia-utils
(除非有充分的理由不这样做) - 对于另一个内核,比如
kernel26-mm
,创建nvidia-mm
,其中包含针对该内核构建的内核模块,该内核提供nvidia
,并且还依赖于nvidia-utils
- 确保
nvidia
依赖于当前的主要内核版本,例如:
depends=('kernel26>=2.6.24-2' 'kernel26<2.6.25-0' 'nvidia-utils')
注意,在上面的例子中是 2.6.24-2
,而不是 -1
,这是因为对重要的内核子系统进行了配置更改,需要重新构建所有模块。在这种情况下,您应该始终更改依赖于版本的版本,否则一些内核和模块版本不同步的人将报告该模块已损坏。
基本原理
虽然为不同内核构建的内核模块始终位于不同的目录中并且可以和平共处,但是支持文件预计会在一个位置找到。如果一个软件包包含模块和支持文件,则您将无法为多个内核安装模块,因为软件包中的支持文件将导致 pacman 文件冲突。
模块和随附文件的分离允许在同一系统上为多个内核安装多个内核模块软件包,同时在预期位置之间共享支持文件。
文件放置
如果软件包中包含旨在覆盖现有同名模块的内核模块,则应将该模块放在 /lib/modules/2.6.xx-ARCH/updates
目录中。当 depmod 运行时,此目录中的模块将优先考虑。