抱歉问了个菜鸟问题,但是当我尝试
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
没有喜悦...有什么建议吗?
答案1
执行摘要
您可能想要安装名为 的包linux-headers-generic
。
如果运行时uname -r
显示的不是generic
版本号,请将其替换为generic
。linux-headers-generic
(这可能是server
或generic-pae
在某些 Ubuntu 版本的某些安装中,并且还有其他一些偶尔出现的内核“风格”。)
由于您很可能需要它来构建驱动程序(它可能是自动化的,您可能不是“自己构建”),所以最好build-essential
也安装它,这样您可能就拥有所有必要的工具。
完整解释
据我所知,没有操作系统有一个名为的软件包Linux-kernel-devel
。这有两个原因:
- 对于任何类 Unix 操作系统来说,以大写字母开头的软件包名称都极为罕见。
- GNU/Linux 操作系统通常命名与内核相关的软件包,以便名称包含单词核心或单词Linux的,但不能同时使用。(在 Ubuntu 上,它是单词Linux的。
rpm
在使用 Red Hat 软件包管理器 ( ) 和相关实用程序的系统上,内核相关软件包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`
这些方法是等效的,但通常不是最好的方法。
相反,你通常会想要安装元包它始终提供最新的内核头文件作为更新(通过永久依赖最新的头文件包)。这与编译的、正在运行的内核的安装和更新方式相似。要做到这一点,只需查看 的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。
如果您对此问题发表评论,我会收到通知。您可以编辑您的问题,也可以在此处发表评论,以引起人们对您在问题中提供的信息的注意。(重要信息最好保留在问题和答案中。)祝您好运!
答案2
答案3
你必须自己规划出你需要哪些特定的 deb,但你需要的 deb 如下:Ubunut 的内核构建。
老实说,我会先检查sudo apt-get update
,然后sudo apt-get dist-upgrade
确保您运行的是最新的内核,并且不需要很快再次执行此操作。
接下来查看与您的版本匹配的内核构建列表uname -r
。您需要查看每个构建的 build.log 以找出它们将该构建映射到哪个主版本。我的内核中列出了 3.5.0-34#55,但这实际上映射到构建3.5.7.14-量子。安装与该版本相对应的所有 deb 以获取标题等,并确保你已经获得了构建工具sudo apt-get install build-essential
但是,您的里程可能会有很大差异,这取决于您计划用 devel 文件做什么。
答案4
linux-kernel-devel 是提供类似 genksyms 功能的 SUSE/Redhat 软件包的名称。
快速的 Google 搜索表明 linux-headers-generic 在 Debian/Ubuntu 上提供了 genksyms。