# We only do one driver at a time. We used to allow more than one, but # that caused space problems, and now it will cause other problems with # Red Hat Linux 7.0 and later, so only do one driver per update disk. # However, as of 6.2 and later, the size of the disk is no longer a major # issue. With 7.1 and later, multiple drivers on single driver disk also # aren't an issue. Starting at 7.0, the kernels may have different # symbol versions for 386 vs 586 vs 686 kernel builds, so we now make # three different driver disks. One has all i386 version modules on it, # one has an i386 BOOT module and an i586 UP and SMP module, and the # last has an i386 BOOT modules and i686 UP, SMP, and enterprise modules. DRIVERS=net/sk98lin #DRIVERS=message/fusion net #DRIVERS=char #RH71_KERNEL_DIRS=2.4.2-2 #RH72_KERNEL_DIRS=2.4.9-31 #RH73_KERNEL_DIRS=2.4.18-5 #RH80_KERNEL_DIRS=2.4.18-17.8.0 RH9_KERNEL_DIRS=2.4.20-8 2.4.20-19.9 2.4.20-20.9 #AS21_KERNEL_DIRS=2.4.9-e.3 SU_COMMAND=su KERNEL_DIRS=${RH71_KERNEL_DIRS} ${RH72_KERNEL_DIRS} ${RH73_KERNEL_DIRS} ${RH80_KERNEL_DIRS} ${RH9_KERNEL_DIRS} ${AS21_KERNEL_DIRS} all: $(patsubst %, _mod_%, $(KERNEL_DIRS)) modules.cpio.gz $(patsubst %, _mod_%, $(KERNEL_DIRS)): ( \ KDIR=`echo $(patsubst _mod_%, %, $@)`; \ KVER=`echo $(patsubst _mod_%, %, $@) | cut -f 1 -d '-' -`; \ BVER=`echo $(patsubst _mod_%, %, $@) | cut -f 2 -d '-' -`; \ GENERIC_VER=`echo $$KVER | cut -f 1-2 -d '.' -`; \ SUBLEV=`echo $$KVER | cut -f 3 -d '.' -`; \ RHDIR=""; \ if [ -z "$$RHDIR" ] && echo "${RH71_KERNEL_DIRS}" | grep -q "$${KDIR}" ; then \ RHDIR="rh71"; \ fi; \ if [ -z "$$RHDIR" ] && echo "${RH72_KERNEL_DIRS}" | grep -q "$${KDIR}" ; then \ RHDIR="rh72"; \ fi; \ if [ -z "$$RHDIR" ] && echo "${RH73_KERNEL_DIRS}" | grep -q "$${KDIR}" ; then \ RHDIR="rh73"; \ fi; \ if [ -z "$$RHDIR" ] && echo "${RH80_KERNEL_DIRS}" | grep -q "$${KDIR}" ; then \ RHDIR="rh80"; \ fi; \ if [ -z "$$RHDIR" ] && echo "${RH9_KERNEL_DIRS}" | grep -q "$${KDIR}" ; then \ RHDIR="rh9"; \ fi; \ if [ -z "$$RHDIR" ] && echo "${AS21_KERNEL_DIRS}" | grep -q "$${KDIR}" ; then \ RHDIR="as21"; \ fi; \ mkdir -p $${KDIR}/modules; \ find $${KDIR} -type l -a -print | xargs rm -f ; \ rm -fr $${KDIR}/lib; \ ln -s ../$${GENERIC_VER}-generic/Makefile $${KDIR}/Makefile; \ ln -s ../$${GENERIC_VER}-generic/Rules.make $${KDIR}/Rules.make; \ ln -s ../$${GENERIC_VER}-generic/scripts $${KDIR}/scripts; \ ln -s ../../../$${GENERIC_VER}-generic/rhconfig.h $${KDIR}/include/linux/rhconfig.h; \ for DRIVER in $(DRIVERS); do \ mkdir -p $${KDIR}/drivers/$${DRIVER}; \ ln -s `pwd`/$${DRIVER}/* $${KDIR}/drivers/$${DRIVER}; \ if [ "$${SUBDIR_LIST}" = "" ]; then \ SUBDIR_LIST="drivers/$${DRIVER}"; \ else \ SUBDIR_LIST="$${SUBDIR_LIST} drivers/$${DRIVER}"; \ fi; \ done; \ MAKE_CMD="make -C $${KDIR} SUBDIRS=\"$${SUBDIR_LIST}\" SUBLEVEL=$${SUBLEV} INSTALL_MOD_PATH=`pwd`/$${KDIR}"; \ for i in $${KDIR}/configs/kernel*.config; do \ CONFIG=`basename $$i .config`; \ ARCH=`echo $${CONFIG} | cut -f 3 -d '-' -`; \ if [ "$${ARCH}" = "i386" ]; then \ ARCH_VER=""; \ elif [ "$${ARCH}" = "i586" ]; then \ ARCH_VER=" -D__MODULE_KERNEL_i586"; \ elif [ "$${ARCH}" = "i686" ]; then \ ARCH_VER=" -D__MODULE_KERNEL_i686"; \ elif [ "$${ARCH}" = "athlon" ]; then \ ARCH_VER=" -D__MODULE_KERNEL_athlon"; \ else \ echo "Unknown config file arch $$i"; \ continue; \ fi; \ TYPE=`echo $${CONFIG} | cut -f 4 -d '-' -`; \ if [ -z "$${TYPE}" ]; then \ VER="COMPILE_VERSION=\"-D__BOOT_KERNEL_H_ -D__BOOT_KERNEL_UP=1$${ARCH_VER}\" EXTRAVERSION=-$${BVER}"; \ mkdir -p $${RHDIR}/lib-$${ARCH}/modules/$${KDIR}; \ TYPE="normal"; \ elif [ "$${TYPE}" = "smp" ]; then \ VER="COMPILE_VERSION=\"-D__BOOT_KERNEL_H_ -D__BOOT_KERNEL_SMP=1$${ARCH_VER}\" EXTRAVERSION=-$${BVER}smp"; \ mkdir -p $${RHDIR}/lib-$${ARCH}/modules/$${KDIR}smp; \ elif [ "$${TYPE}" = "BOOT" ]; then \ VER="COMPILE_VERSION=\"-D__BOOT_KERNEL_H_ -D__BOOT_KERNEL_BOOT=1$${ARCH_VER}\" EXTRAVERSION=-$${BVER}BOOT"; \ mkdir -p $${RHDIR}/lib-$${ARCH}/modules/$${KDIR}BOOT; \ elif [ "$${TYPE}" = "BOOTsmp" ]; then \ VER="COMPILE_VERSION=\"-D__BOOT_KERNEL_H_ -D__BOOT_KERNEL_BOOTSMP=1$${ARCH_VER}\" EXTRAVERSION=-$${BVER}BOOT"; \ mkdir -p $${RHDIR}/lib-$${ARCH}/modules/$${KDIR}BOOT; \ elif [ "$${TYPE}" = "enterprise" ]; then \ VER="COMPILE_VERSION=\"-D__BOOT_KERNEL_H_ -D__BOOT_KERNEL_ENTERPRISE=1$${ARCH_VER}\" EXTRAVERSION=-$${BVER}enterprise"; \ mkdir -p $${RHDIR}/lib-$${ARCH}/modules/$${KDIR}enterprise; \ elif [ "$${TYPE}" = "bigmem" ]; then \ VER="COMPILE_VERSION=\"-D__BOOT_KERNEL_H_ -D__BOOT_KERNEL_BIGMEM=1$${ARCH_VER}\" EXTRAVERSION=-$${BVER}bigmem"; \ mkdir -p $${RHDIR}/lib-$${ARCH}/modules/$${KDIR}bigmem; \ elif [ "$${TYPE}" = "summit" ]; then \ VER="COMPILE_VERSION=\"-D__BOOT_KERNEL_H_ -D__BOOT_KERNEL_SUMMIT=1$${ARCH_VER}\" EXTRAVERSION=-$${BVER}summit"; \ mkdir -p $${RHDIR}/lib-$${ARCH}/modules/$${KDIR}summit; \ elif [ "$${TYPE}" = "debug" ]; then \ VER="COMPILE_VERSION=\"-D__BOOT_KERNEL_H_ -D__BOOT_KERNEL_DEBUG=1$${ARCH_VER}\" EXTRAVERSION=-$${BVER}debug"; \ mkdir -p $${RHDIR}/lib-$${ARCH}/modules/$${KDIR}debug; \ else \ echo "Unknown config file type $$i"; \ continue; \ fi; \ rm -fr $${KDIR}/include/config/*; \ cp $${i} $${KDIR}/.config; \ echo -n "Making config files for $${KDIR} $${ARCH} $${TYPE} kernel..."; \ eval $${MAKE_CMD} $${VER} MODARCH=".$$ARCH" oldconfig >/dev/null 2>&1 ; \ echo "done."; \ echo -n "Making driver(s) for $${KDIR} $${ARCH} $${TYPE} kernel..."; \ eval $${MAKE_CMD} $${VER} MODARCH=".$$ARCH" modules >errlog 2>&1 ; \ if [ "$${?}" -ne "0" ]; then \ echo -e "\nThere was an error building this driver!!"; \ echo "The file errlog has the log of the failed build"; \ exit 1; \ fi; \ echo -n "installing..."; \ eval $${MAKE_CMD} $${VER} MODARCH=".$$ARCH" modules_install >>errlog 2>&1 ; \ if [ "$${?}" -ne "0" ]; then \ echo -e "\nThere was an error installing this driver!!"; \ echo "The file errlog has the log of the failed build"; \ exit 1; \ fi; \ echo "done."; \ rm -f $${KDIR}/.config*; \ rm -fr $${KDIR}/modules/*; \ rm -f errlog; \ done \ ) modules.cpio.gz: $(patsubst %, %/lib, $(KERNEL_DIRS)) ( \ PATHDOWN=`pwd`/2.4-generic/scripts/pathdown.sh; \ for i in ${KERNEL_DIRS}; do \ RHDIR=""; \ if [ -z "$$RHDIR" ] && echo "${RH71_KERNEL_DIRS}" | grep -q "$${i}" ; then \ RHDIR="rh71"; \ fi; \ if [ -z "$$RHDIR" ] && echo "${RH72_KERNEL_DIRS}" | grep -q "$${i}" ; then \ RHDIR="rh72"; \ fi; \ if [ -z "$$RHDIR" ] && echo "${RH73_KERNEL_DIRS}" | grep -q "$${i}" ; then \ RHDIR="rh73"; \ fi; \ if [ -z "$$RHDIR" ] && echo "${RH80_KERNEL_DIRS}" | grep -q "$${i}" ; then \ RHDIR="rh80"; \ fi; \ if [ -z "$$RHDIR" ] && echo "${RH9_KERNEL_DIRS}" | grep -q "$${i}" ; then \ RHDIR="rh9"; \ fi; \ if [ -z "$$RHDIR" ] && echo "${AS21_KERNEL_DIRS}" | grep -q "$${i}" ; then \ RHDIR="as21"; \ fi; \ for j in "" smp BOOT enterprise bigmem summit debug; do \ for dest_dir in $${RHDIR}/lib-*; do \ dest_ver=`echo $$dest_dir | cut -f 2 -d '-'`; \ src_ver="$${dest_ver}"; \ if [ "$${j}" = "BOOT" ]; then \ src_ver="i386"; \ fi; \ for l in `find $${i}/lib/modules/$${i}$${j} -type f -a -name \*.$${src_ver} -print 2>/dev/null`; do \ if [ -z "$${l}" ]; then \ continue; \ fi; \ BASE=`basename $${l} .$${src_ver}`; \ MODDIR=`dirname $${l}`; \ TMPDIR=`pwd`/$${i}/lib/modules/$${i}$${j}; \ MODDIR=`(export TOPDIR=$$TMPDIR; cd $$MODDIR; sh $$PATHDOWN)`; \ mkdir -p $$RHDIR/lib-$${dest_ver}/modules/$${i}$${j}/$${MODDIR}; \ cp -v $${l} $$RHDIR/lib-$${dest_ver}/modules/$${i}$${j}/$${MODDIR}/$${BASE}; \ done; \ done; \ done; \ done; \ for i in rh* as*; do \ if [ -d $$i ]; then \ cd $$i; \ for j in lib-*; do \ ARCH=`echo $$j | cut -f 2 -d '-' -`; \ mv lib-$${ARCH} lib; \ find lib -print | cpio -o -H crc | gzip -9 > modules.cpio.gz-$${ARCH}; \ mv lib lib-$${ARCH}; \ done; \ cd ..; \ fi; \ done; \ ) disk: ( \ for j in rh* as*; do \ if [ -d $$j ] ; then \ cd $$j; \ rm -fr disk modules disk.img dd.img* disk.tar; \ mkdir -p disk; \ mkdir -p disk.img; \ mkdir -p modules; \ echo "Version 0" > disk/modinfo ; \ for DRIVER in $(DRIVERS); do \ cat ../$${DRIVER}/disk-info >> disk/rhdd-6.1 ; \ cat ../$${DRIVER}/modinfo >> disk/modinfo ; \ cat ../$${DRIVER}/modules.dep >> disk/modules.dep ; \ cat ../$${DRIVER}/pcitable >> disk/pcitable ; \ done; \ cd disk; \ sort pcitable -o pcitable; \ sort modules.dep -o modules.dep; \ cd ..; \ for k in lib-*; do \ ARCH=`echo $$k | cut -f 2 -d '-' -`; \ rm -fr modules/*; \ cp -r $${k}/modules/* modules; \ cd modules; \ for i in *; do \ cd $$i; \ find . -name \* -a -type f -exec mv \{\} . \; ; \ find * -type d -exec rm -rf \{\} \; ; \ cd ..; \ done; \ find . -print | cpio -o -H crc | gzip -9 > ../disk/modules.cgz; \ cd ..; \ > dd.img; \ $(SU_COMMAND) -c " ( \ /sbin/mkdosfs -C dd.img 1440; \ mount -o loop -t vfat dd.img disk.img; \ cp -dvR disk/* disk.img/; \ umount disk.img; \ ) "; \ mv dd.img dd.img-$${ARCH}; \ gzip -9 dd.img-$${ARCH}; \ done; \ cd ..; \ fi; \ done; \ ) clean: rm -rf rh* as* for i in $(KERNEL_DIRS); do \ find $${i} -type l | xargs rm -f; \ find $${i} -name \*.o -o -name .\*.flags | xargs rm -f; \ rm -f .config*; \ rm -rf $$i/lib; \ rm -rf $$i/modules; \ rm -rf $$i/include/config/*; \ done for DRIVER in $(DRIVERS); do \ rm -f $${DRIVER}/*.o $${DRIVER}/.*.flags; \ done rm -f errlog import: $(if $(IMPORT_TREE),,$(error Specify the source tree in \ the IMPORT_TREE variable)) $(if $(IMPORT_VER),,$(error Specify the source version in the \ IMPORT_VER variable)) @if [ ! -d "$(IMPORT_TREE)" ]; then \ echo "IMPORT_TREE specifies an invalid directory."; exit 1; \ else exit 0; fi @if [ -d "$(IMPORT_VER)" ]; then \ echo "Kernel version $(IMPORT_VER) already exists."; \ exit 1; \ else exit 0; fi @(TARGET_DIR=$(join $(shell pwd),/$(IMPORT_VER)); \ pushd $(IMPORT_TREE) > /dev/null; \ mkdir $$TARGET_DIR; \ cp -dR --parents include $$TARGET_DIR; \ cp -dR --parents configs $$TARGET_DIR; \ find . -name Config.in | \ xargs cp -d --parents --target-directory=$$TARGET_DIR; \ cp -dR --parents arch/*/{config.in,Makefile} $$TARGET_DIR; \ popd > /dev/null; \ rm -f $(IMPORT_VER)/include/linux/rhconfig.h; \ echo $$TARGET_DIR is now populated)