欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux内核/设备树version

程序员文章站 2024-01-23 18:30:16
...

背景

  Linux内核版本可以在/proc/version中查看。
  但是设备树默认没有版本信息,虽然可以通过demsg查到编译时间。
  在工作中,希望:

  1. 内核版本中添加产品型号、硬件版本、内核定制版本等信息。
  2. 设备树与内核的版本绑定,通过/proc/dtb查看。

内核版本

Contents

● product_version:产品型号
● hardware_version:硬件版本
● soft_version:内核定制版本
● build_type:分debug和release

Kernel

  修改source/kernel_src/kernel/kernel-4.9/init/version.c

const char linux_banner[] =
	"Linux version " UTS_RELEASE " (" LINUX_COMPILE_BY "@" LINUX_COMPILE_HOST ") "  UTS_VERSION " custom_version:" " [product:" PRODUCT_NAME ", hardware:" HARDWARE_VERSION ", soft:" SOFT_VERSION ", type:" BUILD_TYPE "] " "\n";

const char linux_proc_banner[] =
	"Linux version " UTS_RELEASE " (" LINUX_COMPILE_BY "@" LINUX_COMPILE_HOST ") "  UTS_VERSION " custom_version:" " [product:" PRODUCT_NAME ", hardware:" HARDWARE_VERSION ", soft:" SOFT_VERSION ",type:" BUILD_TYPE "] " "\n";

Makefile

  修改source/kernel_src/kernel/kernel-4.9/Makefile

uts_len := 64
define filechk_utsrelease.h
	if [ `echo -n "$(KERNELRELEASE)" | wc -c ` -gt $(uts_len) ]; then \
		echo '"$(KERNELRELEASE)" exceeds $(uts_len) characters' >&2;  \
		exit 1;                                                       \
	fi;           	                                                  \
	#--------------------------------------------
	# 内核版本号
	#--------------------------------------------
	(echo \#define UTS_RELEASE \"$(KERNELRELEASE)\"; \
	#--------------------------------------------
	# 以下PRODUCTNAME/HDVERSION/SOFTVERSION/BUILDTYPE
	# 为编译前设置的临时环境变量
	#--------------------------------------------
	echo \#define PRODUCT_NAME \"$(PRODUCTNAME)\"; \
	echo \#define HARDWARE_VERSION \"$(HDVERSION)\"; \
	echo \#define SOFT_VERSION \"$(SOFTVERSION)\"; \
	echo \#define BUILD_TYPE \"$(BUILDTYPE)\";)
endef

  编译完成后,会生成include/generated/utsrelease.h,包含上述宏定义。

Show

Linux内核/设备树version

设备树版本

DTS

  添加custom-version.dtsi:

/ {
	// 具体版本号在编译前填充
	custom,dtbbuildversion = "";
};

  dts中添加包含关系:

#include <custom-version.dtsi>

Kernel

后续添加

Version

  编译前填充版本号:

DTB_VERSION="${PRO_NAME}_${HW_NAME}_${TZTEK_BUILD_VERSION}_${TZTEK_BUILD_TYPE}"

DTS_VERSION_FILE=`find $DTS_DIR -name custom-version.dtsi`	# DTS_DIR是设备树路径
sed -i "s/custom,dtbbuildversion.*$/custom,dtbbuildversion = \"$DTB_VERSION\"\;/g" $DTS_VERSION_FILE

Show

Linux内核/设备树version

相关标签: Linux内核 linux