总结
您可能想要安装一个名为linux-headers-generic
的软件包。
如果运行uname -r
给出的版本号后面不是generic
,则将其替换为generic
在linux-headers-generic
中。(在某些Ubuntu发行版的某些安装中,这可能是server
或generic-pae
,还有一些其他偶尔的内核“口味”)
由于您很可能需要这样做才能构建驱动程序(可能是自动化的,您可能不是“自己构建它”),所以最好也安装build-essential
,这样您可能拥有所有必要的工具。
详细解释
据我所知,没有操作系统有一个名为Linux-kernel-devel
的软件包。这有两个原因:
- 以大写字母开头的软件包名称在任何类Unix操作系统中都非常罕见。
- GNU/Linux操作系统通常将与内核相关的软件包命名为包含单词kernel或单词linux,但不同时包含两者。(在Ubuntu上,是单词linux。)
在使用Red Hat软件包管理器(rpm
)和相关工具的系统上,内核相关的软件包通常在其包名称中包含kernel
。例如,Mageia有一些软件包,它们的名称以kernel
开头并以devel
结尾。这些软件包几乎总是(在Mageia和任何拥有它们的操作系统上)提供构建驱动程序所需的头文件,以便与内核一起从源代码构建驱动程序。它们还可以提供相关的实用工具来简化操作。这些软件包:
- 不要提供内核的完整源代码。这由其他软件包提供。
- 不要提供预编译的可用内核。这由其他软件包提供。
- 不要提供编译器或大多数其他目的构建工具。这些也由其他软件包提供。
在Ubuntu中,如此处所列出的列表所示,提供内核头文件的软件包的名称以linux-headers
开头。通常安装正确的软件包是linux-headers-generic
。但是,为了确保安装哪个软件包以获取与您当前运行的内核相对应的标头,请运行:
uname -r
你将会得到类似以下的输出结果:
3.5.0-36-generic
那就是说,你会有一个版本号(其中包含“.”字符,通常至少有一个“-”),然后是一个“-”,然后是一个或多个单词,表示你正在运行的内核类型。
如果你只想获取当前运行版本的头文件,你可以安装名为“linux-headers-*”的软件包,其中“*”被替换为“uname -r”的完整输出。例如,在我的系统上,我可以运行:
sudo apt-get update && sudo apt-get install linux-headers-3.5.0-36-generic
我甚至可以自动化它:
sudo apt-get update && sudo apt-get install linux-headers-`uname -r`
这些方法是等效的,但通常不是最佳选择。
相反,您通常会希望安装
metapackage作为更新提供最新的内核头文件(通过始终依赖于最新的头文件包)。这与您编译和运行的内核安装和更新方式相似。要做到这一点,只需查看
uname -r
输出中版本号之后的部分。也就是说,如果
uname -r
给出
3.5.0-36-generic
,则只取
generic
部分。
然后安装名为
linux-headers-*
的软件包,其中
*
被替换为该部分。所以,在我的系统上,它将是
linux-headers-generic
,我可以通过运行以下命令来安装它:
sudo apt-get update && sudo apt-get install linux-headers-generic
对于大多数人来说,它是
linux-headers-generic
,但根据您正在运行的Ubuntu版本、设备的架构和类型以及其安装和配置方式,其他可能性包括
generic-pae
、
highbank
、
omap
、
server
和
virtual
。
相关软件包
头文件用于开发和编译/构建使用所提供头文件的软件。您可能需要内核头文件的最常见原因是从源代码构建驱动程序(内核模块)。某些应用程序,如VMware和VirtualBox,有时会要求这样做,并会自动进行构建。
除了头文件之外,构建软件还需要编译器和其他工具。为了确保您拥有必要的工具,建议同时安装build-essential
软件包。
除非你打算从源代码构建内核,否则很少有人需要实际的完整内核源代码。但如果你确实需要,你还需要安装另一个软件包。在Ubuntu中,完整内核源代码的软件包被称为linux-source
。(这符合Debian/Ubuntu命名提供Linux内核实质部分的软件包时使用linux
而不是kernel
的惯例。)
如果你仍然遇到问题
如果你尝试安装这些软件包时遇到问题,并且需要帮助,那么你必须包括终端中完整和准确的文本,包括你输入命令的行。提供这些信息的最佳方式是编辑你的问题,但如果太长了,你可以将其粘贴到类似http://paste.ubuntu.com的地方,并提供我们可以访问的URL。
如果你在这个问题上发表评论,我会收到通知。你可以编辑你的问题并在这里发表评论,以引起我们对你在问题中提供的信息的注意。(重要信息最好放在问题和答案中。)祝你好运!