| Both sides previous revision Previous revision Next revision | Previous revision |
| docs:techref:preinit_mount [2018/04/13 21:11] – [Preinit] jeff | docs:techref:preinit_mount [2024/09/06 11:49] (current) – Add missing initramfs tag info feckert |
|---|
| |
| - boot loader loads kernel | - boot loader loads kernel |
| - kernel loads whilst scaning the mtd partition //rootfs// for a valid superblock for mounting the SquashFS partition (which contains /etc). More info at [[docs:techref:filesystems#technical.details]] | - kernel loads whilst scanning the mtd partition //rootfs// for a valid superblock for mounting the SquashFS partition (which contains /etc). More info at [[docs:techref:filesystems#technical.details]] |
| - kernel calls ''/etc/preinit'' (the kernel considers this to be the ''init'' (or root) process | - <del>kernel calls ''/etc/preinit'' (the kernel considers this to be the ''init'' (or root) process</del> ''/sbin/init'' now the init process, which in turn launches ''/sbin/procd -h /etc/hotplug-preinit.json'' (a.k.a., "plugd") followed by ''/bin/sh /etc/preinit''. Each is launched via ''fork'' and ''execvp'' and managed by the uloop library in libubox. |
| - ''/etc/preinit'' prepares system for multiuser mode | - ''/etc/preinit'' prepares system for multiuser mode |
| - ''/etc/preinit'' ''exec''s ''/sbin/init'' which becomes the ''init'' (or root) process and launches multiuser | - ''/etc/preinit'' ''exec''s ''/sbin/init'' which becomes the ''init'' (or root) process and launches multiuser |
| |
| ====== Overview ====== | ====== Overview ====== |
| | The following preinit scripts are available in the OpenWrt master branches for base and packages feed (Status September 2024) |
| | | repo | packages | target | subtarget | file-repo | file-target | hook | info | |
| | | packages | openssh | all | all | net/openssh/files/sshd.failsafe | /lib/preinit/99_10_failsafe_sshd | failsafe | | |
| | | packages | btrfs-progs | all | all | utils/btrfs-progs/files/btrfs-scan.init | /lib/preinit/85_btrfs_scan | preinit_main | INITRAMFS check 'NO' | |
| | | packages | lvm2 | all | all | utils/lvm2/files/lvm2.preinit | /lib/preinit/80_lvm2 | preinit_main | INITRAMFS check 'NO' | |
| | | base | dropbear | all | all | package/network/services/dropbear/files/dropbear.failsafe | /lib/preinit/99_10_failsafe_dropbear | failsafe | | |
| | | base | zyxel-bootconfig | all | all | package/utils/zyxel-bootconfig/files/95_apply_bootconfig | /lib/preinit/95_apply_bootconfig | preinit_main | INITRAMFS check 'YES' | |
| | | base | linux | imx | cortexa53 | target/linux/imx/cortexa53/base-files/lib/preinit/79_move_config | /lib/preinit/79_move_config | preinit_mount_root | | |
| | | base | linux | imx | cortexa7 | target/linux/imx/cortexa7/base-files/lib/preinit/79_move_config | /lib/preinit/79_move_config | preinit_mount_root | | |
| | | base | linux | imx | cortexa9 | target/linux/imx/cortexa9/base-files/lib/preinit/79_move_config | /lib/preinit/79_move_config | preinit_mount_root | | |
| | | base | linux | rockchip | armv8 | target/linux/rockchip/armv8/base-files/lib/preinit/79_move_config | /lib/preinit/79_move_config | preinit_mount_root | | |
| | | base | linux | omap | | target/linux/omap/base-files/lib/preinit/79_move_config | /lib/preinit/79_move_config | preinit_mount_root | | |
| | | base | linux | qoriq | | target/linux/qoriq/base-files/lib/preinit/79_move_config | /lib/preinit/79_move_config | preinit_mount_root | | |
| | | base | linux | sifiveu | | target/linux/sifiveu/base-files/lib/preinit/79_move_config | /lib/preinit/79_move_config | preinit_mount_root | | |
| | | base | linux | tegra | | target/linux/tegra/base-files/lib/preinit/79_move_config | /lib/preinit/79_move_config | preinit_mount_root | | |
| | | base | linux | sunxi | | target/linux/sunxi/base-files/lib/preinit/79_move_config | /lib/preinit/79_move_config | preinit_mount_root | | |
| | | base | base-files | all | all | package/base-files/files/lib/preinit/02_default_set_state | /lib/preinit/02_default_set_state | preinit_main | | |
| | | base | base-files | all | all | package/base-files/files/lib/preinit/02_sysinfo | /lib/preinit/02_sysinfo | preinit_main | | |
| | | base | base-files | all | all | package/base-files/files/lib/preinit/10_indicate_failsafe | /lib/preinit/10_indicate_failsafe | failsafe | | |
| | | base | base-files | all | all | package/base-files/files/lib/preinit/10_indicate_preinit | /lib/preinit/10_indicate_preinit | preinit_main | | |
| | | base | base-files | all | all | package/base-files/files/lib/preinit/30_failsafe_wait | /lib/preinit/30_failsafe_wait | preinit_main | | |
| | | base | base-files | all | all | package/base-files/files/lib/preinit/40_run_failsafe_hook | /lib/preinit/40_run_failsafe_hook | preinit_main | | |
| | | base | base-files | all | all | package/base-files/files/lib/preinit/50_indicate_regular_preinit | /lib/preinit/50_indicate_regular_preinit | preinit_main | | |
| | | base | base-files | all | all | package/base-files/files/lib/preinit/70_initramfs_test | /lib/preinit/70_initramfs_test | preinit_main | | |
| | | base | base-files | all | all | package/base-files/files/lib/preinit/80_mount_root | /lib/preinit/80_mount_root | preinit_main | INITRAMFS check 'YES' | |
| | | base | base-files | all | all | package/base-files/files/lib/preinit/99_10_failsafe_login | /lib/preinit/99_10_failsafe_login | failsafe | | |
| | | base | base-files | all | all | package/base-files/files/lib/preinit/99_10_run_init | /lib/preinit/99_10_run_init | preinit_main | INITRAMFS check 'NO' | |
| | | base | linux | bcm47xx | | target/linux/bcm47xx/base-files/lib/preinit/01_sysinfo | /lib/preinit/01_sysinfo | preinit_main | | |
| | | base | linux | lantiq | xway_legacy | target/linux/lantiq/xway_legacy/base-files/lib/preinit/05_set_preinit_iface_lantiq | /lib/preinit/05_set_preinit_iface_lantiq | preinit_main | | |
| | | base | linux | lantiq | xway | target/linux/lantiq/xway/base-files/lib/preinit/05_set_preinit_iface_lantiq | /lib/preinit/05_set_preinit_iface_lantiq | preinit_main | | |
| | | base | linux | lanitq | ase | target/linux/lantiq/ase/base-files/lib/preinit/05_set_preinit_iface_lantiq | /lib/preinit/05_set_preinit_iface_lantiq | preinit_main | | |
| | | base | linux | armsr | | target/linux/armsr/base-files/lib/preinit/01_sysinfo_acpi | /lib/preinit/01_sysinfo_acpi | preinit_main | | |
| | | base | linux | armsr | | target/linux/armsr/base-files/lib/preinit/79_move_config | /lib/preinit/79_move_config | preinit_mount_root | | |
| | | base | linux | x86 | | target/linux/x86/base-files/lib/preinit/02_load_x86_ucode | /lib/preinit/02_load_x86_ucode | preinit_main | | |
| | | base | linux | x86 | | target/linux/x86/base-files/lib/preinit/15_essential_fs_x86 | /lib/preinit/15_essential_fs_x86 | ? | | |
| | | base | linux | x86 | | target/linux/x86/base-files/lib/preinit/20_check_iso | /lib/preinit/20_check_iso | preinit_mount_root | | |
| | | base | linux | x86 | | target/linux/x86/base-files/lib/preinit/79_move_config | /lib/preinit/79_move_config | preinit_mount_root | | |
| | | base | linux | x86 | | target/linux/x86/generic/base-files/lib/preinit/45_mount_xenfs | /lib/preinit/45_mount_xenfs | preinit_mount_root | | |
| | | base | linux | x86 | 64 | target/linux/x86/64/base-files/lib/preinit/45_mount_xenfs | /lib/preinit/45_mount_xenfs | preinit_mount_root | | |
| | | base | linux | bcm27xx | | target/linux/bcm27xx/base-files/lib/preinit/05_set_preinit_iface_brcm2708 | /lib/preinit/05_set_preinit_iface_brcm2708 | preinit_main | | |
| | | base | linux | bcm27xx | | target/linux/bcm27xx/base-files/lib/preinit/79_move_config | /lib/preinit/79_move_config | preinit_mount_root | | |
| | | base | linux | bcm27xx | | target/linux/bcm27xx/base-files/lib/preinit/81_set_root_part | /lib/preinit/81_set_root_part | preinit_main | INITRAMFS check 'YES' | |
| | | base | linux | mediatek | | target/linux/mediatek/base-files/lib/preinit/05_set_preinit_iface | /lib/preinit/05_set_preinit_iface | preinit_main | | |
| | | base | linux | mediatek | | target/linux/mediatek/base-files/lib/preinit/06_set_rps_sock_flow | /lib/preinit/06_set_rps_sock_flow | preinit_main | | |
| | | base | linux | mediatek | | target/linux/mediatek/base-files/lib/preinit/07_trigger_fip_scrubbing | /lib/preinit/07_trigger_fip_scrubbing | preinit_main | | |
| | | base | linux | mediatek | mt7623 | target/linux/mediatek/mt7623/base-files/lib/preinit/07_set_iface_mac | /lib/preinit/07_set_iface_mac | preinit_main | | |
| | | base | linux | mediatek | mt7623 | target/linux/mediatek/mt7623/base-files/lib/preinit/79_move_config | /lib/preinit/79_move_config | preinit_mount_root | | |
| | | base | linux | mediatek | filogic | target/linux/mediatek/filogic/base-files/lib/preinit/04_set_netdev_label | /lib/preinit/04_set_netdev_label | preinit_main | | |
| | | base | linux | mediatek | filogic | target/linux/mediatek/filogic/base-files/lib/preinit/05_extract_factory_data.sh | /lib/preinit/05_extract_factory_data.sh | preinit_main | | |
| | | base | linux | mediatek | filogic | target/linux/mediatek/filogic/base-files/lib/preinit/09_mount_cfg_part | /lib/preinit/09_mount_cfg_part | preinit_main | | |
| | | base | linux | mediatek | filogic | target/linux/mediatek/filogic/base-files/lib/preinit/10_fix_eth_mac.sh | /lib/preinit/10_fix_eth_mac.sh | preinit_main | | |
| | | base | linux | mediatek | filogic | target/linux/mediatek/filogic/base-files/lib/preinit/75_rootfs_prepare | /lib/preinit/75_rootfs_prepare | preinit_main | INITRAMFS check 'NO' | |
| | | base | linux | apm821xx | | target/linux/apm821xx/base-files/lib/preinit/05_set_preinit_iface_apm821xx | /lib/preinit/05_set_preinit_iface_apm821xx | preinit_main | | |
| | | base | linux | apm821xx | | target/linux/apm821xx/base-files/lib/preinit/05_set_iface_mac_apm821xx | /lib/preinit/05_set_iface_mac_apm821xx | preinit_main | | |
| | | base | linux | apm821xx | | target/linux/apm821xx/base-files/lib/preinit/79_move_config | /lib/preinit/79_move_config | preinit_mount_root | | |
| | | base | linux | ixp4xx | | target/linux/ixp4xx/base-files/lib/preinit/05_set_ether_mac_ixp4xx | /lib/preinit/05_set_ether_mac_ixp4xx | preinit_main | | |
| | | base | linux | kirkwood | | target/linux/kirkwood/base-files/lib/preinit/07_set_iface_mac | /lib/preinit/07_set_iface_mac | preinit_main | | |
| | | base | linux | mvebu | | target/linux/mvebu/base-files/lib/preinit/79_move_config | /lib/preinit/79_move_config | preinit_mount_root | | |
| | | base | linux | mvebu | cortexa53 | target/linux/mvebu/cortexa53/base-files/lib/preinit/82_uDPU | /lib/preinit/82_uDPU | preinit_main | INITRAMFS check 'NO' | |
| | | base | linux | mvebu | cortexa9 | target/linux/mvebu/cortexa9/base-files/lib/preinit/81_linksys_syscfg | /lib/preinit/81_linksys_syscfg | preinit_main | INITRAMFS check 'NO' | |
| | | base | linux | ipq806x | | target/linux/ipq806x/base-files/lib/preinit/04_reorder_eth | /lib/preinit/04_reorder_eth | preinit_main | | |
| | | base | linux | ath79 | generic | target/linux/ath79/generic/base-files/lib/preinit/02_sysinfo_fixup | /lib/preinit/02_sysinfo_fixup | preinit_main | | |
| | | base | linux | ath79 | generic | target/linux/ath79/generic/base-files/lib/preinit/10_fix_eth_mac.sh | /lib/preinit/10_fix_eth_mac.sh | preinit_main | | |
| | | base | linux | ath79 | nand | target/linux/ath79/nand/base-files/lib/preinit/10_fix_eth_mac.sh | /lib/preinit/10_fix_eth_mac.sh | preinit_main | | |
| | | base | linux | bcm4908 | | target/linux/bcm4908/base-files/lib/preinit/75_rootfs_prepare | /lib/preinit/75_rootfs_prepare | preinit_main | INITRAMFS check 'NO' | |
| | | base | linux | gemini | | target/linux/gemini/base-files/lib/preinit/05_set_ether_mac_gemini | /lib/preinit/05_set_ether_mac_gemini | preinit_main | | |
| | | base | linux | loongarch64 | | target/linux/loongarch64/base-files/lib/preinit/01_sysinfo_acpi | /lib/preinit/01_sysinfo_acpi | preinit_main | | |
| | | base | linux | loongarch64 | | target/linux/loongarch64/base-files/lib/preinit/79_move_config | /lib/preinit/79_move_config | preinit_mount_root | | |
| | | base | linux | mpc85xx | | target/linux/mpc85xx/base-files/lib/preinit/05_set_preinit_iface_mpc85xx | /lib/preinit/05_set_preinit_iface_mpc85xx | preinit_main | | |
| | | base | linux | mpc85xx | | target/linux/mpc85xx/base-files/lib/preinit/10_fix_eth_mac.sh | /lib/preinit/10_fix_eth_mac.sh | preinit_main | | |
| | | base | linux | layerscape | | target/linux/layerscape/base-files/lib/preinit/02_sysinfo_fixup | /lib/preinit/02_sysinfo_fixup | preinit_main | | |
| | | base | linux | layerscape | | target/linux/layerscape/base-files/lib/preinit/79_move_config | /lib/preinit/79_move_config | preinit_mount_root | | |
| | | base | linux | ramips | mt7621 | target/linux/ramips/mt7621/base-files/lib/preinit/04_set_netdev_label | /lib/preinit/04_set_netdev_label | preinit_main | | |
| | | base | linux | ramips | rt305x | target/linux/ramips/rt305x/base-files/lib/preinit/04_handle_checksumming | /lib/preinit/04_handle_checksumming | preinit_main | | |
| | | base | linux | ramips | rt3883 | target/linux/ramips/rt3883/base-files/lib/preinit/04_handle_checksumming | /lib/preinit/04_handle_checksumming | preinit_main | | |
| | | base | linux | ipq40xx | | target/linux/ipq40xx/base-files/lib/preinit/05_set_iface_mac_ipq40xx.sh | /lib/preinit/05_set_iface_mac_ipq40xx.sh | preinit_main | | |
| | | base | linux | octeon | | target/linux/octeon/base-files/lib/preinit/01_sysinfo | /lib/preinit/01_sysinfo | preinit_main | | |
| | | base | linux | octeon | | target/linux/octeon/base-files/lib/preinit/79_move_config | /lib/preinit/79_move_config | preinit_mount_root | | |
| | |
| | |
| | |
| |
| ===== Preinit ===== | ===== Preinit ===== |
| |
| Preinit brings the system from raw kernel to ready for multiuser. To do so, as of April, 2018, | Preinit brings the system from raw kernel to ready for multiuser. To do so, as of April, 2018, |
| ''/etc/preinit'' performs the following tasks: | ''/etc/preinit'' (ar71xx, Archer C7) performs the following tasks: |
| |
| - Checks to see if ''$PREINIT'' is empty; if so ''exec /sbin/init'' and skip the rest | - Checks to see if ''$PREINIT'' is empty; if so ''exec /sbin/init'' and skip the rest |
| |
| |
| * preinit_main | * **preinit_main** |
| - //do_ar71xx// | - //do_ar71xx// |
| - define_default_set_state | - define_default_set_state |
| - pi_indicate_preinit | - pi_indicate_preinit |
| - failsafe_wait | - failsafe_wait |
| - run_failsafe_hook | - run_failsafe_hook |
| * failsafe | * **failsafe** (if "$pi_preinit_no_failsafe" != "y" and "$FAILSAFE" = "true") |
| - indicate_failsafe | - indicate_failsafe |
| - failsafe_netlogin | - failsafe_netlogin |
| - This is only reached if no other step succeeds; attempt to mount ''/dev/root'' (e.g. squashfs/all_jffs2) as root filesystem. | - This is only reached if no other step succeeds; attempt to mount ''/dev/root'' (e.g. squashfs/all_jffs2) as root filesystem. |
| |
| ** * ** ''/overlay'' was previously named ''/jffs2'' | ** * ** ''/overlay'' was previously named ''/jffs2''.\\ |
| | ** * ** NOTE: If volatile files (e.g. a config) were preserved across firmware update via ''sysupgrade'', step 3 is skipped. Instead, preinit_main hangs while the rootfs_data partition is formatted and the jffs2 overlay is mounted. Hypothetically, this is fatal on systems with weak cpu and exceptionally large rootfs_data partitions. For more information [[https://forum.openwrt.org/t/error-in-preinit-documentation-regarding-overlays/60188/4|consult this forum post]]. |
| |
| ===== First Boot ===== | ===== First Boot ===== |