# -*- 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}" --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}")" 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} 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} fi done } # Copy entire subtrees to the initramfs copy_modules_dir() { tmpdir_modbase="${DESTDIR}/lib/modules/${version}" mkdir -p "$(dirname "${tmpdir_modbase}/${1}")" cp -a "${MODULESDIR}/${1}" "${tmpdir_modbase}/${1}" } 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 } # Modules that we always add 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 epic100 eql fealnx famachi forcedeth hp100 mace mv643xx_eth natsemi ne2k-pci netconsole ns83820 pcnet32 r8169 s2io sis900 skge slhc 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) for x in ide-cd ide-disk ide-generic aec62xx alim15x3 amd74xx atiixp atuuxo cmd64x cs5520 cs5530 cy82c693 generic hpt34x hpt366 ns87415 opti621 pdc202xx_new pdc202xx_old piix rz1000 sc1200 serverworks siimage sis5513 slc82c105 slc90e66 triflex trm290 via82cxxx; do manual_add_modules "${x}" done ;; scsi) for x in 3w-9xxx 3w-xxxx a100u2x aacraid advansys ahci aic79xx aic7xxx ata_piix atari_scsi atp870u BusLogic cciss ch dc395x dmx3191d dpt_i2o eata fdomain ibmvscsic initio ipr ips isp1020 lpfc max_scsi mac53c94 megaraid megaraid_mbox megaraid_mm mesh mptscsih mptspi nsp32 osst qla1280 qla2100 qla2200 qla2300 qla2322 qla2xxx qla6312 qlogicfas408 qlogicfc sata_promise sata_nv sata_qstor sata_sil sata_sis sata_svw sata_sx4 sata_uli sata_via sata_vsc scsi_mod scsi_transport_fc scsi_transport_iscsi scsi_transport_spi sd_mod sym53c8xx tmscsim; do manual_add_modules "${x}" done ;; i2o) for x in i2o_block; 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 i2o ;; 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 ${0}(8) for further details. EOF exit 1 }