initramfs原理探讨-为什么需要initramfs

initramfs的几个发展阶段

启动盘经过发展阶段:

|-- ramdisk
|    `-- initrd (2.4内核)           
|-- ramfs
|    |---- initramfs (2.6内核,沿用至今)
|     `--- tmpfs      

20191012_191038_47

20191012_192321_72

什么是ramdisk(内存磁盘)

什么是initrd(基于ramdisk的临时文件系统)

什么是ramfs(基于内存缓存的文件系统)

什么是initramfs(基于ramfs的临时文件系统)

什么是initrd

20191012_192858_69

20191012_193008_57

什么是tmpfs

20191012_193701_98

20191012_193803_77

什么是rootfs?

  .
  ├── bin
  ├── boot
  ├── cdrom
  ├── data
  ├── dev
  ├── etc
  ├── home
  ├── initrd.img -> boot/initrd.img-3.13.0-107-generic
  ├── lib
  ├── lib32
  ├── lib64
  ├── libx32
  ├── lost+found
  ├── media
  ├── mnt
  ├── opt
  ├── proc
  ├── root
  ├── run
  ├── sbin
  ├── srv
  ├── sys
  ├── tmp
  ├── usr
  ├── var
  └── vmlinuz -> boot/vmlinuz-4.2.0-27-generic
  24 directories, 5 files

20190914_152924_50

挂载rootfs

20190914_155525_22

20190914_155635_66

20190914_155858_12

挂载rootfs的过程是由 do_kern_mount 来完成的,该函数工作包含以下几个方面:

20190914_160106_26

书上还提到了名称空间namespace

20190914_160143_02

解压initramfs到rootfs

20190914_160347_69

20190914_160519_89

20190914_160637_48

20190914_160738_22

20190914_160907_46

20190914_161045_99

20191012_194522_28

挂载并切换到真正的根目录

20190914_161620_22

20190914_162238_10