内核模块打包指南

来自 Arch Linux 中文维基
Arch 打包准则

32 位CLRCMakeCrossDKMSEclipseElectronFontFree PascalGNOMEGoHaskellJavaKDE内核模块LispMesonMinGWNode.jsNonfreeOCamlPerlPHPPythonRRubyRustVCSWebWine

打包分离[编辑 | 编辑源代码]

包含内核模块的软件包应予以特殊对待,以支持希望在系统上安装多个内核的用户。

当打包包含内核模块和其他非模块支持文件/实用程序的软件时,将内核模块与支持文件分开很重要。

准则[编辑 | 编辑源代码]

打包此类软件时(以 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 运行时,此目录中的模块将优先考虑。