/boot 下的这些文件是什么以及它们有何不同?

/boot 下的这些文件是什么以及它们有何不同?

在我的系统(ubunt 16.04)中,当我输入时uname -r,我得到

4.15.0-33-generic

当我这样做时ls /boot/*4.15.0-33* -l,我得到

-rw-r--r-- 1 root root  1537455  8월 16 06:00 /boot/abi-4.15.0-33-generic
-rw-r--r-- 1 root root   216913  8월 16 06:00 /boot/config-4.15.0-33-generic
-rw-r--r-- 1 root root 53435246  8월 25 06:29 /boot/initrd.img-4.15.0-33-generic
-rw-r--r-- 1 root root        0  8월 16 06:00 /boot/retpoline-4.15.0-33-generic
-rw------- 1 root root  4041375  8월 16 06:00 /boot/System.map-4.15.0-33-generic
-rw------- 1 root root  8108600  8월 17 03:58 /boot/vmlinuz-4.15.0-33-generic

我知道 initramfs 是一种在启动过程中临时使用的简单文件系统(实际上,最终的文件系统被挂载了?)。但是这些文件各自有什么用呢?只要能简单解释一下就好了。

答案1

以下是根据收集到的信息进行的简要解释,请注意,我并不精通这一领域[警告令人讨厌的东西]:

  1. /boot/System.map-4.15.0-33-通用

    • 包含内核的位置。
  2. 启动/vmlinuz-4.15.0-33-通用

    • 通常是内核或者到内核的符号链接。
  3. /boot/config-4.15.0-33-通用

    • 已安装的内核配置。此文件在其他系统或设备模块上编译内核时非常有用。以下是该文件内容的一个小示例。

       CONFIG_X86=y
       CONFIG_MICROCODE=m
       CONFIG_X86_MSR=m
       CONFIG_MATH_EMULATION=y
       CONFIG_MTRR=y
       CONFIG_MODULES=y
       CONFIG_MODVERSIONS=y
       CONFIG_SCSI_DEBUG=m
       CONFIG_I2O=m
       CONFIG_ARCNET_ETH=y
       CONFIG_FMV18X=m
       CONFIG_HPLAN_PLUS=m
       CONFIG_ETH16I=m
       CONFIG_NE2000=m
       CONFIG_HISAX_HFC_PCI=y
       CONFIG_ISDN_DRV_AVMB1_C4=m
       CONFIG_USB_RIO500=m
       CONFIG_QUOTA=y
       CONFIG_AUTOFS_FS=m
       CONFIG_ADFS_FS=m
       CONFIG_AFFS_FS=m
       CONFIG_HFS_FS=m
       CONFIG_FAT_FS=y
       CONFIG_MSDOS_FS=y
       CONFIG_UMSDOS_FS=m
       CONFIG_FBCON_VGA=m
       CONFIG_FONT_8x8=y
       CONFIG_FONT_8x16=y
       CONFIG_SOUND=m
       CONFIG_SOUND_CMPCI=m
       CONFIG_AEDSP16=m
      
  4. /boot/abi-4.15.0-33-通用

    • 一般的:在计算机软件中,应用程序二进制接口 (ABI) 是两个二进制程序模块之间的接口;通常,其中一个模块是库或操作系统工具,另一个模块是用户正在运行的程序。

      ABI 定义了如何以机器代码访问数据结构或计算例程,机器代码是一种低级、依赖于硬件的格式;

    • Linux 特定:ABI 是一组约定,允许链接器将单独编译的模块组合成一个单元而无需重新编译,例如调用约定、机器接口和操作系统接口。除其他外,ABI 还定义这些单元之间的二进制接口。... 符合 ABI 的好处是它允许链接由不同编译器编译的目标文件。

    • 我的理解是它有助于程序、代码、库等之间的通信。[外行人的观点]

    • 看:https://softwareengineering.stackexchange.com/questions/97478/understanding-application-binary-interface-abi
    • https://stackoverflow.com/questions/2171177/what-is-an-application-binary-interface-abi
  5. /boot/retpoline-4.15.0-33-通用

    • retpoline 是一种返回蹦床,它使用永不执行的无限循环来防止 CPU 推测间接跳转的目标。
  6. /boot/initrd.img-4.15.0-33-通用

    • initrd 映像包含支持 Linux 系统第二阶段启动所需的可执行文件和系统文件。
  7. initramfs-4.15.0-33-通用(?)

    • initramfs 是您在普通根文件系统上可以找到的一组完整目录。它被捆绑到单个 cpio 存档中,并使用几种压缩算法之一进行压缩。在启动时,引导加载程序将内核和 initramfs 映像加载到内存中并启动内核

注意:对于78

  • 正如 Wikipedia 很好地描述的,initrd(初始 ramdisk)是一种在 Linux 内核启动过程中将临时文件系统加载到内存中的方案。initrd 和 initramfs 指的是实现此目的的方法略有不同。两者都通常用于在挂载真正的根文件系统之前做好准备,但有区别。

    Initrd 是固定大小的块设备,需要通过 ext2 等文件系统进行“格式化”。它默认位于 /dev/ram0 上,无法增大或缩短。

    另一方面,initramfs 是一个 cpio 档案,在启动时被简单地解压到 ramfs 内存中。该内存的大小是动态的,因此可以根据需要缩短或扩大。

    所以 initramfs 似乎更好,对吧?不一定。主要问题是它不支持 pivot_root。pivot_root 做什么?它基本上从 initrd '切换' 到新的根(从 CD/USB 安装的联合数据结构),但 initramfs 不知何故无法做到这一点。似乎存在一些循环引用,内核开发人员完全禁用了 initramfs 的 pivot_root。没有 pivot_root,我们就无法将当前根与新根转置。——来源- , 也可以看看

相关内容