问题提出:
多项目多分支的开发模式中,为了方便定位问题,往往需要确认当前的问题日志对应的是哪个分支,哪个提交。为了解决这个问题我们需要有一种方便的手段。
解决方案:
首先想象的是是把git branch和git commit id都打印到dmesg里面,从而完美解决问题。具体做法如下:
diff --git a/apps_proc/kernel/msm-4.4/init/version.c b/apps_proc/kernel/msm-4.4/init/version.c
index 067fa52..b434702 100644
--- a/apps_proc/kernel/msm-4.4/init/version.c
+++ b/apps_proc/kernel/msm-4.4/init/version.c
@@ -46,7 +46,7 @@ EXPORT_SYMBOL_GPL(init_uts_ns);
const char linux_banner[] =
"Linux version " UTS_RELEASE " (" LINUX_COMPILE_BY "@"
LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION
- "(" COMMIT_INFO ")" "\n";
+ "(" BRANCH_INFO":"COMMIT_INFO ")" "\n";
const char linux_proc_banner[] =
"%s version %s"
diff --git a/apps_proc/kernel/msm-4.4/scripts/mkcompile_h b/apps_proc/kernel/msm-4.4/scripts/mkcompile_h
index d01233c..214e9ab 100755
--- a/apps_proc/kernel/msm-4.4/scripts/mkcompile_h
+++ b/apps_proc/kernel/msm-4.4/scripts/mkcompile_h
@@ -77,7 +77,8 @@ UTS_TRUNCATE="cut -b -$UTS_LEN"
echo \#define LINUX_COMPILE_HOST \"`echo $LINUX_COMPILE_HOST | $UTS_TRUNCATE`\"
echo \#define LINUX_COMPILER \"`$CC -v 2>&1 | grep ' version '`\"
- echo \#define COMMIT_INFO \"`git log | head -3`\"
+ echo \#define COMMIT_INFO \"`git log -1 | awk 'NR==1 {print substr($2,0,40)}'`\"
+ echo \#define BRANCH_INFO \"`git symbolic-ref --short -q HEAD`\"
) > .tmpcompile
测试效果:
[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Initializing cgroup subsys cpuacct
[ 0.000000] Linux version 4.4.115-perf (CN\xxx@cqrnd01) (gcc version 5.3.0 (GCC) ) #1 SMP PREEMPT Thu Aug 26 00:03:02 CST 2021(projects/master:ef2327218cb8e990315931cc828a2d3edfe7fd01)
[ 0.000000] Boot CPU: AArch64 Processor [512f2011]
可以看到,dmesg里面打印了(projects/master:ef2327218cb8e990315931cc828a2d3edfe7fd01),满足需求。