scripts/build/kernel_linux.sh
changeset 1 eeea35fbf182
child 37 21bcbfde8094
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/scripts/build/kernel_linux.sh	Sat Feb 24 11:00:05 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 +}