1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/scripts/build/kernel_linux.sh Sun Mar 04 22:37:11 2007 +0000
1.3 @@ -0,0 +1,148 @@
1.4 +# This file declares functions to install the kernel headers for linux
1.5 +# Copyright 2007 Yann E. MORIN
1.6 +# Licensed under the GPL v2. See COPYING in the root of this package
1.7 +
1.8 +# Check kernel configuration
1.9 +do_kernel_check_config() {
1.10 + CT_DoStep INFO "Checking kernel configuration"
1.11 +
1.12 + CT_TestOrAbort "You did not provide a kernel config file!" -n "${CT_KERNEL_LINUX_CONFIG_FILE}" -a -f "${CT_KERNEL_LINUX_CONFIG_FILE}"
1.13 +
1.14 + CT_EndStep
1.15 +}
1.16 +
1.17 +# Wrapper to the actual headers install method
1.18 +do_kernel_headers() {
1.19 + CT_DoStep INFO "Installing kernel headers"
1.20 +
1.21 + # We need to enter this directory to find the kernel version strings
1.22 + cd "${CT_SRC_DIR}/${CT_KERNEL_FILE}"
1.23 + if [ "${CT_KERNEL_LINUX_HEADERS_SANITISED}" != "y" ]; then
1.24 + k_version=`awk '/^VERSION =/ { print $3 }' Makefile`
1.25 + k_patchlevel=`awk '/^PATCHLEVEL =/ { print $3 }' Makefile`
1.26 + k_sublevel=`awk '/^SUBLEVEL =/ { print $3 }' Makefile`
1.27 + k_extraversion=`awk '/^EXTRAVERSION =/ { print $3 }' Makefile`
1.28 + else
1.29 + k_version=`echo "${CT_KERNEL_VERSION}." |cut -d . -f 1`
1.30 + k_patchlevel=`echo "${CT_KERNEL_VERSION}." |cut -d . -f 2`
1.31 + k_sublevel=`echo "${CT_KERNEL_VERSION}." |cut -d . -f 3`
1.32 + k_extraversion=`echo "${CT_KERNEL_VERSION}." |cut -d . -f 4`
1.33 + fi
1.34 +
1.35 + case "${k_version}.${k_patchlevel}" in
1.36 + 2.2|2.4|2.6) ;;
1.37 + *) CT_Abort "Unsupported kernel version \"linux-${k_version}.${k_patchlevel}\".";;
1.38 + esac
1.39 +
1.40 + # Kernel version that support verbosity will use this, others will ignore it:
1.41 + V_OPT="V=${CT_KERNEL_LINUX_VERBOSE_LEVEL}"
1.42 +
1.43 + if [ "${CT_KERNEL_LINUX_HEADERS_INSTALL}" = "y" ]; then
1.44 + do_kernel_install
1.45 + elif [ "${CT_KERNEL_LINUX_HEADERS_SANITISED}" = "y" ]; then
1.46 + do_kernel_sanitised
1.47 + else [ "${CT_KERNEL_LINUX_HEADERS_COPY}" = "y" ];
1.48 + do_kernel_copy
1.49 + fi
1.50 +
1.51 + CT_EndStep
1.52 +}
1.53 +
1.54 +# Install kernel headers using headers_install from kernel sources.
1.55 +do_kernel_install() {
1.56 + CT_DoLog EXTRA "Using kernel's headers_install"
1.57 +
1.58 + mkdir -p "${CT_BUILD_DIR}/build-kernel-headers"
1.59 + cd "${CT_BUILD_DIR}/build-kernel-headers"
1.60 +
1.61 + case "${k_version}.${k_patchlevel}" in
1.62 + 2.6) [ ${k_sublevel} -ge 18 ] || CT_Abort "Kernel version >= 2.6.18 is needed to install kernel headers.";;
1.63 + *) CT_Abort "Kernel version >= 2.6.18 is needed to install kernel headers.";;
1.64 + esac
1.65 +
1.66 + CT_DoLog EXTRA "Configuring kernel headers"
1.67 + cp "${CT_KERNEL_LINUX_CONFIG_FILE}" .config
1.68 + CT_DoYes "" |make -C "${CT_SRC_DIR}/${CT_KERNEL_FILE}" \
1.69 + O="${CT_BUILD_DIR}/build-kernel-headers" \
1.70 + ${V_OPT} \
1.71 + ARCH=${CT_KERNEL_ARCH} oldconfig 2>&1 |CT_DoLog DEBUG
1.72 +
1.73 + CT_DoLog EXTRA "Installing kernel headers"
1.74 + make ARCH=${CT_KERNEL_ARCH} \
1.75 + INSTALL_HDR_PATH="${CT_SYSROOT_DIR}/usr" \
1.76 + ${V_OPT} \
1.77 + headers_install 2>&1 |CT_DoLog DEBUG
1.78 +
1.79 + CT_DoLog EXTRA "Checking installed headers"
1.80 + make ARCH=${CT_KERNEL_ARCH} \
1.81 + INSTALL_HDR_PATH="${CT_SYSROOT_DIR}/usr" \
1.82 + ${V_OPT} \
1.83 + headers_check 2>&1 |CT_DoLog DEBUG
1.84 +}
1.85 +
1.86 +# Install kernel headers from oldish Mazur's sanitised headers.
1.87 +do_kernel_sanitised() {
1.88 + CT_DoLog EXTRA "Copying sanitised headers"
1.89 + cd "${CT_SRC_DIR}/${CT_KERNEL_FILE}"
1.90 + cp -rv include/linux "${CT_HEADERS_DIR}" 2>&1 |CT_DoLog DEBUG
1.91 + cp -rv "include/asm-${CT_KERNEL_ARCH}" "${CT_HEADERS_DIR}/asm" 2>&1 |CT_DoLog DEBUG
1.92 +}
1.93 +
1.94 +# Install kernel headers by plain copy.
1.95 +do_kernel_copy() {
1.96 + CT_DoLog EXTRA "Copying plain kernel headers"
1.97 + CT_DoLog WARN "You are using plain kernel headers. You really shouldn't do that."
1.98 + CT_DoLog WARN "You'd be better off by using installed headers (or sanitised headers)."
1.99 +
1.100 + # 2.2 and 2.4 don't support building out-of-tree. 2.6 does.
1.101 + CT_DoLog EXTRA "Preparing kernel headers"
1.102 + case "${k_version}.${k_patchlevel}" in
1.103 + 2.2|2.4) cd "${CT_SRC_DIR}/${CT_KERNEL_FILE}"
1.104 + cp "${CT_KERNEL_LINUX_CONFIG_FILE}" .config
1.105 + CT_DoYes "" |make ARCH=${CT_KERNEL_ARCH} oldconfig
1.106 + # 2.4 doesn't follow V=# for verbosity... :-(
1.107 + make ARCH=${CT_KERNEL_ARCH} symlinks include/linux/version.h
1.108 + ;;
1.109 + 2.6) mkdir -p "${CT_BUILD_DIR}/build-kernel-headers"
1.110 + cd "${CT_BUILD_DIR}/build-kernel-headers"
1.111 + cp "${CT_KERNEL_LINUX_CONFIG_FILE}" .config
1.112 + CT_DoYes "" |make -C "${CT_SRC_DIR}/${CT_KERNEL_FILE}" \
1.113 + O="`pwd`" ${V_OPT} ARCH=${CT_KERNEL_ARCH} \
1.114 + oldconfig
1.115 + case "${CT_KERNEL_ARCH}" in
1.116 + sh*) # sh does secret stuff in 'make prepare' that can't be
1.117 + # triggered separately, but happily, it doesn't use
1.118 + # target gcc, so we can use it.
1.119 + # Update: this fails on 2.6.11, as it installs
1.120 + # elfconfig.h, which requires target compiler :-(
1.121 + make ${PARALLELMFLAGS} \
1.122 + ARCH=${CT_KERNEL_ARCH} ${V_OPT} \
1.123 + prepare include/linux/version.h
1.124 + ;;
1.125 + arm*|cris*) make ${PARALLELMFLAGS} \
1.126 + ARCH=${CT_KERNEL_ARCH} ${V_OPT} \
1.127 + include/asm include/linux/version.h \
1.128 + include/asm-${CT_KERNEL_ARCH}/.arch
1.129 + ;;
1.130 + mips*) # for linux-2.6, 'make prepare' for mips doesn't
1.131 + # actually create any symlinks. Hope generic is ok.
1.132 + # Note that glibc ignores all -I flags passed in CFLAGS,
1.133 + # so you have to use -isystem.
1.134 + make ${PARALLELMFLAGS} \
1.135 + ARCH=${CT_KERNEL_ARCH} ${V_OPT} \
1.136 + include/asm include/linux/version.h
1.137 + TARGET_CFLAGS="${TARGET_CFLAGS} -isystem ${LINUX_HEADER_DIR}/include/asm-mips/mach-generic"
1.138 + ;;
1.139 + *) make ${PARALLELMFLAGS} \
1.140 + ARCH=${CT_KERNEL_ARCH} ${V_OPT} \
1.141 + include/asm include/linux/version.h
1.142 + ;;
1.143 + esac
1.144 + ;;
1.145 + esac 2>&1 |CT_DoLog DEBUG
1.146 +
1.147 + CT_DoLog EXTRA "Copying kernel headers"
1.148 + cp -rv include/asm-generic "${CT_HEADERS_DIR}/asm-generic" 2>&1 |CT_DoLog DEBUG
1.149 + cp -rv include/linux "${CT_HEADERS_DIR}" 2>&1 |CT_DoLog DEBUG
1.150 + cp -rv include/asm-${CT_KERNEL_ARCH} "${CT_HEADERS_DIR}/asm" 2>&1 |CT_DoLog DEBUG
1.151 +}