#!/usr/bin/ksh93 # # Build Debian RT kernel from source, # and retain the kernel build including source and *.o # files so we can build custom kernel modules from # that # compound bconfig=( # config typeset kernel_maj_min='5.10' # 32bit == 'config.i386_rt_686-pae', 64bit == 'config.amd64_rt_amd64' typeset kernel_config_name='config.amd64_rt_amd64' typeset igb_avb_src_gitbundle='/home/rmainz/work/dev_current/dev026/elbe/igb_avb/rovema_igb_avb_git20220302_001.bundle' typeset simatic_src_gitbundle='/home/rmainz/work/dev_current/dev026/elbe/simatickernelmodules/rovema_simatickernelmodules_git20220304_001.bundle' # calculated values typeset kernel_build_path ) function build_debian_kernel_from_src { set -o xtrace set -o errexit set -o nounset integer res integer num_cpus=$(getconf '_NPROCESSORS_CONF') tar xf "/usr/src/linux-source-${bconfig.kernel_maj_min}.tar.xz" cd "linux-source-${bconfig.kernel_maj_min}" unxz <"/usr/src/linux-patch-${bconfig.kernel_maj_min}-rt.patch.xz" | patch -p1 cp "/usr/src/linux-config-${bconfig.kernel_maj_min}/${bconfig.kernel_config_name}.xz" . unxz "${bconfig.kernel_config_name}.xz" # copy config and make kernel build accept it without # jumping to the $ make menu # menu cp "${bconfig.kernel_config_name}" '.config' make oldconfig <'/dev/null' # show any modifications $ make oldconfig # did to the kernel config print '--------------------------------------' diff -u "${bconfig.kernel_config_name}" '.config' || true print '--------------------------------------' make clean time nice -n 19 make -j$((num_cpus*4)) deb-pkg 2>&1 | tee -a buildlog.log (( res=$? )) printf '#### Kernel build finished, return code = %d\n' res if (( res == 0 )) ; then # remember the path to the kernel build, but only if we were successful bconfig.kernel_build_path="$PWD/" fi return $res } function build_simatic_kernel_modules { set -o xtrace set -o errexit set -o nounset # dummy for now #simatic-ipc-modules-lsp-v1.2.0RC1$ make -C /home/rmainz/work/kernel_test001/linux-5.10.52/ M=$PWD rm -Rf simatic_build mkdir simatic_build cd simatic_build cp "${bconfig.simatic_src_gitbundle}" . git clone rovema_simatickernelmodules_git20220304_001.bundle cd rovema_simatickernelmodules_git20220304_001/simatic-ipc-modules-lsp-v1.2.0RC1/ make -C "${bconfig.kernel_build_path}" KSRC="${bconfig.kernel_build_path}" M=$PWD # # ToDo: Install in root/ dir, and turn that filesystem hieracy into a # Debian package # see https://unix.stackexchange.com/questions/30303/how-to-create-a-deb-file-manually # return 1 } function build_igb_avb_kernel_module { set -o xtrace set -o errexit set -o nounset rm -Rf igb_avb_build mkdir igb_avb_build cd igb_avb_build cp "${bconfig.igb_avb_src_gitbundle}" . git clone rovema_igb_avb_git20220302_001.bundle cd rovema_igb_avb_git20220302_001/kmod make -C "${bconfig.kernel_build_path}" KSRC="${bconfig.kernel_build_path}" M=$PWD clean make -C ${bconfig.kernel_build_path} KSRC="${bconfig.kernel_build_path}" M=$PWD cd ../lib make # # ToDo: Install in root/ dir, and turn that filesystem hieracy into a # Debian package # # dummy for now # see https://unix.stackexchange.com/questions/30303/how-to-create-a-deb-file-manually return 1 } function main { set -o xtrace set -o errexit set -o nounset typeset bbd="$PWD" # base build directory if (( 1 )) ; then cd $bbd && build_debian_kernel_from_src else bconfig.kernel_build_path="$PWD/linux-source-${bconfig.kernel_maj_min}/" fi cd $bbd ; build_simatic_kernel_modules || true cd $bbd ; build_igb_avb_kernel_module } # # main # builtin getconf main "$@" # EOF.