You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
915 B
42 lines
915 B
#!/bin/sh
|
|
set -e
|
|
|
|
if [ $# -lt 1 ]; then
|
|
echo "usage: $0 <dest.img> [version]"
|
|
exit 1
|
|
fi
|
|
|
|
dest="$1"
|
|
version="${2:-$(uname -r)}"
|
|
basedir="/lib/modules/$version"
|
|
|
|
stagedir=$(mktemp -d)
|
|
trap "rm -rf '$stagedir'" EXIT
|
|
|
|
# Copy modules
|
|
mkdir -p "$stagedir/etc"
|
|
mkdir -p "$stagedir/$basedir"
|
|
cp "$basedir"/modules.* "$stagedir/$basedir"
|
|
grep -v '^#' /etc/modules | while read module; do
|
|
modprobe -S "$version" -D "$module" | while read -r action file; do
|
|
mkdir -p "$stagedir/$(dirname "$file")"
|
|
cp "$file" "$stagedir/$file"
|
|
done
|
|
echo "$module" >> "$stagedir"/etc/modules
|
|
done
|
|
|
|
# Copy loader
|
|
mkdir -p "$stagedir"/hooks/early
|
|
cat <<'EOF' > "$stagedir"/hooks/early/modules
|
|
#!/bin/sh
|
|
|
|
if [ -f /etc/modules ]; then
|
|
while read module; do
|
|
modprobe "$module"
|
|
done < /etc/modules
|
|
fi
|
|
EOF
|
|
chmod +x "$stagedir"/hooks/early/modules
|
|
|
|
# Make initramfs
|
|
(cd "$stagedir" && find . | cpio --quiet -H newc -o | gzip -9) > "$dest"
|
|
|