scripts/build/kernel_linux.sh
changeset 847 af75fc1fe0fc
parent 846 23d2d8defa03
child 848 5b3785e0d41d
     1.1 --- a/scripts/build/kernel_linux.sh	Fri Sep 05 16:15:34 2008 +0000
     1.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.3 @@ -1,208 +0,0 @@
     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 -do_print_filename() {
     1.9 -    [ "${CT_KERNEL}" = "linux" ] || return 0
    1.10 -    case "${CT_KERNEL_LINUX_HEADERS_SANITISED}" in
    1.11 -        y)  echo "linux-libc-headers-${CT_KERNEL_VERSION}";;
    1.12 -        *)  echo "linux-${CT_KERNEL_VERSION}";;
    1.13 -    esac
    1.14 -}
    1.15 -
    1.16 -# Download the kernel
    1.17 -do_kernel_get() {
    1.18 -    if [ "${CT_KERNEL_LINUX_HEADERS_USE_CUSTOM_DIR}" != "y" ]; then
    1.19 -        CT_GetFile "${CT_KERNEL_FILE}"                                                  \
    1.20 -                   {ftp,http}://ftp.kernel.org/pub/linux/kernel/v2.{6{,/testing},4,2}   \
    1.21 -                   http://ep09.pld-linux.org/~mmazur/linux-libc-headers
    1.22 -    fi
    1.23 -    return 0
    1.24 -}
    1.25 -
    1.26 -# Extract kernel
    1.27 -do_kernel_extract() {
    1.28 -    if [ "${CT_KERNEL_LINUX_HEADERS_USE_CUSTOM_DIR}" != "y" ]; then
    1.29 -        CT_ExtractAndPatch "${CT_KERNEL_FILE}"
    1.30 -    fi
    1.31 -    return 0
    1.32 -}
    1.33 -
    1.34 -# Check kernel configuration
    1.35 -do_kernel_check_config() {
    1.36 -    # Only the copied or sanitised headers need a config file.
    1.37 -    # Pre-existing headers as well as headers_install don't.
    1.38 -    if [ "${CT_KERNEL_LINUX_NEEDS_CONFIG}" = "y"        \
    1.39 -         -a \( -z "${CT_KERNEL_LINUX_CONFIG_FILE}"      \
    1.40 -               -o ! -r "${CT_KERNEL_LINUX_CONFIG_FILE}" \
    1.41 -            \)                                          \
    1.42 -       ]; then
    1.43 -        CT_DoLog WARN "You did not provide a kernel configuration file!"
    1.44 -        CT_DoLog WARN "I will try to generate one for you, but beware!"
    1.45 -
    1.46 -        CT_DoStep INFO "Building a default configuration file for linux kernel"
    1.47 -
    1.48 -        mkdir -p "${CT_BUILD_DIR}/build-kernel-defconfig"
    1.49 -        cd "${CT_BUILD_DIR}/build-kernel-defconfig"
    1.50 -        make -C "${CT_SRC_DIR}/${CT_KERNEL_FILE}" O=$(pwd)  \
    1.51 -             ARCH=${CT_KERNEL_ARCH} defconfig               2>&1 |CT_DoLog ALL
    1.52 -
    1.53 -        CT_KERNEL_LINUX_CONFIG_FILE="$(pwd)/.config"
    1.54 -
    1.55 -        CT_EndStep
    1.56 -    fi
    1.57 -}
    1.58 -
    1.59 -# Wrapper to the actual headers install method
    1.60 -do_kernel_headers() {
    1.61 -    CT_DoStep INFO "Installing kernel headers"
    1.62 -
    1.63 -    # Special case when using pre-installed headers
    1.64 -    if [ "${CT_KERNEL_LINUX_HEADERS_USE_CUSTOM_DIR}" = "y" ]; then
    1.65 -        do_kernel_preinstalled
    1.66 -    else
    1.67 -        # We need to enter this directory to find the kernel version strings
    1.68 -        cd "${CT_SRC_DIR}/${CT_KERNEL_FILE}"
    1.69 -        if [ "${CT_KERNEL_LINUX_HEADERS_SANITISED}" != "y" ]; then
    1.70 -            k_version=$(awk '/^VERSION =/ { print $3 }' Makefile)
    1.71 -            k_patchlevel=$(awk '/^PATCHLEVEL =/ { print $3 }' Makefile)
    1.72 -            k_sublevel=$(awk '/^SUBLEVEL =/ { print $3 }' Makefile)
    1.73 -            k_extraversion=$(awk '/^EXTRAVERSION =/ { print $3 }' Makefile)
    1.74 -        else
    1.75 -            k_version=$(echo "${CT_KERNEL_VERSION}." |cut -d . -f 1)
    1.76 -            k_patchlevel=$(echo "${CT_KERNEL_VERSION}." |cut -d . -f 2)
    1.77 -            k_sublevel=$(echo "${CT_KERNEL_VERSION}." |cut -d . -f 3)
    1.78 -            k_extraversion=$(echo "${CT_KERNEL_VERSION}." |cut -d . -f 4)
    1.79 -        fi
    1.80 -
    1.81 -        case "${k_version}.${k_patchlevel}" in
    1.82 -            2.2|2.4|2.6) ;;
    1.83 -            *)  CT_Abort "Unsupported kernel version 'linux-${k_version}.${k_patchlevel}'.";;
    1.84 -        esac
    1.85 -
    1.86 -        # Kernel version that support verbosity will use this, others will ignore it:
    1.87 -        V_OPT="V=${CT_KERNEL_LINUX_VERBOSE_LEVEL}"
    1.88 -
    1.89 -        if [ "${CT_KERNEL_LINUX_HEADERS_INSTALL}" = "y" ]; then
    1.90 -            do_kernel_install
    1.91 -        elif [ "${CT_KERNEL_LINUX_HEADERS_SANITISED}" = "y" ]; then
    1.92 -            do_kernel_sanitised
    1.93 -        else [ "${CT_KERNEL_LINUX_HEADERS_COPY}" = "y" ];
    1.94 -            do_kernel_copy
    1.95 -        fi
    1.96 -    fi
    1.97 -
    1.98 -    CT_EndStep
    1.99 -}
   1.100 -
   1.101 -# Install kernel headers using headers_install from kernel sources.
   1.102 -do_kernel_install() {
   1.103 -    CT_DoLog DEBUG "Using kernel's headers_install"
   1.104 -
   1.105 -    mkdir -p "${CT_BUILD_DIR}/build-kernel-headers"
   1.106 -    cd "${CT_BUILD_DIR}/build-kernel-headers"
   1.107 -
   1.108 -    case "${k_version}.${k_patchlevel}" in
   1.109 -        2.6) [ ${k_sublevel} -ge 18 ] || CT_Abort "Kernel version >= 2.6.18 is needed to install kernel headers.";;
   1.110 -        *)   CT_Abort "Kernel version >= 2.6.18 is needed to install kernel headers.";;
   1.111 -    esac
   1.112 -
   1.113 -    CT_DoLog EXTRA "Installing kernel headers"
   1.114 -    CT_DoExecLog ALL                                \
   1.115 -    make -C "${CT_SRC_DIR}/${CT_KERNEL_FILE}"       \
   1.116 -         O=$(pwd)                                   \
   1.117 -         ARCH=${CT_KERNEL_ARCH}                     \
   1.118 -         INSTALL_HDR_PATH="${CT_SYSROOT_DIR}/usr"   \
   1.119 -         ${V_OPT}                                   \
   1.120 -         headers_install
   1.121 -
   1.122 -    if [ "${CT_KERNEL_LINUX_HEADERS_INSTALL_CHECK}" = "y" ]; then
   1.123 -        CT_DoLog EXTRA "Checking installed headers"
   1.124 -        CT_DoExecLog ALL                                \
   1.125 -        make -C "${CT_SRC_DIR}/${CT_KERNEL_FILE}"       \
   1.126 -             O=$(pwd)                                   \
   1.127 -             ARCH=${CT_KERNEL_ARCH}                     \
   1.128 -             INSTALL_HDR_PATH="${CT_SYSROOT_DIR}/usr"   \
   1.129 -             ${V_OPT}                                   \
   1.130 -             headers_check
   1.131 -        find "${CT_SYSROOT_DIR}" -type f -name '.check*' -exec rm {} \;
   1.132 -    fi
   1.133 -}
   1.134 -
   1.135 -# Install kernel headers from oldish Mazur's sanitised headers.
   1.136 -do_kernel_sanitised() {
   1.137 -    CT_DoLog EXTRA "Copying sanitised headers"
   1.138 -    cd "${CT_SRC_DIR}/${CT_KERNEL_FILE}"
   1.139 -    cp -rv include/linux "${CT_HEADERS_DIR}" 2>&1 |CT_DoLog ALL
   1.140 -    cp -rv "include/asm-${CT_KERNEL_ARCH}" "${CT_HEADERS_DIR}/asm" 2>&1 |CT_DoLog ALL
   1.141 -}
   1.142 -
   1.143 -# Install kernel headers by plain copy.
   1.144 -do_kernel_copy() {
   1.145 -    CT_DoLog DEBUG "Copying plain kernel headers"
   1.146 -    CT_DoLog WARN "You are using plain kernel headers. You really shouldn't do that."
   1.147 -    CT_DoLog WARN "You'd be better off by using installed headers (or sanitised headers)."
   1.148 -
   1.149 -    # 2.2 and 2.4 don't support building out-of-tree. 2.6 does.
   1.150 -    CT_DoLog EXTRA "Preparing kernel headers"
   1.151 -    case "${k_version}.${k_patchlevel}" in
   1.152 -        2.2|2.4) cd "${CT_SRC_DIR}/${CT_KERNEL_FILE}"
   1.153 -                 cp "${CT_KERNEL_LINUX_CONFIG_FILE}" .config
   1.154 -                 CT_DoYes "" |make ARCH=${CT_KERNEL_ARCH} oldconfig
   1.155 -                 # 2.4 doesn't follow V=# for verbosity... :-(
   1.156 -                 make ARCH=${CT_KERNEL_ARCH} symlinks include/linux/version.h
   1.157 -                 ;;
   1.158 -        2.6)     mkdir -p "${CT_BUILD_DIR}/build-kernel-headers"
   1.159 -                 cd "${CT_BUILD_DIR}/build-kernel-headers"
   1.160 -                 cp "${CT_KERNEL_LINUX_CONFIG_FILE}" .config
   1.161 -                 CT_DoYes "" |make -C "${CT_SRC_DIR}/${CT_KERNEL_FILE}"         \
   1.162 -                                   O=$(pwd) ${V_OPT} ARCH=${CT_KERNEL_ARCH}     \
   1.163 -                                   oldconfig
   1.164 -                 case "${CT_KERNEL_ARCH}" in
   1.165 -                     sh*)        # sh does secret stuff in 'make prepare' that can't be
   1.166 -                                 # triggered separately, but happily, it doesn't use
   1.167 -                                 # target gcc, so we can use it.
   1.168 -                                 # Update: this fails on 2.6.11, as it installs
   1.169 -                                 # elfconfig.h, which requires target compiler :-(
   1.170 -                                 make ${PARALLELMFLAGS}                 \
   1.171 -                                      ARCH=${CT_KERNEL_ARCH} ${V_OPT}   \
   1.172 -                                      prepare include/linux/version.h
   1.173 -                                 ;;
   1.174 -                     arm*|cris*) make ${PARALLELMFLAGS}                     \
   1.175 -                                      ARCH=${CT_KERNEL_ARCH} ${V_OPT}       \
   1.176 -                                      include/asm include/linux/version.h   \
   1.177 -                                      include/asm-${CT_KERNEL_ARCH}/.arch
   1.178 -                                 ;;
   1.179 -                     mips*)      # for linux-2.6, 'make prepare' for mips doesn't 
   1.180 -                                 # actually create any symlinks.  Hope generic is ok.
   1.181 -                                 # Note that glibc ignores all -I flags passed in CFLAGS,
   1.182 -                                 # so you have to use -isystem.
   1.183 -                                 make ${PARALLELMFLAGS}                 \
   1.184 -                                      ARCH=${CT_KERNEL_ARCH} ${V_OPT}   \
   1.185 -                                      include/asm include/linux/version.h
   1.186 -                                 TARGET_CFLAGS="${TARGET_CFLAGS} -isystem ${LINUX_HEADER_DIR}/include/asm-mips/mach-generic"
   1.187 -                                 ;;
   1.188 -                     *)          make ${PARALLELMFLAGS}                 \
   1.189 -                                      ARCH=${CT_KERNEL_ARCH} ${V_OPT}   \
   1.190 -                                      include/asm include/linux/version.h
   1.191 -                                 ;;
   1.192 -                 esac
   1.193 -                 ;;
   1.194 -    esac 2>&1 |CT_DoLog ALL
   1.195 -
   1.196 -    CT_DoLog EXTRA "Copying kernel headers"
   1.197 -    cp -rv include/asm-generic "${CT_HEADERS_DIR}/asm-generic" 2>&1 |CT_DoLog ALL
   1.198 -    cp -rv include/linux "${CT_HEADERS_DIR}" 2>&1 |CT_DoLog ALL
   1.199 -    cp -rv include/asm-${CT_KERNEL_ARCH} "${CT_HEADERS_DIR}/asm" 2>&1 |CT_DoLog ALL
   1.200 -}
   1.201 -
   1.202 -# Use preinstalled headers (most probably by using make headers_install in a
   1.203 -# modified (read: customised) kernel tree). In this case, simply copy
   1.204 -# the headers in place
   1.205 -do_kernel_preinstalled() {
   1.206 -    CT_DoLog EXTRA "Copying preinstalled kernel headers"
   1.207 -
   1.208 -    mkdir -p "${CT_SYSROOT_DIR}/usr"
   1.209 -    cd "${CT_KERNEL_LINUX_HEADERS_CUSTOM_DIR}"
   1.210 -    cp -rv include "${CT_SYSROOT_DIR}/usr" 2>&1 |CT_DoLog ALL
   1.211 -}