标签: linux-headers

无法在 debian stretch / Debian 9 上更新 Linux 头文件

运行以下命令后,我收到错误:

# apt-get install linux-headers-$(uname -r)
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package linux-headers-4.9.0-3-amd64
E: Couldn't find any package by glob 'linux-headers-4.9.0-3-amd64'
E: Couldn't find any package by regex 'linux-headers-4.9.0-3-amd64'
Run Code Online (Sandbox Code Playgroud)

为了排除故障,我检查了以下内容:

# apt-cache search linux-headers
aufs-dkms - DKMS files to build and install aufs
linux-libc-dev-arm64-cross - Linux Kernel Headers for development (for cross-compiling)
linux-libc-dev-armel-cross - Linux Kernel Headers for development (for cross-compiling)
linux-libc-dev-armhf-cross - Linux Kernel Headers for development (for cross-compiling) …
Run Code Online (Sandbox Code Playgroud)

debian linux-kernel linux-headers

7
推荐指数
2
解决办法
2万
查看次数

为什么/usr/include 中有多个头文件副本?

我一直在浏览我的 /usr/include 文件夹,试图熟悉布局,我注意到头文件有多个副本(至少按名称,我实际上并没有区分它们以查看它们是否准确副本)在 /usr/include 的几个子目录中找到。对于标准 C 和 C++ 头文件以及 POSIX/LSB 标准头文件尤其如此。

一些示例包括(注意 ./ 指的是 /usr/include):

./asm-generic/unistd.h
./linux/unistd.h
./unistd.h
./x86_64-linux-gnu/sys/unistd.h
./x86_64-linux-gnu/bits/unistd.h
./x86_64-linux-gnu/asm/unistd.h

./stdlib.h
./x86_64-linux-gnu/bits/stdlib.h
./c++/7/stdlib.h
./c++/7/tr1/stdlib.h

./c++/7/cmath
./c++/7/ext/cmath
./c++/7/tr1/cmath

./asm-generic/termios.h
./linux/termios.h
./x86_64-linux-gnu/sys/termios.h
./x86_64-linux-gnu/bits/termios.h
./x86_64-linux-gnu/asm/termios.h
./termios.h

./linux/time.h
./time.h
./x86_64-linux-gnu/sys/time.h
./x86_64-linux-gnu/bits/time.h
Run Code Online (Sandbox Code Playgroud)

为什么是这样?为什么某些 C 标准头文件会出现在 C++ 位置?

我只安装了一个编译器(GCC 7)。

c c++ linux-headers

6
推荐指数
1
解决办法
2282
查看次数

4.14.71-v6 的 Kali Linux 内核头文件

我正在尝试为 Kali Linux 安装内核头文件版本 4.14.71-v6 (uname -r)。我已经执行了常用命令...

apt update
apt upgrade
apt dist-upgrade
apt install linux-headers-generic
alt install linux-headers-$(uname -r)
Run Code Online (Sandbox Code Playgroud)

...有和没有选项 -y

也做了重启。我通过 apt search 4.14 搜索了 repos。我查看了http://http.kali.org/kali/pool/main/l/linux/,根本没有成功。

我在http://http.kali.org/kali/pool/main/l/linux/上看到是 4.18 和 4.19 的内核头文件,但升级只分发版本到我的 4.14.x

有人知道该怎么做吗?

kernel kali-linux linux-headers

5
推荐指数
1
解决办法
1138
查看次数

可以在用户空间中使用的内核头是什么?它们的签名或接口是否与不同目录中的标头不同?

这可能是一个关于内核头的不连贯的问题,因为我对它以及它的使用地点和方式没有清楚的了解。我认为它可能会被标记。我的问题有 3 个部分:

  1. 我认为内核头提供了一个接口,以便内核的其他部分(例如模块)可以使用它们。这就是我的书本知识。我还没有看到或发现任何使用内核头的代码(如果有人能指出我,我将不胜感激)。它也可以在用户空间中使用吗?任何代码示例将不胜感激。

  2. 我发现使用make headers_install内核头是由用户空间公开的,但同时不鼓励在用户空间中使用内核头。如果不鼓励,那么将其暴露给用户空间有什么用呢?

  3. 根据thisthis,内核头文件(.h 文件)应该位于 3 个位置:/usr/include/linux/kernel.h用于用户空间 b./lib/modules/$(uname -r)/build/include/linux/sched.h这是外部模块 c. /usr/src/...用于内核模块这是否意味着不同目录中的头文件具有不同的用途或不同的接口或签名?换句话说,#include <linux/xyz.h> 用户空间代码中的含义与#include <linux/xyz.h>内核模块中的含义是否不同?外部模块与内核模块相同吗?

谢谢。

kernel-modules linux-kernel linux-headers

4
推荐指数
1
解决办法
3297
查看次数

想要在 CentOS 7 上安装 VirtualBox Guest Additions 但出现标头不匹配的情况

我尝试在 CentOS 7 虚拟机上安装 VirtualBox Guest Additions。

我通过安装了先决条件

sudo yum install perl gcc dkms kernel-devel kernel-headers make bzip2
Run Code Online (Sandbox Code Playgroud)

然后我“插入”Guest Additions CD 映像,Guest Additions 自动运行程序出现并运行。

但是,Guest Additions 安装出错

VirtualBox Guest Additions:未找到目标内核 3.10.0-1062.el7.x86_64 的内核标头。

为了更仔细地检查,我在虚拟机的终端 shell 中发出了以下命令:

$ ls /usr/src/kernels/
3.10.0-1062.18.1.el7.x86_64
Run Code Online (Sandbox Code Playgroud)

$ uname -r
3.10.0-1062.el7.x86_64
Run Code Online (Sandbox Code Playgroud)

请注意已安装标头中的附加字符18.1与内核报告的内容相比较。我想这就是 Guest Additions 安装失败的原因。

如何解决此问题并安装 Guest Additions?


更多细节:

virtual-machine centos kernel-modules virtualbox linux-headers

2
推荐指数
1
解决办法
2162
查看次数

在 linux 内核中找不到一些“asm”、“生成的”头文件的来源?

所以,我正在编写一个在内核空间中工作的模块。我的代码编译正确并且工作正常。

问题是有一些头文件,我在任何地方都找不到。这对我来说没有意义,为什么头文件不存在时一切正常。他们一定在某个地方。

这些是我在任何地方都找不到的一些头文件(还有更多,但对于我的问题,它们可能就足够了):

#include <asm/errno.h>
#include <asm/socket.h>  /* /include/linux/socket.h */
#include <stdarg.h>      /* /include/linux/kernel.h */
#include <asm/types.h>
#include <asm/mmiowb.h>  /* /include/linux/spinlock.h */
#include <asm/param.h>   /* /include/linux/jiffies.h */
Run Code Online (Sandbox Code Playgroud)

尽管x86在 .

而且我不知道在哪里查找这些文件:

#include <generated/timeconst.h>    /* /include/linux/jiffies.h */
#include <generated/bounds.h>
#include <generated/autoconf.h>     /* /include/linux/kconfig.h */
#include <generated/asm-offsets.h>
Run Code Online (Sandbox Code Playgroud)

我正在linux 内核 5.4.31的以下目录中查找这些文件:

/include
/include/uapi
/arch/x86/include
/arch/x86/include/uapi
Run Code Online (Sandbox Code Playgroud)

我希望可以在上述包含路径中找到这些文件。但是我对编译后处理 linux 头文件的位置和方式知之甚少,因为我在源代码中找到了它们。

linux c source x86 linux-headers

1
推荐指数
1
解决办法
980
查看次数