Zynq-Linux移植学习笔记之68- 国产ZYNQ添加用户自定义版本信息

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文件进行版本区分。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/633887.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

快速搭建 WordPress 外贸电商网站指南

本指南全面解析了在 Hostinger 平台上部署 WordPress 外贸电商网站的详细步骤&#xff0c;涵盖托管方案选择、WordPress 一键安装、主题挑选与演示数据导入、主题个性化定制、SEO插件插件 AIOSEO 安装、通过 GTranslate 实现多语言自动翻译、地区访问控制插件&#xff0c;助力用…

高中数学:平面向量-数量积(向量与向量的乘积)与投影

一、引题 物理上的力做功 二、数量积与投影 1、数量积 θ的范围是[0,π] 2、投影 向量的投影&#xff0c;依然是一个向量&#xff01; 3、运算法则 易错点&#xff1a; 4、重要性质 这里对性质(2)要注意一下&#xff1a;如果 a → \mathop{a}\limits ^{\rightarrow…

30.包名的修改和新建后端模块

权限和第三方登录确实令人头疼,我们来学一点简单一点的。 另外,如果各位有属于自己的域名和ICP/IP备案,布置一个作业,自行实现第三方QQ登录。 我们所说的包名修改,是一次性修改ruoyi的全部包名,因为发现很多人有这样的需求,下载别人的代码,想要改成自己公司的包名,结…

当代家庭教育杂志社《当代家庭教育》杂志社24年第6期目录

家庭教育资讯 《家庭教育蓝皮书2024:中国家庭养育环境报告》出炉 4 2024年4月至7月北京市将开展“双减”专项行动 5 小学生玩“烟卡”到底该不该禁&#xff1f; 5 家庭教育理论探索 新时代家长家庭教育素养&#xff1a;意涵、关键要素及其培育 周起煌; 6-10 …

海外仓WMS系统多少钱?家庭海外仓怎么选合适的系统

作为海外仓管理的核心工具&#xff0c;WMS系统能够帮助企业实现仓库的可视化管理&#xff0c;流程自动化以及决策的数据化支持&#xff0c;进而提升海外仓的整体竞争力。 然而&#xff0c;许多海外仓企业在选择wms系统的时候&#xff0c;往往对价格的疑虑比较大&#xff0c;不…

微服务远程调用 RestTemplate

Spring给我们提供了一个RestTemplate的API&#xff0c;可以方便的实现Http请求的发送。 同步客户端执行HTTP请求&#xff0c;在底层HTTP客户端库(如JDK HttpURLConnection、Apache HttpComponents等)上公开一个简单的模板方法API。RestTemplate通过HTTP方法为常见场景提供了模…

Xinstall全渠道统计服务,洞悉App推广效果

在当今数字化时代&#xff0c;App已经成为企业和个人进行业务推广和服务提供的重要渠道。然而&#xff0c;随着App市场的日益饱和&#xff0c;如何有效地推广和运营App成为了众多广告主和开发者面临的难题。而App渠道统计作为衡量推广效果、优化运营策略的重要手段&#xff0c;…

大数据运维学习笔记之Ambari——筑梦之路

原则&#xff1a;分布式存储和分布式计算分开 今天就到这里啦。

Github上传时报错The file path is empty的解决办法

问题截图 文件夹明明不是空的&#xff0c;却怎么都上传不上去。 解决方案&#xff1a; 打开隐藏文件的开关&#xff0c;删除原作者的.git文件 如图所示&#xff1a; 上传成功&#xff01;

JS片段:如何将文本复制到剪贴板

在构建网站时&#xff0c;一个非常普遍的需求是能够通过单击按钮将文本复制到剪贴板。在现代浏览器中&#xff0c;使用navigator.clipboardAPI 访问系统剪切板&#xff0c;利用clipboard.writeText复制到剪贴板&#xff0c;再通过clipboard.readText获取剪贴板内容即可实现。 …

APH-Archives of Public Health

文章目录 一、期刊简介二、征稿信息三、期刊表现四、投稿须知五、投稿咨询 一、期刊简介 Archives of Public Health是一份范围广泛的公共卫生杂志&#xff0c;致力于出版公共卫生领域所有可靠的科学。该杂志旨在更好地了解人群的健康。该杂志有助于公共卫生知识&#xff0c;加…

Debug-010-git stash的用法及使用场景

问题原因&#xff1a; 其实也不是最近&#xff0c;就是之前就碰到过这个问题&#xff0c;那就是我正在新分支开发新功能&#xff0c;开发程度还没有到可以commit的程度&#xff0c;我不想提交(因为有些功能没有完全实现&#xff0c;而且没有自测的话很容易有问题&#xff0c;提…

智能车竞赛指南:从零到一,驶向自动驾驶的未来

智能车竞赛指南&#xff1a;从零到一&#xff0c;驶向自动驾驶的未来 一、智能车竞赛概览1.1 竞赛介绍1.2 竞赛分类 二、智能车开发技术基础2.1 硬件平台2.2 软件开发 三、实战案例&#xff1a;循线小车开发3.1 系统架构3.2 代码示例 四、技术项目&#xff1a;基于ROS的视觉导航…

4月粽子行业线上市场销售数据分析

随着节日庆祝常态化&#xff0c;消费者对礼物消费的态度发生变化&#xff0c;这会影响粽子的消费模式和市场需求。再加上技术进步&#xff0c;如速冻粽子和真空粽子的推广&#xff0c;也极大地推动了粽子行业的发展&#xff0c;使得产品更易于保存和运输&#xff0c;从而满足了…

linux系统内存持续飙高的排查方法

目录 前言&#xff1a; 1、查看系统内存的占用情况 2、找出占用内存高的进程 3、解决方法 4、补充&#xff1a;如果物理内存使用完了&#xff0c;会发生的情况 前言&#xff1a; 如果一台服务器内存使用率持续处于一个高峰值&#xff0c;服务器可能会出现响应慢问题。例如s…

linux系统硬盘读写慢的排查方法

如果服务器硬盘读写慢&#xff0c;可能会导致处理性能降低&#xff0c;用户响应慢。因此及时排除故障至关重要。下面是硬盘读写慢的排查思路。 1、top命令查看硬盘是否繁忙。 2、找出占用硬盘带宽高的进程。 通过iotop命令进行查看&#xff0c;iotop命令是用于展示硬盘读写操作…

Docker入门指南:Docker的常用命令总结(五)

&#x1f340; 前言 博客地址&#xff1a; CSDN&#xff1a;https://blog.csdn.net/powerbiubiu &#x1f44b; 简介 前面对Docker的安装&#xff0c;镜像&#xff0c;容器&#xff0c;数据卷进行了介绍&#xff0c;本章节总结下Docker的常用命令。 &#x1f4d6; 正文 1 基…

一文读懂Linux

前言 为了便于理解&#xff0c;本文从常用操作和概念开始讲起。虽然已经尽量做到简化&#xff0c;但是涉及到的内容还是有点多。在面试中&#xff0c;Linux 知识点相对于网络和操作系统等知识点而言不是那么重要&#xff0c;只需要重点掌握一些原理和命令即可。为了方便大家准…

家政预约小程序05服务管理

目录 1 设计数据源2 后台管理3 后端API4 调用API总结 家政预约小程序的核心是展示家政公司提供的各项服务的能力&#xff0c;比如房屋维护修缮&#xff0c;家电维修&#xff0c;育婴&#xff0c;日常保洁等。用户在选择家政服务的时候&#xff0c;价格&#xff0c;评价是影响用…

【零代码智能体开发】打造一个“情感和好大师”,解决人际关系中的困扰

〇、前言 智能体技术的快速发展带动了用户需求和实际应用场景仍需进一步探索。为激发开发者的创意潜能&#xff0c;探索具有应用价值的智能体&#xff0c;“文心智能体大赛”应运而生。 文心智能体平台 是百度推出的基于文心大模型的智能体&#xff08;Agent&#xff09;平台…