mirror of
https://salsa.debian.org/kernel-team/initramfs-tools.git
synced 2026-01-26 15:39:08 +00:00
* kick mdrun script * update control for lenny + ubuntu * add _all_ ide, block and drivers * use MODPROBE_OPTIONS and kill any modprobed arg * small doc + whitespace fixes
268 lines
6.0 KiB
Bash
268 lines
6.0 KiB
Bash
# -*- shell-script -*-
|
|
|
|
catenate_cpiogz() {
|
|
# Sanity check
|
|
if [ ! -e "${1}" ]; then
|
|
echo "W:catenate_cpiogz: arg1='${1}' does not exist." >&2
|
|
return
|
|
fi
|
|
|
|
cat "${1}" >>"${__TMPCPIOGZ}"
|
|
}
|
|
|
|
force_load()
|
|
{
|
|
manual_add_modules ${@}
|
|
echo "${@}" >>"${DESTDIR}/conf/modules"
|
|
}
|
|
|
|
# Takes a file containing a list of modules to be added as an
|
|
# argument, figures out dependancies, and adds them.
|
|
#
|
|
# Input file syntax:
|
|
#
|
|
# # comment
|
|
# modprobe_module_name [args ...]
|
|
# [...]
|
|
#
|
|
add_modules_from_file()
|
|
{
|
|
# Sanity check
|
|
if [ ! -e "${1}" ]; then
|
|
echo "W:add_modules_from_file: arg1='${1}' does not exist." >&2
|
|
return
|
|
fi
|
|
|
|
sed -e '/^#/d' ${1} | while read module rest; do
|
|
force_load "${module}" "${rest}"
|
|
done
|
|
}
|
|
|
|
manual_add_modules()
|
|
{
|
|
for mam_x in $(modprobe --set-version="${version}" --ignore-install \
|
|
--show-depends "${1}" 2>/dev/null | awk '/^insmod/ { print $2 }'); do
|
|
# Prune duplicates
|
|
if [ -e "${DESTDIR}/${mam_x}" ]; then
|
|
continue
|
|
fi
|
|
|
|
mkdir -p "${DESTDIR}/$(dirname "${mam_x}")"
|
|
ln -s "${mam_x}" "${DESTDIR}/$(dirname "${mam_x}")"
|
|
if [ -n "${verbose}" ] && [ "${verbose}" = "y" ]; then
|
|
echo "Adding module ${mam_x}"
|
|
fi
|
|
done
|
|
}
|
|
|
|
# $1 is source
|
|
# $2 is relative destination
|
|
copy_exec() {
|
|
final_destination=${DESTDIR}/${2}/`basename ${1}`
|
|
if [ -L "$final_destination" ]; then
|
|
if ! [ `readlink ${final_destination}` = "${1}" ]; then
|
|
echo "W:copy_exec: Not copying ${1} to \$DESTDIR${2}/`basename ${1}`, which is already a copy of `readlink ${final_destination}`" >&2
|
|
return
|
|
fi
|
|
else
|
|
ln -s ${1} ${DESTDIR}/${2}
|
|
if [ -n "${verbose}" ] && [ "${verbose}" = "y" ]; then
|
|
echo "Adding binary ${1}"
|
|
fi
|
|
fi
|
|
|
|
# Copy the dependant libraries
|
|
for x in $(ldd ${1} 2>/dev/null | sed -e '
|
|
/\//!d;
|
|
/linux-gate/d;
|
|
/=>/ {s/.*=>[[:blank:]]*\([^[:blank:]]*\).*/\1/};
|
|
s/[[:blank:]]*\([^[:blank:]]*\) (.*)/\1/' 2>/dev/null); do
|
|
|
|
# Try to use non-optimised libraries where possible.
|
|
# We assume that all HWCAP libraries will be in tls.
|
|
nonoptlib=$(echo ${x} | sed -e 's#/lib/tls.*/\(lib.*\)#/lib/\1#')
|
|
|
|
if [ -e ${nonoptlib} ]; then
|
|
x=${nonoptlib}
|
|
fi
|
|
|
|
libname=$(basename ${x})
|
|
dirname=$(dirname ${x})
|
|
|
|
mkdir -p ${DESTDIR}/${dirname}
|
|
if [ ! -e ${DESTDIR}/${dirname}/${libname} ]; then
|
|
ln -s ${x} ${DESTDIR}/${dirname}
|
|
if [ -n "${verbose}" ] && [ "${verbose}" = "y" ]; then
|
|
echo "Adding library ${x}"
|
|
fi
|
|
fi
|
|
done
|
|
}
|
|
|
|
# Copy entire subtrees to the initramfs
|
|
copy_modules_dir()
|
|
{
|
|
if ! [ -d "${MODULESDIR}/${1}" ]; then
|
|
return;
|
|
fi
|
|
if [ -n "${verbose}" ] && [ "${verbose}" = "y" ]; then
|
|
echo "Copying module directory ${1}"
|
|
fi
|
|
for x_mod in $(find "${MODULESDIR}/${1}" -name '*.ko' -print); do
|
|
manual_add_modules `basename ${x_mod} .ko`
|
|
done
|
|
}
|
|
|
|
dep_add_modules()
|
|
{
|
|
|
|
# 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
|
|
|
|
for x in /sys/bus/pci/devices/*; do
|
|
if [ -e "${x}/modalias" ]; then
|
|
manual_add_modules $(cat "${x}/modalias")
|
|
fi
|
|
done
|
|
|
|
for x in /sys/bus/usb/devices/*; do
|
|
if [ -e "${x}/modalias" ]; then
|
|
manual_add_modules $(cat "${x}/modalias")
|
|
fi
|
|
done
|
|
|
|
if [ -e /proc/ide ]; then
|
|
for x in ide-generic ide-disk ide-cd; do
|
|
manual_add_modules "${x}"
|
|
done
|
|
fi
|
|
|
|
if [ -e /sys/bus/scsi/devices/ ]; then
|
|
manual_add_modules sd_mod
|
|
fi
|
|
|
|
if [ -e /sys/bus/i2o/devices/ ]; then
|
|
manual_add_modules i2o_block
|
|
fi
|
|
}
|
|
|
|
|
|
# The modules "most" classes added per default to the initramfs
|
|
auto_add_modules()
|
|
{
|
|
case "$1" in
|
|
base)
|
|
for x in ehci-hcd ohci-hcd uhci-hcd usbhid usb-storage ext2 \
|
|
ext3 isofs jfs nfs reiserfs xfs af_packet atkbd i8042; do
|
|
manual_add_modules "${x}"
|
|
done
|
|
;;
|
|
net)
|
|
for x in 3c59x 8139cp 8139too 8390 b44 bmac bnx2 defxx \
|
|
dl2k e1000 e100 ehea epic100 ep93xx_eth eql fealnx \
|
|
famachi forcedeth hp100 mace mv643xx_eth myri10ge \
|
|
natsemi ne2k-pci netconsole ns83820 pcnet32 qla3xxx \
|
|
r8169 s2io sis900 skge slhc smc911x starfire \
|
|
sundance sungem sungem_phy sunhme tg3 tlan de2104x \
|
|
de4x5 dmfe tulip winbond-840 xircom_cb xircom_tulip_cb \
|
|
typhon via-rhine via-velocity yellowfin; do
|
|
manual_add_modules "${x}"
|
|
done
|
|
;;
|
|
ide)
|
|
copy_modules_dir kernel/drivers/ide
|
|
;;
|
|
scsi)
|
|
copy_modules_dir kernel/drivers/scsi
|
|
for x in mptfc mptsas mptscsih mptspi; do
|
|
manual_add_modules "${x}"
|
|
done
|
|
;;
|
|
ata)
|
|
copy_modules_dir kernel/drivers/ata
|
|
;;
|
|
block)
|
|
copy_modules_dir kernel/drivers/block
|
|
;;
|
|
ieee1394)
|
|
for x in ohci1394 sbp2; do
|
|
manual_add_modules "${x}"
|
|
done
|
|
;;
|
|
i2o)
|
|
for x in i2o_block; do
|
|
manual_add_modules "${x}"
|
|
done
|
|
;;
|
|
dasd)
|
|
for x in dasd_eckd_mod dasd_fba_mod; do
|
|
manual_add_modules "${x}"
|
|
done
|
|
;;
|
|
*)
|
|
auto_add_modules base
|
|
auto_add_modules net
|
|
auto_add_modules ide
|
|
auto_add_modules scsi
|
|
auto_add_modules block
|
|
auto_add_modules ata
|
|
auto_add_modules i2o
|
|
auto_add_modules dasd
|
|
auto_add_modules ieee1394
|
|
;;
|
|
esac
|
|
}
|
|
|
|
usage()
|
|
{
|
|
cat >&2 << EOF
|
|
|
|
Usage: ${0} [OPTION]... <-o outfile> [version]
|
|
|
|
Options:
|
|
-d confdir Specify an alternative configuration directory.
|
|
-k Keep temporary directory used to make the image.
|
|
-o outfile Write to outfile.
|
|
-r root Override ROOT setting in mkinitrd.conf.
|
|
|
|
See mkinitramfs(8) for further details.
|
|
EOF
|
|
exit 1
|
|
|
|
}
|
|
|
|
# minimal supported kernel version
|
|
check_minkver()
|
|
{
|
|
curversion=${1}
|
|
initdir=${2}
|
|
if [ -z ${initdir} ]; then
|
|
DPKG_ARCH=`dpkg --print-installation-architecture`
|
|
case ${DPKG_ARCH} in
|
|
ia64|hppa)
|
|
minversion="2.6.15"
|
|
;;
|
|
*)
|
|
minversion="2.6.12"
|
|
;;
|
|
esac
|
|
if dpkg --compare-versions "${curversion}" lt "${minversion}"; then
|
|
echo "W: kernel ${curversion} too old for initramfs on ${DPKG_ARCH}" >&2
|
|
echo "W: not generating requested initramfs for kernel ${curversion}" >&2
|
|
exit 2
|
|
fi
|
|
return 0
|
|
fi
|
|
set_initlist
|
|
for cm_x in ${initlist}; do
|
|
tmp=$(eval echo $(grep ^MINKVER ${initdir}/${cm_x} | cut -d'=' -f2))
|
|
if dpkg --compare-versions "${curversion}" lt "${tmp}"; then
|
|
echo "W: ${cm_x} hook script requires at least kernel version ${tmp}" >&2
|
|
echo "W: not generating requested initramfs for kernel ${curversion}" >&2
|
|
exit 2
|
|
fi
|
|
done
|
|
}
|