文件 linux/kernel.h 到底在哪里?

文件 linux/kernel.h 到底在哪里?

我正在阅读 Salzman 的《Linux 内核模块编程指南》,我想知道文件 linux/kernel.h 的位置。我用 找不到它find。或者更确切地说,我发现的文件printk中没有任何优先级宏。

答案1

linux/kernel.h用于模块构建的标头是部分内核源码。当模块在内核源代码树中构建时,这就是所使用的版本。

对于外部模块构建,构建过程会在/lib/modules/$(uname -r)/build/include/linux/sched.h.该文件由内核头包提供,例如在 Debian 衍生品上,该linux-headers-$(uname -r)软件包。

/usr/include/linux/kernel.h适用于用户进程,而不是内核模块。

优先printk宏现在位于linux/printk.hlinux/kern_levels.h。我猜你正在阅读原始指南,基于2.6内核系列;对于现代内核,你应该阅读更新后的指南(目前用于5.6.7)。

答案2

在我的 Mint 18.x 系统上,但build-essential没有安装任何完整的源代码树 -

user@localhost:~ $ locate kernel.h | grep \/kernel.h$
/usr/include/linux/kernel.h
/usr/src/linux-headers-4.4.0-21/include/linux/kernel.h
/usr/src/linux-headers-4.4.0-21/include/uapi/linux/kernel.h
/usr/src/linux-headers-4.4.0-21-generic/include/config/debug/kernel.h
/usr/src/linux-headers-4.4.0-21-generic/include/config/firmware/in/kernel.h
/usr/src/linux-headers-4.4.0-53/include/linux/kernel.h
/usr/src/linux-headers-4.4.0-53/include/uapi/linux/kernel.h
/usr/src/linux-headers-4.4.0-53-generic/include/config/debug/kernel.h
/usr/src/linux-headers-4.4.0-53-generic/include/config/firmware/in/kernel.h
/usr/src/linux-headers-4.8.0-53/include/linux/kernel.h
/usr/src/linux-headers-4.8.0-53/include/uapi/linux/kernel.h
/usr/src/linux-headers-4.8.0-53-generic/include/config/debug/kernel.h
/usr/src/linux-headers-4.8.0-53-generic/include/config/firmware/in/kernel.h

根据杰夫对你的问题的评论,我认为最多times/usr/include/linux/kernel.h将被使用,

我确信如果您提取内核树 tarball,它的目录结构中也可能有另一个副本。快速检查显示它们都是不同大小的......或者是空文件。

答案3

这个问题的答案可能很大程度上取决于Linux发行版... SUSE/SLES vs RHEL/Centos/Fedora vs debian vs mint 等等,

它是否也会根据 linux 发行版与 debian 的 RPM 风格而有所不同?

无论如何,我的经验主要是使用 SLES 11.4 版,为此我可以保证

/usr/src/linux/include/linux/kernel.h

where for me   /usr/src/linux -> /usr/src/linux-3.0.101-108.21

uname -r    for me returns 3.0.101-108.21-default

当我将内核更新到较新版本时,软链接会随着 kernel.h 一起发生相应变化。我认为可以肯定地说,如果您正在寻找内核模块它的版本kernel.h将位于与相关的某个文件夹下uname -r,并成为其一部分内核源代码适用于您的 Linux 发行版的软件包。

相关内容