在12.04.2 LTS 3.5.0中,linux-kernel-devel的等效物是什么?

抱歉问个菜鸟问题,但是当我尝试的时候
sudo apt-get install Linux-kernel-devel 

我得到以下内容:
sudo apt-get install linux-kernel-devel  
Reading package lists... Done  
Building dependency tree        
Reading state information... Done  
E: Unable to locate package linux-kernel-devel  

我已经尝试了以下方法:
sudo apt-get install linux-headers-$(uname -r)  
sudo apt-get install build-essentials  
sudo apt-get install Linux-headers-generic 

没有任何喜悦... 有什么建议吗?

2你期望软件包linux-kernel-devel能做什么?你是在寻找头文件,还是其他东西? - Robie Basak
4个回答

总结

您可能想要安装一个名为linux-headers-generic的软件包。

如果运行uname -r给出的版本号后面不是generic,则将其替换为genericlinux-headers-generic中。(在某些Ubuntu发行版的某些安装中,这可能是servergeneric-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-paehighbankomapservervirtual

相关软件包

头文件用于开发和编译/构建使用所提供头文件的软件。您可能需要内核头文件的最常见原因是从源代码构建驱动程序(内核模块)。某些应用程序,如VMware和VirtualBox,有时会要求这样做,并会自动进行构建。

除了头文件之外,构建软件还需要编译器和其他工具。为了确保您拥有必要的工具,建议同时安装build-essential软件包。

除非你打算从源代码构建内核,否则很少有人需要实际的完整内核源代码。但如果你确实需要,你还需要安装另一个软件包。在Ubuntu中,完整内核源代码的软件包被称为linux-source。(这符合Debian/Ubuntu命名提供Linux内核实质部分的软件包时使用linux而不是kernel的惯例。)

如果你仍然遇到问题

如果你尝试安装这些软件包时遇到问题,并且需要帮助,那么你必须包括终端中完整和准确的文本,包括你输入命令的行。提供这些信息的最佳方式是编辑你的问题,但如果太长了,你可以将其粘贴到类似http://paste.ubuntu.com的地方,并提供我们可以访问的URL。

如果你在这个问题上发表评论,我会收到通知。你可以编辑你的问题并在这里发表评论,以引起我们对你在问题中提供的信息的注意。(重要信息最好放在问题和答案中。)祝你好运!


根据报告所说(E: 无法找到软件包linux-kernel-devel) 没有这样的软件包。 您可以通过从此处下载Debian内核软件包来安装任何内核版本。
例如,我们想要安装3.9.8内核(i386架构); 将所有**i386.deb软件包和所有.deb软件包**下载到一个文件夹中。 在终端中使用cd命令进入该文件夹。
sudo dpkg -i *.deb
sudo update-grub2
sudo reboot

这将安装您想要的内核版本。您可以在此site中分析内核主线和长期支持版本的版本。

你需要自己确定你需要哪些特定的deb包,但是在Ubunut's kernel builds中有你所需的deb包。
老实说,我建议你先运行sudo apt-get updatesudo apt-get dist-upgrade,确保你正在运行最新的内核,并且不需要再次进行这个操作。
接下来,浏览与你的uname -r匹配的内核构建列表。你需要查看每个构建的build.log文件,以了解它们将该构建映射到哪个主版本。我将我的内核列为3.5.0-34#55,但实际上它对应的构建是3.5.7.14-quantal。安装与该版本对应的所有deb包,以获取你所需的头文件等,并确保你已经安装了构建工具sudo apt-get install build-essential
根据你计划使用开发文件的具体情况,结果可能会有所不同。

linux-kernel-devel是SUSE/Redhat的一个软件包,提供类似genksyms的功能。

非常快速的谷歌搜索表明,linux-headers-generic在Debian/Ubuntu上提供genksyms。