たぶん、この辺の会話から
— int $0x03@SNS部 (@masami256) 2017年1月30日
この記事に繋がってたりするのかな?なんて思ったりということで、
さらに話を続けてみてですね、こんなpatchを書きました。4.10.0-rc6がベースのカーネルです。
diff --git a/Makefile b/Makefile index 96b27a8..6c3f392 100644 --- a/Makefile +++ b/Makefile @@ -1024,6 +1024,7 @@ endif prepare2: prepare3 prepare-compiler-check outputmakefile asm-generic prepare1: prepare2 $(version_h) include/generated/utsrelease.h \ + include/generated/utscodename.h \ include/config/auto.conf $(cmd_crmodverdir) @@ -1097,6 +1098,10 @@ define filechk_version.h echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))';) endef +define filechk_utscodename.h + (echo \#define UTS_CODENAME \"$(NAME)\";) +endef + $(version_h): $(srctree)/Makefile FORCE $(call filechk,version.h) $(Q)rm -f $(old_version_h) @@ -1104,6 +1109,9 @@ $(version_h): $(srctree)/Makefile FORCE include/generated/utsrelease.h: include/config/kernel.release FORCE $(call filechk,utsrelease.h) +include/generated/utscodename.h: $(srctree)/Makefile FORCE + $(call filechk,utscodename.h) + PHONY += headerdep headerdep: $(Q)find $(srctree)/include/ -name '*.h' | xargs --max-args 1 \ diff --git a/init/version.c b/init/version.c index fe41a63..82fde8f 100644 --- a/init/version.c +++ b/init/version.c @@ -11,6 +11,7 @@ #include <linux/uts.h> #include <linux/utsname.h> #include <generated/utsrelease.h> +#include <generated/utscodename.h> #include <linux/version.h> #include <linux/proc_ns.h> @@ -45,7 +46,7 @@ EXPORT_SYMBOL_GPL(init_uts_ns); /* FIXED STRINGS! Don't touch! */ const char linux_banner[] = "Linux version " UTS_RELEASE " (" LINUX_COMPILE_BY "@" - LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION "\n"; + LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION UTS_CODENAME "\n"; const char linux_proc_banner[] = "%s version %s" diff --git a/kernel/utsname_sysctl.c b/kernel/utsname_sysctl.c index c8eac43..8f3c12a 100644 --- a/kernel/utsname_sysctl.c +++ b/kernel/utsname_sysctl.c @@ -14,6 +14,7 @@ #include <linux/utsname.h> #include <linux/sysctl.h> #include <linux/wait.h> +#include <generated/utscodename.h> #ifdef CONFIG_PROC_SYSCTL @@ -104,6 +105,13 @@ static struct ctl_table uts_kern_table[] = { .proc_handler = proc_do_uts_string, .poll = &domainname_poll, }, + { + .procname = "codename", + .data = UTS_CODENAME, + .maxlen = sizeof(UTS_CODENAME), + .mode = 0444, + .proc_handler = proc_do_uts_string, + }, {} };
差分的にはこんな感じです。
masami@kerntest:~/linux-kernel (codename *)$ diffstat ../codename.patch Makefile | 8 ++++++++ init/version.c | 3 ++- kernel/utsname_sysctl.c | 8 ++++++++ 3 files changed, 18 insertions(+), 1 deletion(-)
こうすると、dmesgの一番先頭、ビルド時刻の後ろにコードネーム(Fearless Coyote)がついてます。
masami@kerntest:~/linux-kernel (codename *)$ dmesg | head -n 1 [ 0.000000] Linux version 4.10.0-rc6-ktest+ (masami@kerntest) (gcc version 6.3.1 20161221 (Red Hat 6.3.1-1) (GCC) ) #7 SMP Wed Feb 1 00:03:08 JST 2017Fearless Coyote
あと、/proc/sys/kernel/codenameファイルを作ってそれを読むこともできます。
masami@kerntest:~/linux-kernel (codename *)$ cat /proc/sys/kernel/codename Fearless Coyote
これで起動中のカーネルのコードネームを確認できるようになりましたヽ(=´▽`=)ノ
だがしかし、new_utsname構造体に値を追加したらさすがにABIをぶち壊したようでブートできなかったので、unameで確認するのは諦めました/(^o^)\
Linuxカーネル「ソースコード」を読み解く (I・O BOOKS)
- 作者: 平田豊
- 出版社/メーカー: 工学社
- 発売日: 2016/12
- メディア: 単行本
- この商品を含むブログ (1件) を見る