From: Karol Lewandowski Date: Wed, 5 Feb 2025 11:59:27 +0000 (+0100) Subject: init: Add two-pass module loading X-Git-Tag: accepted/tizen/unified/20250305.160213~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2c31e93b5a077ec08904f098ed2930b447df0b60;p=platform%2Fcore%2Fsystem%2Finitrd.git init: Add two-pass module loading Try to load from modules partition first, then from hal partition. This scheme allows providing early modules with kernel image as well as vendor modules on /hal, which becomes default "/lib/modules" for the system, if it was provided. Change-Id: I918a06ed8cfe4a949c80878ef16532474588cf27 --- diff --git a/data/initrd-file.list b/data/initrd-file.list index 0988905..e402e1b 100644 --- a/data/initrd-file.list +++ b/data/initrd-file.list @@ -33,6 +33,7 @@ PROGS=" /usr/bin/xargs /usr/bin/mkdir /usr/bin/mount +/usr/bin/mountpoint /usr/bin/readlink /usr/bin/sleep /usr/bin/stat diff --git a/scripts/init.sh b/scripts/init.sh index cd948c3..a3504e2 100755 --- a/scripts/init.sh +++ b/scripts/init.sh @@ -13,7 +13,7 @@ ROOTFS_MNT= DATAFS_MNT= MODULES_MNT= -MODULES_INITRD_MNT=/usr/lib/modules +MODULES_INITRD_MNT=/lib/modules IN_INITRD=0 IN_INITRAMFS=0 @@ -386,9 +386,12 @@ function process_modulesfs function move_modulesfs { - if [ x$MODULES = "x" ]; then return; fi - - /bin/mount --move $MODULES_INITRD_MNT $MODULES_MNT + if [ "$HALFS_MNT" -a -d "$HALFS_MNT/lib/modules" ]; then + /bin/mountpoint -q $MODULES_INITRD_MNT && /bin/umount $MODULES_INITRD_MNT + /bin/mount --bind $HALFS_MNT/lib/modules $MODULES_MNT + else + /bin/mountpoint -q $MODULES_INITRD_MNT && /bin/mount --move $MODULES_INITRD_MNT $MODULES_MNT + fi } function process_userfs() @@ -442,7 +445,18 @@ function load_kernel_modules { echo "Load kernel modules" - for conf in $(compgen -G $MODULES_INITRD_MNT"/modules-load.d/*.conf") + modprobe="/sbin/modprobe" + if [ x$ROOTFS_MNT != x ] && mountpoint -q "$ROOTFS_MNT"; then + modprobe="$modprobe --dirname=$ROOTFS_MNT" + fi + + conffiles="" + for it in "$@"; do + conffiles="$conffiles $(compgen -G "${it}/modules-load.d/*.conf")" + modprobe="$modprobe --config=${it}/modprobe.d" + done + + for conf in $conffiles do echo "Read module conf: $conf" while read module junk @@ -454,7 +468,7 @@ function load_kernel_modules fi echo "Loading module: $module" - /sbin/modprobe $module & + $modprobe $module & done < $conf done @@ -539,7 +553,7 @@ print_boot_info wait_find_partitions process_modulesfs -load_kernel_modules +load_kernel_modules "$MODULES_INITRD_MNT" # 1st pass, try to load modules from modules.img check_network setup_nbd @@ -552,6 +566,8 @@ process_datafs process_halfs process_userfs move_modulesfs +load_kernel_modules "$MODULES_MNT" "$HALFS_MNT/etc" # 2nd pass, try to load modules from hal.img + write_resized_flag pivot_root