【问题标题】:Linux kernel git tree - version.h is not refreshedLinux 内核 git 树 - version.h 未刷新
【发布时间】:2014-06-11 14:54:35
【问题描述】:

我正在编译一个内核模块并意识到尽管我从 git 签出了新内核并运行了 make modules_prepare,但 include/linux/version.h 并未刷新。我也尝试删除 include/linux/version.h,但是当我运行 make modules_prepare 时它不会重新生成。

知道如何获取最新的 version.h 吗?

【问题讨论】:

  • 可能包含在.gitignore 文件中? grep 这个文件名。
  • 我检查了.gitignore,它没有忽略include/linux dir

标签: git linux-kernel


【解决方案1】:

我将 include/generated/uapi/linux/version.h 复制到 include/linux/version.h 中,这似乎可行。但是,我仍在寻找更正式的方式来更新此文件。

【讨论】:

  • 为什么会有反对票?我需要解释吗?
  • 1. 处理自动生成的文件通常不是一件好事。下次生成文件时可能会有所不同。最好是符号链接。 2. 这不是一个可移植的解决方案。 要求用户应用程序更改路径是不正确的,但最糟糕的是要求用户配置他们的机器(在这种情况下复制/链接文件)作为应用程序假装。 3. 这不是一个答案,而是针对有问题的应用程序(例如 vmware 播放器、催化剂驱动程序、realtek 音频……)的破解。如果您可以修补您的应用程序,请同时查找路径,以便它可以在新旧内核上运行。
  • 在内核文件夹中运行make时,它运行CHK for include/generated/uapi/linux/version.h。老实说,我认为makefile只需要按照您的建议自动执行一个符号链接到 include/linux/version.h 。仍然不确定为什么该文件既没有被跟踪也没有自动刷新。
【解决方案2】:

由于我不记得是哪个内核版本,version.h header 位于

include/generated/uapi/linux/version.h

因此,无论您想对这个文件做什么,请使用正确位置的那个。一些“”程序仍然假定文件位于include/linux/version.h

您可以在 Makefile 中添加新的头目录:

-I/path/to/kernel/src/include/generated/uapi/

所以你的用户应用程序仍然使用#include <linux/version.h>

(我假设您使用的是 gcc,可能在其他编译器上该选项不是-I

【讨论】:

  • 要求用户应用程序更改包含路径是不正确的,因为我检查了 deb 包中的头文件夹,包含/生成的文件夹不存在。
  • 还有include/linux/version.h。该文件的新位置在答案中。如果您不想更新您的应用程序,您可以创建一个符号链接(不是您建议的副本);但这不是解决方案。关于正确性。带着“正确”的想法,我们仍然坚持使用 60 年代的 API :) 该文件在几年前被移动了。
  • 你是否建议用户不要写#include ,而应该写#include
猜你喜欢
  • 1970-01-01
  • 2012-09-19
  • 1970-01-01
  • 2012-06-13
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
  • 2012-03-02
  • 1970-01-01
相关资源
最近更新 更多