如何安装内核头文件?

我想写一个设备驱动程序,但是找不到头文件,有人可以帮我找一下吗?另外,如果有人能指出一些重要的网站链接,我会非常感激。
5个回答

你应该能够通过在终端中运行以下命令来安装当前正在运行的内核的头文件:
sudo apt-get install linux-headers-$(uname -r)

一般来说,内核头文件包的命名为linux-header-*,其中"*"表示版本和变体(通用、服务器等)。

3嘿,谢谢,但你能告诉我“generic, server”等词是什么意思吗?我想写一个(内核驱动程序)。 - coder
15这样做不会自动安装未来更新的头文件,每次都需要重新运行此命令。因此,建议安装元包,如另一个答案中所述。 - gertvdijk
注意:这不会将它们放入GCC的包含路径中,您仍然需要使用“-I”。 - Ciro Santilli OurBigBook.com
1注意:要使这个工作正常,必须在/etc/apt/sources.list中存在适当的 deb-src 行。 - Vorac
对不起,它不适用于我的内核版本为4.19.57-v7+。怎么回事? - Stan Huang at Taiwan

你只需要输入:
sudo apt-get install linux-headers-generic

如果您正在进行桌面安装,apt-get命令将解决依赖关系并安装正确版本的内核头文件。

19当新版本发布时,Ubuntu也会对它们进行更新。 - Csq
3如果您在Openstack实例中运行虚拟机,则使用linux-headers-virtual - BSchlinker
1在 Debian Wheezy 中,我收到了错误信息:"软件包 linux-headers-generic 不可用,但被另一个软件包引用。[...] E: 软件包 'linux-headers-generic' 没有安装候选项"。 - IQAndreas
4@IQAndreas linux-headers-generic 包是特定于 Ubuntu 的。在 Debian 上,你应该使用 sudo apt-get install linux-headers-$(uname -r) - Alexandre Teles
我在18.04上安装了linux-headers-generic,但仍然没有最新和当前内核版本的头文件。可能只是这个版本的一个错误,我在早期版本中编译过内核模块,那时候我一定有正确的头文件。 - user1768761

过时内核包的情况

这应该涵盖另一个问题:当前运行的内核已经过时,意味着它不再在存储库中,也没有其头文件。因此,最好的做法是将内核更新到存储库中的最新版本。

linux-generic 是一个元包,用于保持内核及其头文件的当前版本

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

注意:根据你的Ubuntu版本,看看你是否需要linux-lowlatency(Ubuntu Studio),linux-signed-genericlinux-virtual

2在尝试安装驱动程序时,其他解决方案都对我无效。谢谢。 - Sopalajo de Arrierez
2一个几乎等同于Debian的替代品被称为linux-headers-amd64(适用于amd64系统,显然)。 - hanshenrik
1太棒了,linux-headers-amd64 对我的 Gitlab 流水线起到了作用!然而,linux-headers-$(uname -r) 却没有起作用。点赞! - Dr_Zaszuś

如果您已经安装了aptitude,请执行以下命令:sudo aptitude install linux-headers-$(uname -r)

5本质上是一样的。 - retrixe

这些命令应该可以运行:
sudo apt-get dist-upgrade -y
systemctl reboot
sudo apt-get install linux-headers-$(uname -r)
sudo apt-get upgrade linux-headers-$(uname -r)

为了更好地指导,请查看这个 视频

1他只是在问如何安装头文件,为什么你要建议升级发行版呢?如果你只想下载头文件,请不要按照这些步骤操作。 - AFP_555