瑞芯微Rockchip开发者社区
直播中

h1654155272.9717

8年用户 1261经验值
擅长:电源/新能源
私信 关注
[经验]

你知道LINUX系统内核的实现原理是什么吗

引言

内核代表启动时通常会看到下面第二行信息的内容,它们是当前内核的版本、编译工具版本、编译环境等信息。

要在启动中的任何打印过程中,都经过一番讨论和了解才要在大家的发布。一条信息,但有一条信息,但实际上却隐藏了一些隐藏的故事。

要打印版本信息 为什么

当启动之后有很多种方式确定内核版本号系统信息,在嵌入式或安卓内核系统下,查看版本信息:

无名

进程/版本

在发布版linux系统环境下,还可以用下面的查看版本信息:

主机名

lsb_release

以上方法都是系统启动正常、加载文件系统需要之后使用的。
那么,系统启动过程中是否有打印内核版本信息呢?答案是完全有完成必要的。

比如下面几个应用场景:

SoC 芯片的内核适配

可负载驱动程序调试

多分支版本加载

内核伪装

内核版本实现原理

内核版本的标签打印信息 start_kernl(中的linux_kernl)字符串。

这里的横幅比是 ubuntu 系统里的 ssh 基本横幅一样,信息展示了系统的一些。

横幅字符串的定义位于init/version.c中,注意,它是一个只读字符串,不要删除它。

由以下几部分组成:

UTS_RELEASE
“5.4.124+”

LINUX_COMPILE_BY
“好笑”,我的编译机好笑

LINUX_COMPILE_HOST 玩
“搞笑”,我的编译机主机很搞笑

LINUX_COMPILER
“gcc version 6.5.0 (Linaro GCC 6.5-2018.12”)

UTS_VERSION
"#30 SMP 11 11 10:28 CST 20"
UTS:Unix 时间 Sat12,从这个名字 11:10:28 的 UNIX 印记。

对这些字符串逐条进行解析

这些宏的第一级定义在./scripts/mkcompile_h文件中。

UTS_VERSION

LINUX_COMPILE_BY
LINUX_COMPILE_HOST
LINUX_COMPILER

UTS_ 重点分析的来源
是一个在kernel 的宏内核——Makefile 中定义的一个宏,如下:

提高制作的等级可以看到,该脚本的打印内容经过翻译后如下:

现在可以确定KERNELRELEASE就是从kernel.release文件中获取到的。打开kernel.release确认一下:

其中。KERNELRELEASE_5.4.124+

KERNELRELEASE 是怎么来的呢
? 。

自动化命令2>/dev/null中的含义是:若猫失败即没有取到文件内容,于是将错误信息输出到黑洞文件。
通过下面的验证:

一切代码准备好之后,通过下面的将UTS更新到UTS中。

其中filechk的定义位于scripts/Kbuild.include

而utsrelease.h中的内容如下:

这就是我们启动内核的过程中打印出来的内核版本信息。

原作者:Linux与SoC

更多回帖

发帖
×
20
完善资料,
赚取积分