在我的系统(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
以下是根据收集到的信息进行的简要解释,请注意,我并不精通这一领域[警告令人讨厌的东西]:
/boot/System.map-4.15.0-33-通用
- 包含内核的位置。
启动/vmlinuz-4.15.0-33-通用
- 通常是内核或者到内核的符号链接。
/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
/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
/boot/retpoline-4.15.0-33-通用
- retpoline 是一种返回蹦床,它使用永不执行的无限循环来防止 CPU 推测间接跳转的目标。
/boot/initrd.img-4.15.0-33-通用
- initrd 映像包含支持 Linux 系统第二阶段启动所需的可执行文件和系统文件。
initramfs-4.15.0-33-通用(?)
- initramfs 是您在普通根文件系统上可以找到的一组完整目录。它被捆绑到单个 cpio 存档中,并使用几种压缩算法之一进行压缩。在启动时,引导加载程序将内核和 initramfs 映像加载到内存中并启动内核
注意:对于7
和8
:
正如 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,我们就无法将当前根与新根转置。——来源- , 也可以看看这。