firedrillsergeant Asked: 2018-03-29 10:16:32 +0800 CST2018-03-29 10:16:32 +0800 CST 2018-03-29 10:16:32 +0800 CST 文件 linux/kernel.h 到底在哪里? 772 我正在阅读 Salzman 的 Linux Kernel Module Programming Guide,我想知道文件 linux/kernel.h 的位置。我找不到它find。或者更确切地说,我发现的文件中没有任何printk优先宏。 linux-kernel kernel 3 个回答 Voted Best Answer Stephen Kitt 2018-03-29T12:10:19+08:002018-03-29T12:10:19+08:00 用于模块构建的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.h中linux/kern_levels.h。我猜您正在阅读基于 2.6 内核系列的原始指南;对于现代内核,您应该阅读更新的指南(目前为5.6.7)。 ivanivan 2018-03-29T10:48:03+08:002018-03-29T10:48:03+08:00 在我的 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 根据 Jeff 对您的问题的评论,我认为大多数时候/usr/include/linux/kernel.h都会使用, 我敢肯定,如果您提取内核树压缩包,它的目录结构中也可能有另一个副本。快速检查显示它们都是不同的大小......或空文件。 ron 2018-03-29T12:56:03+08:002018-03-29T12:56:03+08:00 这个问题的答案可能很大程度上取决于 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它将位于与您的 linux 发行版uname -r的内核源包相关的某个文件夹下并成为内核源包的一部分。
用于模块构建的
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.h
中linux/kern_levels.h
。我猜您正在阅读基于 2.6 内核系列的原始指南;对于现代内核,您应该阅读更新的指南(目前为5.6.7)。在我的 Mint 18.x 系统上,
build-essential
但没有安装任何完整的源代码树 -根据 Jeff 对您的问题的评论,我认为大多数时候
/usr/include/linux/kernel.h
都会使用,我敢肯定,如果您提取内核树压缩包,它的目录结构中也可能有另一个副本。快速检查显示它们都是不同的大小......或空文件。
这个问题的答案可能很大程度上取决于 linux 发行版...... SUSE/SLES vs RHEL/Centos/Fedora vs debian vs mint 等等,
并且它是否也会根据 linux 发行版与 debian 的 RPM 风格而有所不同?
无论如何,我的经验主要是使用 SLES 11.4 版,为此我可以保证
当我将内核更新到较新的版本时,软链接会随着 kernel.h 一起发生相应的变化。我认为可以肯定地说,如果您正在寻找它的内核模块版本,
kernel.h
它将位于与您的 linux 发行版uname -r
的内核源包相关的某个文件夹下并成为内核源包的一部分。