為什麼 genkernel 決定在我的 initramfs 中只包含 4 個模組?
/lib/firmware
我的initramfs-5.*.img
只有 4 個模組:modules/5.10.12-gentoo/kernel/ ├── drivers │ └── net │ ├── macvlan.ko.xz │ └── vxlan.ko.xz └── net ├── ipv4 │ └── udp_tunnel.ko.xz └── ipv6 └── ip6_udp_tunnel.ko.xz 5 directories, 4 files
但
/lib/firmware
在 rootfs 上有 172 個模組:/lib/modules/5.10.12-gentoo/kernel/ [162/352] ├── drivers │ ├── acpi │ │ └── dptf │ │ └── dptf_pch_fivr.ko.xz │ ├── base │ │ └── regmap │ │ └── regmap-mmio.ko.xz │ ├── char │ │ ├── agp │ │ │ └── intel-gtt.ko.xz │ │ └── tpm │ │ ├── tpm.ko.xz │ │ ├── tpm_atmel.ko.xz │ │ ├── tpm_crb.ko.xz │ │ ├── tpm_i2c_atmel.ko.xz │ │ ├── tpm_i2c_infineon.ko.xz │ │ ├── tpm_i2c_nuvoton.ko.xz │ │ ├── tpm_infineon.ko.xz │ │ ├── tpm_nsc.ko.xz │ │ ├── tpm_tis.ko.xz │ │ └── tpm_tis_core.ko.xz │ ├── crypto │ │ └── qat │ │ ├── qat_c3xxx │ │ │ └── qat_c3xxx.ko.xz │ │ ├── qat_c3xxxvf │ │ │ └── qat_c3xxxvf.ko.xz │ │ ├── qat_c62x │ │ │ └── qat_c62x.ko.xz │ │ ├── qat_c62xvf │ │ │ └── qat_c62xvf.ko.xz │ │ ├── qat_common │ │ │ └── intel_qat.ko.xz │ │ ├── qat_dh895xcc │ │ │ └── qat_dh895xcc.ko.xz │ │ └── qat_dh895xccvf │ │ └── qat_dh895xccvf.ko.xz │ ├── gpu │ │ └── drm │ │ ├── i915 │ │ │ └── i915.ko.xz │ │ ├── nouveau │ │ │ └── nouveau.ko.xz │ │ └── ttm │ │ └── ttm.ko.xz │ ├── hwmon │ │ ├── coretemp.ko.xz │ │ ├── drivetemp.ko.xz │ │ ├── i5500_temp.ko.xz │ │ ├── max31730.ko.xz │ │ └── mr75203.ko.xz │ ├── net │ │ ├── bareudp.ko.xz │ │ ├── ipvlan │ │ │ ├── ipvlan.ko.xz │ │ │ └── ipvtap.ko.xz │ │ ├── macvlan.ko.xz │ │ ├── macvtap.ko.xz │ │ ├── nlmon.ko.xz [103/352] │ │ ├── tap.ko.xz │ │ ├── tun.ko.xz │ │ ├── veth.ko.xz │ │ ├── vxlan.ko.xz │ │ ├── wireguard │ │ │ └── wireguard.ko.xz │ │ └── wireless │ │ └── intel │ │ └── iwlwifi │ │ ├── dvm │ │ │ └── iwldvm.ko.xz │ │ ├── iwlwifi.ko.xz │ │ └── mvm │ │ └── iwlmvm.ko.xz │ ├── usb │ │ └── misc │ │ └── apple-mfi-fastcharge.ko.xz │ └── watchdog │ ├── i6300esb.ko.xz │ ├── iTCO_vendor_support.ko.xz │ ├── iTCO_wdt.ko.xz │ ├── softdog.ko.xz │ └── watchdog.ko.xz ├── lib │ ├── ts_bm.ko.xz │ ├── ts_fsm.ko.xz │ └── ts_kmp.ko.xz ├── net │ ├── bpfilter │ │ └── bpfilter.ko.xz │ ├── ipv4 │ │ ├── netfilter │ │ │ ├── arp_tables.ko.xz │ │ │ ├── arpt_mangle.ko.xz │ │ │ ├── arptable_filter.ko.xz │ │ │ ├── ip_tables.ko.xz │ │ │ ├── ipt_REJECT.ko.xz │ │ │ ├── ipt_rpfilter.ko.xz │ │ │ ├── iptable_filter.ko.xz │ │ │ ├── iptable_mangle.ko.xz │ │ │ ├── iptable_nat.ko.xz │ │ │ ├── iptable_raw.ko.xz │ │ │ ├── nf_defrag_ipv4.ko.xz │ │ │ ├── nf_dup_ipv4.ko.xz │ │ │ ├── nf_log_arp.ko.xz │ │ │ ├── nf_log_ipv4.ko.xz │ │ │ ├── nf_reject_ipv4.ko.xz │ │ │ ├── nf_socket_ipv4.ko.xz │ │ │ ├── nf_tproxy_ipv4.ko.xz │ │ │ ├── nft_dup_ipv4.ko.xz │ │ │ ├── nft_fib_ipv4.ko.xz │ │ │ └── nft_reject_ipv4.ko.xz │ │ └── udp_tunnel.ko.xz │ ├── ipv6 │ │ ├── ip6_udp_tunnel.ko.xz │ │ └── netfilter │ │ ├── nf_defrag_ipv6.ko.xz │ │ ├── nf_reject_ipv6.ko.xz │ │ ├── nf_socket_ipv6.ko.xz [44/352] │ │ ├── nf_tproxy_ipv6.ko.xz │ │ └── nft_reject_ipv6.ko.xz │ └── netfilter │ ├── nf_conntrack.ko.xz │ ├── nf_conntrack_netlink.ko.xz │ ├── nf_dup_netdev.ko.xz │ ├── nf_flow_table.ko.xz │ ├── nf_flow_table_inet.ko.xz │ ├── nf_log_common.ko.xz │ ├── nf_log_netdev.ko.xz │ ├── nf_nat.ko.xz │ ├── nf_tables.ko.xz │ ├── nfnetlink_acct.ko.xz │ ├── nfnetlink_log.ko.xz │ ├── nfnetlink_osf.ko.xz │ ├── nfnetlink_queue.ko.xz │ ├── nft_chain_nat.ko.xz │ ├── nft_compat.ko.xz │ ├── nft_counter.ko.xz │ ├── nft_ct.ko.xz │ ├── nft_dup_netdev.ko.xz │ ├── nft_fib.ko.xz │ ├── nft_flow_offload.ko.xz │ ├── nft_fwd_netdev.ko.xz │ ├── nft_hash.ko.xz │ ├── nft_log.ko.xz │ ├── nft_masq.ko.xz │ ├── nft_nat.ko.xz │ ├── nft_numgen.ko.xz │ ├── nft_objref.ko.xz │ ├── nft_osf.ko.xz │ ├── nft_queue.ko.xz │ ├── nft_redir.ko.xz │ ├── nft_reject.ko.xz │ ├── nft_reject_inet.ko.xz │ ├── nft_socket.ko.xz │ ├── nft_tproxy.ko.xz │ ├── nft_tunnel.ko.xz │ ├── x_tables.ko.xz │ ├── xt_CHECKSUM.ko.xz │ ├── xt_CLASSIFY.ko.xz │ ├── xt_CT.ko.xz │ ├── xt_HL.ko.xz │ ├── xt_HMARK.ko.xz │ ├── xt_IDLETIMER.ko.xz │ ├── xt_LOG.ko.xz │ ├── xt_MASQUERADE.ko.xz │ ├── xt_NETMAP.ko.xz │ ├── xt_NFLOG.ko.xz │ ├── xt_NFQUEUE.ko.xz │ ├── xt_REDIRECT.ko.xz │ ├── xt_TCPMSS.ko.xz │ ├── xt_TCPOPTSTRIP.ko.xz │ ├── xt_TEE.ko.xz │ ├── xt_TPROXY.ko.xz │ ├── xt_TRACE.ko.xz │ ├── xt_addrtype.ko.xz │ ├── xt_bpf.ko.xz │ ├── xt_cgroup.ko.xz │ ├── xt_comment.ko.xz │ ├── xt_connlabel.ko.xz │ ├── xt_connmark.ko.xz │ ├── xt_conntrack.ko.xz │ ├── xt_devgroup.ko.xz │ ├── xt_hashlimit.ko.xz │ ├── xt_helper.ko.xz │ ├── xt_hl.ko.xz │ ├── xt_iprange.ko.xz │ ├── xt_length.ko.xz │ ├── xt_limit.ko.xz │ ├── xt_mac.ko.xz │ ├── xt_mark.ko.xz │ ├── xt_multiport.ko.xz │ ├── xt_nat.ko.xz │ ├── xt_nfacct.ko.xz │ ├── xt_osf.ko.xz │ ├── xt_owner.ko.xz │ ├── xt_pkttype.ko.xz │ ├── xt_recent.ko.xz │ ├── xt_socket.ko.xz │ ├── xt_state.ko.xz │ ├── xt_statistic.ko.xz │ ├── xt_string.ko.xz │ ├── xt_tcpudp.ko.xz │ └── xt_u32.ko.xz └── sound └── pci └── hda ├── snd-hda-codec-analog.ko.xz ├── snd-hda-codec-ca0110.ko.xz ├── snd-hda-codec-ca0132.ko.xz ├── snd-hda-codec-cirrus.ko.xz ├── snd-hda-codec-cmedia.ko.xz ├── snd-hda-codec-conexant.ko.xz ├── snd-hda-codec-hdmi.ko.xz ├── snd-hda-codec-idt.ko.xz ├── snd-hda-codec-realtek.ko.xz ├── snd-hda-codec-si3054.ko.xz └── snd-hda-codec-via.ko.xz 45 directories, 172 files
為什麼
genkernel
決定只包括其中的 4 個,為什麼這 4 個被選入initramfs
?
我不知道它決定只使用這些模組的方式。但是建構 initramfs 的目標是創建最小尺寸的東西。這樣,它可以更快地從磁碟載入,從而減少啟動時間。initramfs 需要的唯一模組是那些可以讓它掛載你的根分區的模組,它可以從那裡載入任何其他模組。其他任何內容都應省略。
使 initramfs 盡可能小對引導時間特別重要,因為整個映像將從磁碟載入。沒有像延遲載入
mmap()
ed 文件那樣的優化——引導載入程序/核心只是盲目地載入整個內容。當然,更大的 initramfs 文件也可以在配備 SSD 的現代系統上快速載入。所以到那時它就變成了浪費記憶體資源的問題(因為圖像用它的內容填充了文件系統記憶體)。我希望在成功啟動後,從initramfs載入的文件被清除,允許稍後回收記憶體,所以記憶體只是暫時浪費。
genkernel
有一堆不同的選項來添加/刪除不同的功能。例如,如果您的根在 LVM2 上,您將需要啟用該功能,它將包括掛載 LVM2 所需的模組和使用者空間實用程序。並且可能會檢測並包含根分區使用的文件系統的任何模組。我不確定為什麼包含五個模組。我認為它們在正常環境中是不必要的。通常,initramfs 將用於掛載本地設備,根本不需要初始化網路。我查了一下
macvlan
,它看起來可能被來賓核心用於虛擬化環境——如果你的核心正在啟動並執行網路掛載之類的操作以獲取其根設備,那可能是有道理的。某種網路引導可能是 initramfs 的一個功能,但我希望它是可選的並且能夠被禁用。