12.04.2 LTS 3.5.0中的linux-kernel-devel是什么意思?


14

为菜鸟问题道歉,但是当我尝试

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软件包做什么?您在寻找标题,还是其他?
罗比·巴萨克

Answers:


15

执行摘要

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

如果运行uname -r为您提供了比其他一些generic版本号后,替代,对于genericlinux-headers-generic。(这可能是servergeneric-pae在某些Ubuntu的发行版的一些设施,还有其他一些偶然的内核“口味”。)

由于您很可能需要此驱动程序,因此可以构建驱动程序(该驱动程序可能是自动化的,因此您可能不会自己“构建”驱动程序),因此最好也安装该驱动程序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-*where 的软件包,其中*包含的完整输出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`

这些方法是等效的,但通常不是最佳方法。

相反,你通常会想要安装的综合包总是提供最新的内核头文件作为升级(永久依赖于任何头包是最新的)。这与您编译运行的内核的安装和更新方式相似。为此,仅查看版本号后面uname -r的输出部分。也就是说,如果给您,请只参与其中。uname -r3.5.0-36-genericgeneric

然后安装名为linux-headers-*where 的软件包,然后将其*替换为该软件包。因此,在我的系统上,它将是linux-headers-generic一种安装方式:

sudo apt-get update && sudo apt-get install linux-headers-generic

对于大多数人来说是linux-headers-generic,但是这取决于Ubuntu的发布你正在运行,什么结构和类型的设备你运行它,以及它是如何安装和配置,其他可能性包括generic-paehighbankomapserver,和virtual

相关配套

头文件有助于开发和编译/构建使用由其头文件正在使用的软件提供的功能的软件。您可能需要内核头文件的最常见原因是,如果要从源代码构建驱动程序(内核模块)。某些应用程序(例如VMware和VirtualBox)有时会需要此功能,并将自己自动构建。

除了头文件之外,要构建软件,还需要编译器和其他工具。为了最大程度地提高您拥有必要工具的可能性,最好同时安装该build-essential软件包。

任何人都需要真正的完整内核源代码的情况很少见(当然,除非您打算从源代码构建内核)。但是,如果您确实需要它,则也必须安装另一个软件包。在Ubuntu中,用于完整内核源代码的软件包称为linux-source。(这与Debian / Ubuntu命名软件包的约定保持一致,该软件包提供Linux内核linux而非的实质部分kernel。)

如果仍然有问题

如果您尝试安装这些软件包中的任何一个,但是遇到问题,并且需要帮助,那么您将必须包含来自Terminal的完整且准确的文本,包括键入命令的行。最好的方法是编辑您的问题,但是如果问题太长,则可以将其粘贴到http://paste.ubuntu.com之类的位置,并提供我们可以访问它的URL。

如果您对此问题发表评论,我们会收到通知。您可以编辑问题,也可以在此处进行评论,以引起对问题中所提供信息的注意。(重要的信息最好放在问题和答案中。)祝您好运!


0

如报告所述(E:无法找到软件包linux-kernel-devel),没有这样的软件包。您可以通过从此处下载debian内核软件包来安装所需的每个内核版本。

例如; 我们要安装内核3.9.8(i386架构);将所有** i386.deb软件包以及所有* * * all.deb软件包下载到一个文件夹中。在终端中使用cd命令进入文件夹;

sudo dpkg -i *.deb
sudo update-grub2
sudo reboot

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


0

您必须自己确定需要哪个特定的deb,但是Ubunut的内核构建中将需要您的deb 。

老实说,我会先与您确认一下sudo apt-get update,然后sudo apt-get dist-upgrade确保您正在运行最新的内核,并且不久后将不需要再次执行此操作。

接下来,查看与您的版本相匹配的内核构建列表uname -r。您需要查看每个builds build.log文件,以了解他们将其映射到哪个主版本。我将3.5.0-34#55列为内核,但这确实可以构建3.5.7.14-quantal。安装与该版本对应的所有deb以获得标头等,并确保您具有以下构建工具sudo apt-get install build-essential

不过,您的行驶里程可能取决于您打算如何处理devel文件。


0

linux-kernel-devel是提供genksyms之类的SUSE / Redhat软件包的名称。

一个非常快速的Google建议linux-headers-generic在Debian / Ubuntu上提供genksyms。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.