DATAFS_MNT=
MODULES_MNT=
-MODULES_INITRD_MNT=/usr/lib/modules
+MODULES_INITRD_MNT=/lib/modules
IN_INITRD=0
IN_INITRAMFS=0
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()
{
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
fi
echo "Loading module: $module"
- /sbin/modprobe $module &
+ $modprobe $module &
done < $conf
done
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
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