내 모듈 에는 4개의 모듈만 /lib/firmware
있습니다 initramfs-5.*.img
.
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
?
답변1
이 모듈만 사용하기로 결정하는 방법을 모르겠습니다. 그러나 initramfs를 구축할 때의 목표는 최소 크기의 무언가를 생성하는 것입니다. 이렇게 하면 디스크에서 더 빠르게 로드되어 시작 시간이 단축됩니다. initramfs에 필요한 유일한 모듈은 다른 모듈을 로드할 수 있는 루트 파티션을 마운트할 수 있는 모듈입니다. 다른 것은 생략해야 합니다.
전체 이미지가 디스크에서 로드되므로 initramfs를 가능한 한 작게 유지하는 것이 부팅 시간에 특히 중요합니다. ed 파일 의 지연 로딩과 같은 최적화는 없습니다 mmap()
. 부트로더/커널은 단지 모든 것을 맹목적으로 로드합니다. 물론 SSD가 장착된 최신 시스템에서는 더 큰 initramfs 파일도 빠르게 로드할 수 있습니다. 따라서 이 시점에서 메모리 리소스를 낭비하는 문제가 됩니다(이미지가 파일 시스템 캐시를 해당 내용으로 채우기 때문에). 나는 성공적인 부팅 후에 initramfs에서 로드된 파일이 지워지고 나중에 메모리를 회수할 수 있게 되어 메모리가 일시적으로만 낭비될 것이라고 예상했습니다.
genkernel
다양한 기능을 추가/제거할 수 있는 다양한 옵션이 있습니다. 예를 들어 루트 디렉터리가 LVM2에 있는 경우 이 기능을 활성화해야 하며 여기에는 LVM2를 마운트하는 데 필요한 모듈과 사용자 공간 유틸리티가 포함됩니다. 그리고 루트 파티션에서 사용되는 파일 시스템의 모든 모듈이 감지되어 포함될 수 있습니다.
왜 5개의 모듈이 포함되어 있는지 잘 모르겠습니다. 일반적인 환경에서는 필요하지 않다고 생각합니다. 일반적으로 initramfs는 네트워크를 전혀 초기화할 필요 없이 로컬 장치를 마운트하는 데 사용됩니다. 찾아보니 macvlan
가상화된 환경에서 게스트 커널이 이를 사용할 수도 있는 것 같습니다. 커널이 부팅하고 루트 장치를 얻기 위해 네트워크 마운팅과 같은 작업을 수행하는 경우 이는 의미가 있을 수 있습니다. 어떤 종류의 네트워크 부팅은 initramfs의 기능일 수 있지만 선택 사항이고 비활성화할 수 있기를 바랍니다.