Переглянути джерело

Using kmod in initramfs instead of limited Busybox kernel module applets

Maxim Kammerer 11 роки тому
батько
коміт
3ab91e2c7b

+ 11 - 11
src/etc/portage/savedconfig/sys-apps/busybox

@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
 # Busybox version: 1.21.0
-# Sat Aug 23 17:39:55 2014
+# Mon Aug 25 19:04:12 2014
 #
 CONFIG_HAVE_DOT_CONFIG=y
 
@@ -492,16 +492,16 @@ CONFIG_FEATURE_DEFAULT_PASSWD_ALGO=""
 #
 # Linux Module Utilities
 #
-CONFIG_MODINFO=y
+# CONFIG_MODINFO is not set
 # CONFIG_MODPROBE_SMALL is not set
 # CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE is not set
 # CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED is not set
 # CONFIG_INSMOD is not set
 # CONFIG_RMMOD is not set
-CONFIG_LSMOD=y
-CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT=y
-CONFIG_MODPROBE=y
-CONFIG_FEATURE_MODPROBE_BLACKLIST=y
+# CONFIG_LSMOD is not set
+# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
+# CONFIG_MODPROBE is not set
+# CONFIG_FEATURE_MODPROBE_BLACKLIST is not set
 # CONFIG_DEPMOD is not set
 
 #
@@ -514,11 +514,11 @@ CONFIG_FEATURE_MODPROBE_BLACKLIST=y
 # CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
 # CONFIG_FEATURE_INSMOD_LOAD_MAP is not set
 # CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set
-CONFIG_FEATURE_CHECK_TAINTED_MODULE=y
-CONFIG_FEATURE_MODUTILS_ALIAS=y
-CONFIG_FEATURE_MODUTILS_SYMBOLS=y
-CONFIG_DEFAULT_MODULES_DIR="/lib/modules"
-CONFIG_DEFAULT_DEPMOD_FILE="modules.dep"
+# CONFIG_FEATURE_CHECK_TAINTED_MODULE is not set
+# CONFIG_FEATURE_MODUTILS_ALIAS is not set
+# CONFIG_FEATURE_MODUTILS_SYMBOLS is not set
+CONFIG_DEFAULT_MODULES_DIR=""
+CONFIG_DEFAULT_DEPMOD_FILE=""
 
 #
 # Linux System Utilities

+ 8 - 8
src/root/helpers/gen-initramfs

@@ -19,9 +19,7 @@ image=/usr/local/addons/initrd/initrd-x86.cpio
 for f in `awk '/^file\>/ { print $3 }' ${initramfs}`; do
     if [ application/x-sharedlib = "`file -bL --mime-type ${f}`" ]; then
         for lib in `ldd ${f} | grep -Eo '/[^[:blank:]]*'`; do
-            lib=`realpath ${lib}`
-            mkdir -p ${stagedir}${lib%/*}
-            cp -pdu ${lib} ${stagedir}${lib}
+            rsync -aR `realpath ${lib}` ${stagedir}
         done
     fi
 done
@@ -49,10 +47,9 @@ done | while read mod; do
 done | sed -n 's/^insmod //p' | sort -u | while read mod; do
     # Copy modules and compute their dependencies and map
     # (depmod will fail if not all dependencies are present)
-    mkdir -p     ${stagedir}${mod%/*}
-    cp -p ${mod} ${stagedir}${mod}
+    rsync -aR ${mod} ${stagedir}
 done
-cp /lib/modules/${kversion}/modules.{builtin,order} ${stagedir}/lib/modules/${kversion}
+rsync -aR /lib/modules/${kversion}/modules.{builtin,order} ${stagedir}
 depmod -b ${stagedir} -e -F ${mainobj}/System.map ${kversion}
 
 
@@ -60,11 +57,14 @@ depmod -b ${stagedir} -e -F ${mainobj}/System.map ${kversion}
 sed -n '/^[^#]/p' ${fwlst} | while read fw; do
     find /lib/firmware/${fw} ! -type d
 done | while read fw; do
-    mkdir -p    ${stagedir}${fw%/*}
-    cp -p ${fw} ${stagedir}${fw}
+    rsync -aR ${fw} ${stagedir}
 done
 
 
+# Prepare extra packages
+rsync -aR `qlist -eos sys-apps/kmod | sed -r '/share|include|pkgconfig|init\.d/d'` ${stagedir}
+
+
 # Build complete initramfs file list
 cp ${initramfs} ${stagebase}
 find ${stagedir} -mindepth 1 -type d \

+ 1 - 1
src/root/initrd/hotplug

@@ -5,5 +5,5 @@ exec </dev/null 1>/dev/console 2>&1
 
 
 if [ "${ACTION}" = add  -a  -n "${MODALIAS}" ]; then
-    exec modprobe -qb "${MODALIAS}"
+    exec /sbin/modprobe -qb "${MODALIAS}"
 fi

+ 1 - 2
src/root/initrd/init

@@ -76,8 +76,7 @@ fi
 good_msg 'Loading modules'
 
 # Specify required filesystem modules (no autoloading on mount)
-# Load EHCI unconditionally, otherwise USB 1.1 might be forced if OHCI/UHCI comes up first
-force_load="${force_load_fs} ehci-hcd"
+force_load="${force_load_fs}"
 
 oldmods=
 newmods=" ${force_load} "