【问题标题】:How to customize or remove extra Linux kernel version details shown at boot?如何自定义或删除启动时显示的额外 Linux 内核版本详细信息?
【发布时间】:2014-06-18 21:41:35
【问题描述】:

对于这个内核版本字符串(在启动时显示):

Linux 版本 3.12.18 (vagrant@vagrant-ubuntu-trusty-64) (gcc 版本 4.8.2 (Ubuntu 4.8.2-19ubuntu1)) #1 SMP Thu May 1 18:56 :23 UTC 2014

如何将粗体部分删除或自定义为内核构建的一部分?

【问题讨论】:

    标签: linux linux-kernel


    【解决方案1】:

    您可以通过设置以下定义来自定义您希望编辑的部分版本字符串(在启动时或通过调用命令cat /proc/version 看到):

    • KBUILD_BUILD_USER 更改您的“流浪”值。
    • KBUILD_BUILD_HOST 更改您的“vagrant-ubuntu-trusty-64”值。

    您可能还对KBUILD_BUILD_TIMESTAMP(更改为“Thu May 1 18:56:23 UTC 2014”)和KBUILD_BUILD_VERSION(更改为“#1”)感兴趣。


    完整的 Linux 进程横幅在 init/version.c 中完成。这些定义的值由scripts/mkcompile_h 生成。您可以编辑其中任何一个文件以完全控制您的版本字符串,但您永远不知道这些附加信息何时会有所帮助;我建议只更改定义。另一种选择是make some changes your host system 覆盖生成的值。通过这样做,您添加了额外的构建维护,只是为了更改很少查询的值。

    【讨论】:

    • 我希望有一种方法可以自动存储内核的 git commit,但除了自己做git log %H 之外我找不到它:-(
    【解决方案2】:

    内核通过 uname 调用仅向用户空间提供以下信息。您只能在自定义的 uname 二进制/内核中看到 gcc 版本 gcc 版本 4.8.2 (Ubuntu 4.8.2-19ubuntu1)

    man 2 unname

                   struct utsname {
                       char sysname[];    /* Operating system name (e.g., "Linux") */
                       char nodename[];   /* Name within "some implementation-defined
                                             network" */
                       char release[];    /* Operating system release (e.g., "2.6.28") */
                       char version[];    /* Operating system version */
                       char machine[];    /* Hardware identifier */
                   #ifdef _GNU_SOURCE
                       char domainname[]; /* NIS or YP domain name */
                   #endif
                   };
    

    Fedora/Redhat 不显示编译器信息。

    [root@Shash Sasi]# uname -a
    Linux Shash 3.13.10-200.fc20.x86_64 #1 SMP Mon Apr 14 20:34:16 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
    

    vagrant@vagrant-ubuntu-trusty-64 看起来像是 EXTRAVERSION 是内核主 makefile。

    VERSION = 3
    PATCHLEVEL = 15
    SUBLEVEL = 0
    EXTRAVERSION = -rc3
    

    在init/version.c中:

    const char linux_banner[] =
            "Linux version " UTS_RELEASE " (" LINUX_COMPILE_BY "@"
            LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION "\n";
    
    const char linux_proc_banner[] =
            "%s version %s"
            " (" LINUX_COMPILE_BY "@" LINUX_COMPILE_HOST ")"
            " (" LINUX_COMPILER ") %s\n";
    

    另请参阅 fs/proc/version.c

    【讨论】:

    • 当然,但这并没有回答我如何改变它。请记住,我说的是内核在启动时输出的第一行,而不是系统启动后的 uname。
    • 修改 Makefile 以删除 (vagrant@vagrant-ubuntu-trusty-64) 并检查 ubuntu 上的 uname 源以查找它的来源。我想如果你编译香草内核你不会看到这个。
    • 我的构建基于从 kernel.org 干净下载。 EXTRAVERSION 是空的,所以不是它。
    • 在 init/version.c: const char linux_banner[] = "Linux 版本 " UTS_RELEASE " (" LINUX_COMPILE_BY "@" LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION "\n"; const char linux_proc_banner[] = "%s 版本 %s" " (" LINUX_COMPILE_BY "@" LINUX_COMPILE_HOST ")" " (" LINUX_COMPILER ") %s\n";
    • @Axel:评论部分很乱,所以我更新了答案。
    【解决方案3】:

    应该是:

    make menuconfig -> General setup -> Local version - append to kernel release
    

    .config 文件中的CONFIG_LOCALVERSION

    【讨论】:

    • 不,不是这个。如果我有一个本地版本 -lv 它将打印 Linux 版本 3.12.18-lv (vagrant...
    猜你喜欢
    • 1970-01-01
    • 2020-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多