diff options
Diffstat (limited to 'images/make_boot_img')
-rwxr-xr-x | images/make_boot_img | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/images/make_boot_img b/images/make_boot_img index bc341be9c..02fd0b85d 100755 --- a/images/make_boot_img +++ b/images/make_boot_img @@ -143,8 +143,9 @@ sub initrd { my $stage1_root = "../mdk-stage1"; _ "rm -rf $tmp_initrd"; - mkdir_p("$tmp_initrd$_") foreach qw(/etc /lib /modules /sbin /tmp /var); + mkdir_p("$tmp_initrd$_") foreach qw(/etc /firmware /lib /modules /sbin /tmp /var); symlink "../modules", "$tmp_initrd/lib/modules"; + symlink "../firmware", "$tmp_initrd/lib/firmware"; symlink "/proc/mounts", "$tmp_initrd/etc/mtab"; symlink "../tmp", "$tmp_initrd/var/run"; @@ -156,7 +157,29 @@ sub initrd { foreach ("/usr/share/ldetect-lst/fallback-modules.alias", "/lib/module-init-tools/ldetect-lst-modules.alias") { _ "install -D $_ $tmp_initrd$_"; } - + foreach my $firm (glob_("all.kernels$I/$ext/firmware/*")) { + my $dest=$firm; + $dest =~ s|all.kernels$I/$ext/||; + _ "cp -a $firm $tmp_initrd/$dest"; + }; + + output("$tmp_initrd/hotplug", q{#!/bin/sh -e +if [ "$SUBSYSTEM" = firmware ] && [ "$ACTION" = add ] && [ -n "$FIRMWARE" ] ; then + if [ ! -e /sys$DEVPATH/loading ]; then + exit 1 + fi + if [ -e "/lib/firmware/$FIRMWARE" ]; then + echo 1 > /sys$DEVPATH/loading + cat "/lib/firmware/$FIRMWARE" > /sys$DEVPATH/data + echo 0 > /sys$DEVPATH/loading + exit 0 + fi + echo -1 > /sys$DEVPATH/loading + exit 1 +fi +}); + _ "chmod 755 $tmp_initrd/hotplug"; + symlink "../hotplug", "$tmp_initrd/sbin/hotplug"; _ "install $stage1_root/init $tmp_initrd/"; foreach ('stage1', 'pppd', 'pppoe') { _ "install $stage1_root/$_ $tmp_initrd/sbin/"; |