diff options
| -rw-r--r-- | debian/TODO | 2 | ||||
| -rw-r--r-- | debian/changelog | 6 | ||||
| -rw-r--r-- | hook-functions | 34 |
3 files changed, 26 insertions, 16 deletions
diff --git a/debian/TODO b/debian/TODO index 7ed390f..f62656f 100644 --- a/debian/TODO +++ b/debian/TODO @@ -5,8 +5,6 @@ TODO o Eliminate ?udev?, ?klibc?, busybox (-> glibc). - o Better heuristics for MODULES=dep option - o Default to dep for PPC - Possibly to detect newworld? o udevsettle timeouts handling diff --git a/debian/changelog b/debian/changelog index e604463..22b793b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,10 @@ initramfs-tools (0.88) UNRELEASED; urgency=low - * Fix missing colons in closes. + * debian/changelog: Fix missing colons in closes. + * hook-functions: Add a proper /sys walking dep_add_modules() for a minimal + initramfs on MODULES=dep. (closes: #395526) - -- maximilian attems <maks@debian.org> Sun, 22 Apr 2007 19:08:40 +0200 + -- maximilian attems <maks@debian.org> Tue, 01 May 2007 18:29:59 +0200 initramfs-tools (0.87b) unstable; urgency=low diff --git a/hook-functions b/hook-functions index a5d1f61..12faeff 100644 --- a/hook-functions +++ b/hook-functions @@ -113,24 +113,34 @@ copy_modules_dir() done } +# only copy relevant modules dep_add_modules() { + # findout root block device + fstype + eval "$(mount | awk '/ \/ / {print "root=" $1 "\nrootfs=" $5; exit}')" + block=${root#/dev/} + block=${block%[0-9]*} - # Things that are too hard to autodetect. - for x in ext2 ext3 isofs jfs nfs reiserfs xfs af_packet; do - manual_add_modules "${x}" - done + # Error out if /sys lack block dev + if [ -z "${block}" ] || [ ! -e /sys/block/${block} ]; then + echo "Error: missing ${block} root ${root} /sys entry" + exit 1 + fi - for x in /sys/bus/pci/devices/*; do - if [ -e "${x}/modalias" ]; then - manual_add_modules $(cat "${x}/modalias") - fi - done + # Add rootfs + force_load "${rootfs}" - for x in /sys/bus/usb/devices/*; do - if [ -e "${x}/modalias" ]; then - manual_add_modules $(cat "${x}/modalias") + # walk /sys for relevant modules + device_path=$(readlink -f /sys/block/${block}/device) + while [ "${device_path}" != "/sys" ]; do + driver_path="$(readlink -f ${device_path}/driver)" + if [ -e "$driver_path" ]; then + module="$(basename $(readlink -f $driver_path))" + if [ -n "${module}" ]; then + force_load "${module}" + fi fi + device_path="$(dirname ${device_path})" done if [ -e /proc/ide ]; then |
