#!/bin/bash if [ "$OMK_VERBOSE" == "1" ]; then CMD_ECHO=echo else CMD_ECHO=true fi if [ $# -lt 1 ] ; then echo "kernelcfg2mk: requires linux kernel directory as the first argument" exit 2 fi LINUX_DIR="$1" if [ $# -gt 1 ] ; then KERN_MODULES_DIR="$2" fi if [ ! -e $LINUX_DIR/.config ] ; then echo "kernelcfg2mk: the provided location does not point to configured kernel sources" echo " check directory $LINUX_DIR" exit 2 fi if [ ! -e $LINUX_DIR/.config ] ; then echo "kernelcfg2mk: the provided location does not point to configured kernel sources" echo " check directory $LINUX_DIR" exit 2 fi if [ -z "$KERN_BUILD_DIR" ] ; then KERN_BUILD_DIR=`pwd` fi if [ -z "$KERN_MODULES_DIR" ] ; then KERN_MODULES_DIR=`pwd` fi if [ -z "$MAKE" ] ; then MAKE="make" fi KERN_TEST_DIR="$KERN_BUILD_DIR/kern-test-mk" mkdir -p $KERN_TEST_DIR $CMD_ECHO MAKERULES_DIR='$MAKERULES_DIR' $CMD_ECHO LINUX_DIR='$LINUX_DIR' $CMD_ECHO KERN_BUILD_DIR='$KERN_BUILD_DIR' $CMD_ECHO KERN_MODULES_DIR='$KERN_MODULES_DIR' $CMD_ECHO KERN_TEST_DIR='$KERN_TEST_DIR' RETVAL="0" LINUX_VERSION=$(grep UTS_RELEASE ${LINUX_DIR}/include/linux/version.h | \ sed 's/[^"]*"\(.*\)\{1\}"/\1/') if [ -z "$LINUX_VERSION" ] ; then LINUX_VERSION=$(grep UTS_RELEASE ${LINUX_DIR}/include/linux/utsrelease.h | \ sed 's/[^"]*"\(.*\)\{1\}"/\1/') fi LINUX_VERSION_MAJOR=$(echo ${LINUX_VERSION} | cut -d. -f1) LINUX_VERSION_MINOR=$(echo ${LINUX_VERSION} | cut -d. -f2) $CMD_ECHO Detected LINUX_VERSION=$LINUX_VERSION $CMD_ECHO Detected LINUX_VERSION_MAJOR=$LINUX_VERSION_MAJOR $CMD_ECHO Detected LINUX_VERSION_MINOR=$LINUX_VERSION_MINOR case $LINUX_VERSION_MAJOR.$LINUX_VERSION_MINOR in #===================================================================== # test for 2.4.x kernels 2.[01234]) rm -f ${KERN_BUILD_DIR}/kernel.mk rm -rf ${KERN_TEST_DIR} mkdir ${KERN_TEST_DIR} if [ $? -ne 0 ] ; then echo "Cannot create Linux kernel test build directory \"${KERN_TEST_DIR}\"" exit 3 fi cd ${KERN_TEST_DIR} $CMD_ECHO Writing `pwd`/Makefile cat >${KERN_TEST_DIR}/Makefile <>flags @echo LINUX_LDFLAGS="" >>flags @echo LINUX_ARFLAGS="\$(ARFLAGS)" >>flags @echo LINUX_CROSS_COMPILE="\$(CROSS_COMPILE)" >>flags @echo LINUX_KERNELRELEASE="\$(KERNELRELEASE)" >>flags @$CMD_ECHO LINUX_AFLAGS="\$(AFLAGS)" @echo LINUX_AFLAGS="\$(AFLAGS)" | sed 's#Iinclude#I"\$(LINUXDIR)/include"#g'>>flags @$CMD_ECHO LINUX_CFLAGS="\$(CFLAGS)" @echo LINUX_CFLAGS="\$(CFLAGS)" | sed 's#Iinclude#I"\$(LINUXDIR)/include"#g'>>flags @echo LINUX_MODFLAGS="\$(MODFLAGS)" @echo LINUX_CC="\$(CC)" >>flags @echo LINUX_LD="\$(LD) \$(LDFLAGS)" >>flags @echo LINUX_AS="\$(AS)" >>flags @echo LINUX_AR="\$(AR)" >>flags @echo LINUX_MODULE_EXT=".o" >>flags @echo MODPOST_OPTS="\$(MODPOST_OPTS)" >>flags EOF $CMD_ECHO ${MAKE} -C ${LINUX_DIR} SUBDIRS=${KERN_TEST_DIR} modules ${MAKE} -C ${LINUX_DIR} SUBDIRS=${KERN_TEST_DIR} modules if [ $? == 0 ] ; then cp -v flags ${KERN_MODULES_DIR}/kernel.mk if [ ! $? == 0 ] ; then RETVAL="2" fi else RETVAL="1" fi cd ${KERN_BUILD_DIR} if [ "$OMK_VERBOSE" != "1" ]; then rm -rf ${KERN_TEST_DIR}; fi ;; #===================================================================== # test for 2.6.x kernels 2.6) rm -f ${KERN_BUILD_DIR}/kernel.mk rm -rf ${KERN_TEST_DIR} mkdir ${KERN_TEST_DIR} if [ $? -ne 0 ] ; then echo "Cannot create Linux kernel test build directory \"${KERN_TEST_DIR}\"" exit 3 fi cd ${KERN_TEST_DIR} $CMD_ECHO Writing `pwd`/Makefile cat >${KERN_TEST_DIR}/Makefile <>\$(obj)/flags @echo LINUX_ARCH="\$(ARCH)" >>\$(obj)/flags @echo LINUX_BUILDHOST="\$(KBUILD_BUILDHOST)" >>\$(obj)/flags @echo LINUX_LDFLAGS="" >>\$(obj)/flags @echo LINUX_ARFLAGS="\$(ARFLAGS)" >>\$(obj)/flags @echo LINUX_CROSS_COMPILE="\$(CROSS_COMPILE)" >>\$(obj)/flags @echo LINUX_KERNELRELEASE="\$(KERNELRELEASE)" >>\$(obj)/flags @$CMD_ECHO CPPFLAGS="\$(CPPFLAGS)" @$CMD_ECHO KBUILD_CPPFLAGS="\$(KBUILD_CPPFLAGS)" @$CMD_ECHO AFLAGS="\$(AFLAGS)" @$CMD_ECHO CFLAGS="\$(CFLAGS)" @$CMD_ECHO KBUILD_CFLAGS="\$(KBUILD_CFLAGS)" @$CMD_ECHO LINUXINCLUDE="\$(LINUXINCLUDE)" @$CMD_ECHO CFLAGS_MODULE="\$(CFLAGS_MODULE)" ifdef KBUILD_CFLAGS @echo LINUX_CPPFLAGS="\$(KBUILD_CPPFLAGS)" | sed 's#-\(I\|include\) \?\(include\|arch\)#-\1 "\$(OMK_LINUX_SRC)/\2"#g'>>\$(obj)/flags @echo LINUX_CPPFLAGS+="\$(LINUXINCLUDE)" | sed 's#-\(I\|include\) \?\(include\|arch\)#-\1 "\$(OMK_LINUX_SRC)/\2"#g'>>\$(obj)/flags @echo LINUX_AFLAGS="\$(KBUILD_AFLAGS)" | sed 's#-I\(include\|arch\)#-I"\$(OMK_LINUX_SRC)/\1"#g'>>\$(obj)/flags @echo LINUX_CFLAGS="\$(KBUILD_CFLAGS)" | sed 's#-I\(include\|arch\)#-I"\$(OMK_LINUX_SRC)/\1"#g'>>\$(obj)/flags else @echo LINUX_CPPFLAGS="\$(CPPFLAGS)" | sed 's#Iinclude#I"\$(OMK_LINUX_SRC)/include"#g'>>\$(obj)/flags @echo LINUX_AFLAGS="\$(AFLAGS)" | sed 's#Iinclude#I"\$(OMK_LINUX_SRC)/include"#g'>>\$(obj)/flags @echo LINUX_CFLAGS="\$(CFLAGS)" | sed 's#Iinclude#I"\$(OMK_LINUX_SRC)/include"#g'>>\$(obj)/flags endif @echo LINUX_CFLAGS_MODULE="\$(CFLAGS_MODULE)" >>\$(obj)/flags @echo LINUX_CC="\$(CC)" >>\$(obj)/flags @echo LINUX_LD="\$(LD) \$(LDFLAGS) \$(LDFLAGS_MODULE)" | sed 's#\(\\)#"\$(OMK_LINUX_SRC)/\1"#g' >>\$(obj)/flags @echo LINUX_AS="\$(AS)" >>\$(obj)/flags @echo LINUX_AR="\$(AR)" >>\$(obj)/flags @echo LINUX_MODULE_EXT=".ko" >>\$(obj)/flags @echo LINUX_QUOTE_MODNAME=\$(if \$(findstring KBUILD_STR,\$(basename_flags)),y,) >>\$(obj)/flags @echo LINUX_CONFIG_MODVERSIONS=\$(CONFIG_MODVERSIONS) >>\$(obj)/flags @echo LINUX_CONFIG_MODULE_SRCVERSION_ALL=\$(CONFIG_MODULE_SRCVERSION_ALL) >>\$(obj)/flags @echo LINUX_CONFIG_DEBUG_SECTION_MISMATCH=\$(CONFIG_DEBUG_SECTION_MISMATCH) >>\$(obj)/flags @echo LINUX_CONFIG_MARKERS=\$(CONFIG_MARKERS) >>\$(obj)/flags @echo LINUX_KBUILD_EXTMOD=\$(KBUILD_EXTMOD) >>\$(obj)/flags @echo LINUX_KBUILD_EXTRA_SYMBOLS=\$(KBUILD_EXTRA_SYMBOLS) >>\$(obj)/flags @echo LINUX_KBUILD_MODPOST_WARN=\$(KBUILD_MODPOST_WARN) >>\$(obj)/flags @echo LINUX_CROSS_BUILD=\$(cross_build) >>\$(obj)/flags @echo MODPOST_OPTS="\$(MODPOST_OPTS)" >> \$(obj)/flags EOF # ${MAKE} -C ${LINUX_DIR} SUBDIRS=${KERN_TEST_DIR} LINUXDIR=${LINUX_DIR} MODVERDIR=${KERN_TEST_DIR} KBUILD_VERBOSE=1 modules ${MAKE} -C ${LINUX_DIR} M=${KERN_TEST_DIR} LINUXDIR=${LINUX_DIR} MODVERDIR=${KERN_TEST_DIR}/modver KBUILD_VERBOSE=$OMK_VERBOSE modules #if [ $? == 0 ] ; then cp -v flags ${KERN_MODULES_DIR}/kernel.mk if [ ! $? == 0 ] ; then RETVAL="2" fi #else # RETVAL="1" #fi cd ${KERN_BUILD_DIR} if [ "$OMK_VERBOSE" != "1" ]; then rm -rf ${KERN_TEST_DIR}; fi ;; #===================================================================== *) echo "Unsupported Linux version $LINUX_VERSION_MAJOR.$LINUX_VERSION_MINOR" ;; esac exit ${RETVAL}