1、背景介绍
在使用复旦微zynq时,有时候虽然针对uboot源码进行了改动,但由于uboot基线版本只有一个(2018-07-fmsh),导致无法区分版本信息,虽然可以通过编译时间来区分,但没有版本号直观。内核也是类似的情况。针对这一点,需要在uboot和kernel中增加用户自定义的版本信息。
2、uboot增加版本信息
修改include中的version.h,添加版本宏定义
/* SPDX‐License‐Identifier: GPL‐2.0+ */
/*
* (C) Copyright 2000‐2006
* Wolfgang Denk, DENX Software Engineering, wd@denx.de.
*/
#ifndef __VERSION_H__
#define __VERSION_H__
#include <timestamp.h>
#include "uboot_version.h"//*****************************************20240517 add (total:4‐number:1)
#ifndef DO_DEPS_ONLY
#include "generated/version_autogenerated.h"
#endif
#if 0 //************************************************************20240517 delete for back (total:4‐number:2)
#define U_BOOT_VERSION_STRING U_BOOT_VERSION " (" U_BOOT_DATE " ‐ " \
U_BOOT_TIME " " U_BOOT_TZ ")" CONFIG_IDENT_STRING
#endif
//*******************************************************************20240517 add (total:4‐number:3)
#define U_BOOT_VERSION_STRING U_BOOT_VERSION " (" U_BOOT_DATE " ‐ " \
U_BOOT_TIME " " U_BOOT_TZ ")" CONFIG_IDENT_STRING " ‐ " UBOOT_VERSION
#ifndef __ASSEMBLY__
extern const char version_string[];
#endif /* __ASSEMBLY__ */
#endif /* __VERSION_H__ */
代码中UBOOT_VERSION为新增的宏,这里需要包含uboot_version.h头文件
//20240517 add
#define UBOOT_VER_MAJOR "1"
#define UBOOT_VER_MINOR "0"
#define UBOOT_VER_REVISION "0"
#define UBOOT_VER_DATE "20240517"
#define UBOOT_VERSION "(V"UBOOT_VER_MAJOR"."UBOOT_VER_MINOR"."UBOOT_VER_REVISION"‐"UBOOT_VER_DATE")"
这样编译出来uboot启动时打印信息如下
3、kernel增加版本信息
和uboot添加方式类似,也是在version中新增宏定义,路径在init目录下
/*
* linux/init/version.c
**
Copyright (C) 1992 Theodore Ts'o
**
May be freely distributed as part of Linux.
*/
#include <generated/compile.h>
#include <linux/module.h>
#include <linux/uts.h>
#include <linux/utsname.h>
#include <generated/utsrelease.h>
#include <linux/version.h>
#include <linux/proc_ns.h>
#include <linux/proc_ns.h>
#include "kernel_version.h"//*********************************************20240517 add(total:4‐number:1)
#ifndef CONFIG_KALLSYMS
#define version(a) Version_ ## a
#define version_string(a) version(a)
extern int version_string(LINUX_VERSION_CODE);
int version_string(LINUX_VERSION_CODE);
#endif
struct uts_namespace init_uts_ns = {
.kref = KREF_INIT(2),
.name = {
.sysname = UTS_SYSNAME,
.nodename = UTS_NODENAME,
.release = UTS_RELEASE,
.version = UTS_VERSION,
.machine = UTS_MACHINE,
.domainname = UTS_DOMAINNAME,
},
.user_ns = &init_user_ns,
.ns.inum = PROC_UTS_INIT_INO,
#ifdef CONFIG_UTS_NS
.ns.ops = &utsns_operations,
#endif
};
EXPORT_SYMBOL_GPL(init_uts_ns);
/* FIXED STRINGS! Don't touch! */
#if 0 //***************************************************************20240517 delete for back (total:4‐number:2)
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";
#endif
/* FIXED STRINGS! Don't touch! */
//************************************************************************20240517 add(total:4‐number:3)
const char linux_banner[] =
"Linux version " UTS_RELEASE " (" LINUX_COMPILE_BY "@"
LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION " ‐ " LINUX_KERNEL_VERSION "\n";
const char linux_proc_banner[] =
"%s version %s"
" (" LINUX_COMPILE_BY "@" LINUX_COMPILE_HOST ")"
" (" LINUX_COMPILER ") %s" " ‐ " LINUX_KERNEL_VERSION "\n";
里面LINUX_KERNEL_VERSION为新增的宏
头文件kernel_version.h也放到该目录下
//20240517 delete for back(total:4‐number:4)
#define KERNEL_VER_MAJOR "1"
#define KERNEL_VER_MINOR "0"
#define KERNEL_VER_REVISION "1"
#define KERNEL_VER_DATE "20240517"
#define LINUX_KERNEL_VERSION "(V"KERNEL_VER_MAJOR"."KERNEL_VER_MINOR"."KERNEL_VER_REVISION"‐"KERNEL_VER_DATE")"
这样编译出来后启动内核时打印信息如下
通过cat /proc/version也可以看到版本信息
这样后续修改了代码,可以通过修改两个.h文件进行版本区分。