redhat 文件服务器,几个重要的RedHat Linux内核文件详细介绍

2023-11-09

在网络中,不少服务器采用的是Linux系统。为了进一步提高服务器的性能,可能需要根据特定的硬件及需求重新编译Linux内核。编译Linux内核,需要根据规定的步骤进行,编译内核过程中涉及到几个重要的文件。比如对于RedHat Linux,在/boot目录下有一些与Linux内核有关的文件,进入/boot执行。

编译过RedHat Linux内核的人对其中的System.map、vmlinuz、initrd-2.4.7-10.img印象可能比较深刻,因为编译内核过程中涉及到这些文件的建立等操作。那么这几个文件是怎么产生的?又有什么作用呢?本文对此做些介绍。

一、vmlinuz

vmlinuz是可引导的、压缩的内核。“vm”代表“Virtual Memory”。Linux 支持虚拟内存,不像老的操作系统比如DOS有640KB内存的限制。Linux能够使用硬盘空间作为虚拟内存,因此得名“vm”。vmlinuz是可执行的Linux内核,它位于/boot/vmlinuz,它一般是一个软链接,比如图中是vmlinuz-2.4.7-10的软链接。

vmlinuz的建立有两种方式。一是编译内核时通过“make zImage”创建,然后通过:“cp /usr/src/linux-2.4/arch/i386/linux/boot/zImage/boot/vmlinuz”产生。zImage适用于小内核的情况,它的存在是为了向后的兼容性。

二是内核编译时通过命令make bzImage创建,然后通过:“cp/usr/src/linux-2.4/arch/i386/linux/boot/bzImage /boot/vmlinuz”产生。bzImage是压缩的内核映像,需要注意,bzImage不是用bzip2压缩的,bzImage中的bz容易引起误解,bz表示“big zImage”。 bzImage中的b是“big”意思。 zImage(vmlinuz)和bzImage(vmlinuz)都是用gzip压缩的。它们不仅是一个压缩文件,而且在这两个文件的开头部分内嵌有 gzip解压缩代码。所以你不能用gunzip 或 gzip –dc解包vmlinuz。

内核文件中包含一个微型的gzip用于解压缩内核并引导它。两者的不同之处在于,老的zImage解压缩内核到低端内存(第一个640K),bzImage解压缩内核到高端内存(1M以上)。如果内核比较小,那么可以采用zImage或bzImage之一,两种方式引导的系统运行时是相同的。大的内核采用bzImage,不能采用zImage。 vmlinux是未压缩的内核,vmlinuz是vmlinux的压缩文件。

二、initrd-x.x.x.img

initrd是“initial ramdisk”的简写。initrd一般被用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态。图中的initrd-2.4.7-10.img主要是用于加载ext3等文件系统及scsi设备的驱动。

比如,使用的是scsi硬盘,而内核vmlinuz中并没有这个scsi硬件的驱动,那么在装入scsi模块之前,内核不能加载根文件系统,但scsi 模块存储在根文件系统的/lib/modules下。为了解决这个问题,可以引导一个能够读实际内核的initrd内核并用initrd修正scsi引导问题。initrd-2.4.7-10.img是用gzip压缩的文件,initrd实现加载一些模块和安装文件系统等功能。

initrd映象文件是使用mkinitrd创建的。mkinitrd实用程序能够创建initrd映象文件。这个命令是RedHat专有的。其它 Linux发行版或许有相应的命令。这是个很方便的实用程序。具体情况请看帮助:man mkinitrd下面的命令创建initrd映象文件。

三、System.map

System.map是一个特定内核的内核符号表。它是你当前运行的内核的System.map的链接。

内核符号表是怎么创建的呢? System.map是由“nm vmlinux”产生并且不相关的符号被滤出。

对于本文中的例子,编译内核时,System.map创建在/usr/src/linux-2.4/System.map。像下面这样:

nm /boot/vmlinux-2.4.7-10 > System.map

下面几行来自/usr/src/linux-2.4/Makefile:

nm vmlinux | grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | sort > System.map

然后复制到/boot:

cp /usr/src/linux/System.map /boot/System.map-2.4.7-10

下图是System.map文件的一部分:

在进行程序设计时,会命名一些变量名或函数名之类的符号。Linux内核是一个很复杂的代码块,有许许多多的全局符号。

Linux内核不使用符号名,而是通过变量或函数的地址来识别变量或函数名。比如不是使用size_t BytesRead这样的符号,而是像c0343f20这样引用这个变量。

对于使用计算机的人来说,更喜欢使用那些像size_t BytesRead这样的名字,而不喜欢像c0343f20这样的名字。内核主要是用c写的,所以编译器/连接器允许我们编码时使用符号名,当内核运行时使用地址。

然而,在有的情况下,我们需要知道符号的地址,或者需要知道地址对应的符号。这由符号表来完成,符号表是所有符号连同它们的地址的列表。上图就是一个内核符号表,由上图可知变量名checkCPUtype在内核地址c01000a5。

Linux 符号表使用到2个文件:

/proc/ksyms

System.map

/proc/ksyms是一个“proc file”,在内核引导时创建。实际上,它并不真正的是一个文件,它只不过是内核数据的表示,却给人们是一个磁盘文件的假象,这从它的文件大小是0可以看出来。然而,System.map是存在于你的文件系统上的实际文件。

当你编译一个新内核时,各个符号名的地址要发生变化,你的老的System.map具有的是错误的符号信息。每次内核编译时产生一个新的System.map,你应当用新的System.map来取代老的System.map。

虽然内核本身并不真正使用System.map,但其它程序比如klogd,lsof和ps等软件需要一个正确的System.map。如果你使用错误的或没有System.map,klogd的输出将是不可靠的,这对于排除程序故障会带来困难。没有System.map,你可能会面临一些令人烦恼的提示信息。

另外少数驱动需要System.map来解析符号,没有为你当前运行的特定内核创建的System.map它们就不能正常工作。

Linux的内核日志守护进程klogd为了执行名称-地址解析,klogd需要使用System.map。System.map应当放在使用它的软件能够找到它的地方。执行:man klogd可知,如果没有将System.map作为一个变量的位置给klogd,那么它将按照下面的顺序,在三个地方查找System.map:

/boot/System.map

/System.map

/usr/src/linux/System.map

System.map也有版本信息,klogd能够智能地查找正确的映象(map)文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

redhat 文件服务器,几个重要的RedHat Linux内核文件详细介绍 的相关文章

  • 基于Arduino Uno的智能小车(可遥控,避障,调速)模块:L298N HC-05 HC-SR04及sg90(180度)舵机

    文章目录 一 先让小车动起来 二 加入对应模块实现对应功能 1 HC SR04及SG90舵机 2 完整程序编写 总结 一 先让小车动起来 1 用到的函数 定义引脚的输入 输出函数 pinMode pin OUT INPUT 通过使用pinM
  • jupyter 设置主题Error:Could not find a version that satisfies the requirement jupyterthemes from version

    1 jupyter设置主题的步骤 命令窗口输入 pip install jupyterthemes 具体主题讲解可参考 https www cnblogs com shanger p 12006161 html 2 遇到的问题 Could
  • QT的Tree View Model示例

    一 介绍 使用MVC架构 Tree View与Tree Widget 相比而言 需要为tree view 设置一个model 使Tree View 能有效降低内存的使用率 下面参考Qt官方提供的demo Simple Tree Model
  • SSM框架controller类正常部分页面跳转404

    一 问题 在做项目的时候 将写好的页面整合到SSM框架过程中 写好controller类 将相关页面调整过后 启动Tomcat 进入系统进行测试页面跳转问题 发现一部分页面跳转成功 一部分页面跳转失败 且跳转失败的页面是同一个目录下的 二
  • blender怎么移动骨骼_Blender

    1 打开blender可以通过 shift a 调出创建菜单 2 通过 rgs 这三个按键 可以分别对模型进行旋转移动缩放 3 shift d 可以实现复制功能 4 使用 z 键可以切换到线框模式 再按一次切换回来 5 tab 按键可以切换
  • 完全小白的pycharm深度学习调试+for循环断点条件设置

    完全小白的pycharm深度学习调试 for循环断点条件设置 写在最前面 基础方法 pycharm断点调试 控制台输入 代码中循环的debug方法 pycharm中图标的介绍 常见的Bug Debug经验 1 检查激活函数的输入值 2 检查
  • Hive往表写入数据的八种方法

    1 使用insert select 语法 insert overwrite table dest table partition dt xxxxxx selectc1 c2from src tablewhere 复制代码 select中的字
  • EC11编码器和单片机通信

    EC11编码器 EC11编码器通常又被称作为旋转编码器 一般主要是用于亮度 温度 频率 音量调节等参数控制 三只脚中的C脚接地 AB脚接上拉电阻后 当左转或右转时 AB脚就有脉冲信号输出 S1和S2脚为按压开关 按下时导通 旋转编码器的引脚
  • ARM汇编学习三

    有时 一次性加载 或存储 多个值更有效率 因此 我们需要使用LDM 载入多个值 和STM 存储多个值 这些指令基于起始地址的不同 有不同的形式 下面是我们将在本节中将会使用的代码 我们将一步一步地完成每一个指令 代码在test5 s中 da
  • [HNCTF 2022 WEEK2]ez_ssrf

    HNCTF 2022 WEEK2 ez ssrf
  • Windows下使用Linux命令 - GNUWin32 安装

    https sourceforge net projects getgnuwin32 source typ redirect 下载 GetGnuWin32 0 6 3 exe https sourceforge net projects g
  • BFD协议简介

    1 背景 双向转发检测BFD Bidirectional Forwarding Detection 是一种全网统一的检测机制 用于快速检测 监控网络中链路或者IP路由的转发连通状况 为了保护关键应用 网络中会设计有一定的冗余备份链路 网络发
  • 二叉树刷题

    二叉树 题目1 94 二叉树中的最大路径和 LintCode class Solution public 求出从根到任意位置的最大长度 int dfs TreeNode root int maxsum if root NULL return
  • Python面向对象详解(4-2)

    目录 一 类中的参数self 二 Python中self的解析与总结 1 self是什么 python中self代表类的实例 2 Python中只有针对类来说self才有意义 3 self只能用在python类的方法中 4 举例说明 三 类
  • 第十届蓝桥杯国赛 G排列数(动态规划精简题解+图解)

    动态规划 集合 f i j f i j f i j 表示填了前
  • 在socket编程中,如何获取连接另一端(客户端)的ip地址,使用accept或者getpeername

    这段代码没有实际的功能 只是为了获取连接另一端的ip地址 include
  • 因果推断----必要因和充分因

    必要因 或 若非因 和充分因 必要因 已知张三堵住消防通道 X 1 并且李四死了 Y 1 假如X为0 那么李四还活着 Y 0 的概率是多少 必要性概率 P N PN PN为 P
  • (c语言)PAT 乙级 1010 一元多项式求导 (25分)

    设计函数求一元多项式的导数 注 x的n次方 n为整数 的一阶导数为n乘x的n 1次方 输入格式 以指数递降方式输入多项式非零项系数和指数 绝对值均为不超过 1000 的整数 数字间以空格分隔 输出格式 以与输入相同的格式输出导数多项式非零项
  • cat命令

    Linux cat命令的使用 cat命令主要用来查看文件内容 创建文件 文件合并 追加文件内容等功能 A 查看文件内容主要用法 1 cat f1 txt 查看f1 txt文件的内容 2 cat n f1 txt 查看f1 txt文件的内容

随机推荐

  • 使用R语言实现逻辑回归预测客户流失

    目录 1 引言 2 加载并理解数据 3 数据预处理 4 构建并训练逻辑回归模型 5 模型评估
  • c语言函数中调用的参数太多_函数的参数太少(C语言错误)

    c语言函数中调用的参数太多 很少参数无法使用C语言 Too few arguments to function in C language This error occurs when numbers of actual and forma
  • 玩牌高手极其基本解法

    标题 玩牌高手 时间限制 1秒 内存限制 32768K 语言限制 不限 给定一个长度为n的整型数组 表示一个选手在n轮内可选择的牌面分数 选手基于规则选牌 请计算所有轮结束后其可以获得的最高总分数 选择规则如下 1 在每轮里选手可以选择获取
  • 时间操作——moment.js参考文档

    目录 一 引入moment js 1 Node js方式引入 2 浏览器方式引入 二 moment时区和转换 1 时区的设置 2 UTC和北京时间的互转 三 使用 1 获取时间 2 js 是一个轻量级的JavaScript时间库 它方便了日
  • (Slide)Attention Mechanism注意力机制

    PPT地址 http download csdn net download mounty fsc 10113027
  • Ubuntu有线校园网认证窗口提示:could not connect : no route to host

    问题 在Linux系统 Unbuntu22 04 上连接校园网时 遇到一个问题 因为使用的是有线连接校园网 弹出校园网认证窗口时提示 could not connect no route to host 尝试的方法 尝试了以下方法 但都没能
  • win11任务栏图标大小设置教程

    最近有不少小伙伴在升级安装最新的Win11系统后 发现任务栏的图标太小 不知道win11任务栏图标怎么调大小 下面小编就来给大家详细介绍下win11任务栏图标大小设置的具体方法吧 希望对大家有所帮助 win11任务栏图标大小设置教程 1 w
  • 错误:Visual Studio has encountered a problem and needs to close

    我使用VS2008 Qt4 7 4开发时 安装Qt后报出该错误 google了一下解决了问题 原来在安装QT插件不正确导致的 在360软件管家中 卸载了qt win opensource 4 7 4 vs2008 但qt vs addin
  • Android 9 静默安装、卸载App

    文章目录 引言 安装流程 实现代码 AndroidManifest xml配置 apk运行打包 放到源码目录下重新进行签名 编译 安装日志 转载自 Android 9 P静默安装 卸载App适配终极指南 引言 静默安装是指apk安装不需要用
  • Scratch图形化编程等级考试简介

    目录 全国青少年软件编程等级考试是行业首个且规模最大的编程等级考试 并且还有权威认证 对孩子未来的升学也有非常大的益处 全国青少年软件编程等级考试是由中国电子学会发起的面向青少年机器人软件编程能力水平的社会化评价项目 中国电子学会是工业和信
  • springboot 获得请求ip地址

    package com example winterholity util import javax servlet http HttpServletRequest import java net InetAddress import ja
  • Yii Framework 开发教程(41) Zii组件-Tabs示例

    CJuiTabs 显示分页UI组件 和Yii Framework 开发教程 17 UI 组件 TabView示例功能类似 它封装了 JUI tabs插件 前基本用法如下 php view plain copy print
  • (一):Qt信号槽原理---元对象与moc

    一 信号槽 当信号被调用时 与其关联的槽函数会被调用 调用时机与连接类型有关 同一个线程内的信号 槽 就相当于函数调用 和观察者模式相似 只不过信号 槽稍微有些性能损耗 这个后面细说 跨线程的信号 槽 在信号触发时 发送者线程将槽函数的调用
  • Visual Assist X AND MSDN

    assist X 推荐 这款插件是visual studio或者vc的插件 没想到vs用起来也可以这么爽 用起来居然比sourceinsight还好用 好用到哭 好用到哭 好用到哭 自动补全 补全的时候还可以看到对这个补全的东西的介绍 鼠标
  • 论文笔记:GRLSTM: Trajectory Similarity Computation with Graph-Based Residual LSTM 2023 AAAI

    1 intro 1 1 背景 轨迹相似度 早期的度量采用成对匹配并依赖动态规划来计算最优对齐 DTW LCSS EDR 时间复杂度为 n是轨迹的平均长度 gt 对于大规模的轨迹数据并不是理想的选择 gt 会受到噪点的干扰 导致最终准确度下降
  • 微信小程序-在console中输出data中的数据

    getCurrentPages 1 data
  • 将Vue工程打包为Electron:vue-cli-plugin-electron-builder

    介绍 vue cli plugin electron builder 插件的作用是将一个Vue工程打包为Electron程序 官网 https nklayman github io vue cli plugin electron build
  • 动态规划---01背包问题

    问题背景 有N件物品和 个最多能背重量为W 的背包 第i件物品的重量是weight i 价值是value i 每件物品只能 次 求解将哪些物品装 背包 所得物品价值总和最 二维dp分析 1 确定dp dp table 数组及其下标的含义 d
  • 编译时The method is undefined for the type 报错

    问题描述 项目使用 1 jdk1 8 2 maven管理引入很多第三方jar包依赖其中xml apis jar文件中自带了2002年的org w3c dom的jar文件 该jar文件中的Node接口没有getTextContent 使用 o
  • redhat 文件服务器,几个重要的RedHat Linux内核文件详细介绍

    在网络中 不少服务器采用的是Linux系统 为了进一步提高服务器的性能 可能需要根据特定的硬件及需求重新编译Linux内核 编译Linux内核 需要根据规定的步骤进行 编译内核过程中涉及到几个重要的文件 比如对于RedHat Linux 在