scripts/build/kernel_linux.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sat Feb 24 11:00:05 2007 +0000 (2007-02-24)
changeset 1 eeea35fbf182
child 37 21bcbfde8094
permissions -rw-r--r--
Add the full crosstool-NG sources to the new repository of its own.
You might just say: 'Yeah! crosstool-NG's got its own repo!".
Unfortunately, that's because the previous repo got damaged beyond repair and I had no backup.
That means I'm putting backups in place in the afternoon.
That also means we've lost history... :-(
     1 # This file declares functions to install the kernel headers for linux
     2 # Copyright 2007 Yann E. MORIN
     3 # Licensed under the GPL v2. See COPYING in the root of this package
     4 
     5 # Check kernel configuration
     6 do_kernel_check_config() {
     7     CT_DoStep INFO "Checking kernel configuration"
     8 
     9     CT_TestOrAbort "You did not provide a kernel config file!" -n "${CT_KERNEL_LINUX_CONFIG_FILE}" -a -f "${CT_KERNEL_LINUX_CONFIG_FILE}"
    10 
    11     CT_EndStep
    12 }
    13 
    14 # Wrapper to the actual headers install method
    15 do_kernel_headers() {
    16     CT_DoStep INFO "Installing kernel headers"
    17 
    18     # We need to enter this directory to find the kernel version strings
    19     cd "${CT_SRC_DIR}/${CT_KERNEL_FILE}"
    20     if [ "${CT_KERNEL_LINUX_HEADERS_SANITISED}" != "y" ]; then
    21         k_version=`awk '/^VERSION =/ { print $3 }' Makefile`
    22         k_patchlevel=`awk '/^PATCHLEVEL =/ { print $3 }' Makefile`
    23         k_sublevel=`awk '/^SUBLEVEL =/ { print $3 }' Makefile`
    24         k_extraversion=`awk '/^EXTRAVERSION =/ { print $3 }' Makefile`
    25     else
    26         k_version=`echo "${CT_KERNEL_VERSION}." |cut -d . -f 1`
    27         k_patchlevel=`echo "${CT_KERNEL_VERSION}." |cut -d . -f 2`
    28         k_sublevel=`echo "${CT_KERNEL_VERSION}." |cut -d . -f 3`
    29         k_extraversion=`echo "${CT_KERNEL_VERSION}." |cut -d . -f 4`
    30     fi
    31 
    32     case "${k_version}.${k_patchlevel}" in
    33         2.2|2.4|2.6) ;;
    34         *)  CT_Abort "Unsupported kernel version \"linux-${k_version}.${k_patchlevel}\".";;
    35     esac
    36 
    37     # Kernel version that support verbosity will use this, others will ignore it:
    38     V_OPT="V=${CT_KERNEL_LINUX_VERBOSE_LEVEL}"
    39 
    40     if [ "${CT_KERNEL_LINUX_HEADERS_INSTALL}" = "y" ]; then
    41         do_kernel_install
    42     elif [ "${CT_KERNEL_LINUX_HEADERS_SANITISED}" = "y" ]; then
    43         do_kernel_sanitised
    44     else [ "${CT_KERNEL_LINUX_HEADERS_COPY}" = "y" ];
    45         do_kernel_copy
    46     fi
    47 
    48     CT_EndStep
    49 }
    50 
    51 # Install kernel headers using headers_install from kernel sources.
    52 do_kernel_install() {
    53     CT_DoLog EXTRA "Using kernel's headers_install"
    54 
    55     mkdir -p "${CT_BUILD_DIR}/build-kernel-headers"
    56     cd "${CT_BUILD_DIR}/build-kernel-headers"
    57 
    58     case "${k_version}.${k_patchlevel}" in
    59         2.6) [ ${k_sublevel} -ge 18 ] || CT_Abort "Kernel version >= 2.6.18 is needed to install kernel headers.";;
    60         *)   CT_Abort "Kernel version >= 2.6.18 is needed to install kernel headers.";;
    61     esac
    62 
    63     CT_DoLog EXTRA "Configuring kernel headers"
    64     cp "${CT_KERNEL_LINUX_CONFIG_FILE}" .config
    65     CT_DoYes "" |make -C "${CT_SRC_DIR}/${CT_KERNEL_FILE}"      \
    66                       O="${CT_BUILD_DIR}/build-kernel-headers"  \
    67                       ${V_OPT}                                  \
    68                       ARCH=${CT_KERNEL_ARCH} oldconfig          2>&1 |CT_DoLog DEBUG
    69 
    70     CT_DoLog EXTRA "Installing kernel headers"
    71     make ARCH=${CT_KERNEL_ARCH}                     \
    72          INSTALL_HDR_PATH="${CT_SYSROOT_DIR}/usr"   \
    73          ${V_OPT}                                   \
    74          headers_install                            2>&1 |CT_DoLog DEBUG
    75 
    76     CT_DoLog EXTRA "Checking installed headers"
    77     make ARCH=${CT_KERNEL_ARCH}                     \
    78          INSTALL_HDR_PATH="${CT_SYSROOT_DIR}/usr"   \
    79          ${V_OPT}                                   \
    80          headers_check                              2>&1 |CT_DoLog DEBUG
    81 }
    82 
    83 # Install kernel headers from oldish Mazur's sanitised headers.
    84 do_kernel_sanitised() {
    85     CT_DoLog EXTRA "Copying sanitised headers"
    86     cd "${CT_SRC_DIR}/${CT_KERNEL_FILE}"
    87     cp -rv include/linux "${CT_HEADERS_DIR}" 2>&1 |CT_DoLog DEBUG
    88     cp -rv "include/asm-${CT_KERNEL_ARCH}" "${CT_HEADERS_DIR}/asm" 2>&1 |CT_DoLog DEBUG
    89 }
    90 
    91 # Install kernel headers by plain copy.
    92 do_kernel_copy() {
    93     CT_DoLog EXTRA "Copying plain kernel headers"
    94     CT_DoLog WARN "You are using plain kernel headers. You really shouldn't do that."
    95     CT_DoLog WARN "You'd be better off by using installed headers (or sanitised headers)."
    96 
    97     # 2.2 and 2.4 don't support building out-of-tree. 2.6 does.
    98     CT_DoLog EXTRA "Preparing kernel headers"
    99     case "${k_version}.${k_patchlevel}" in
   100         2.2|2.4) cd "${CT_SRC_DIR}/${CT_KERNEL_FILE}"
   101                  cp "${CT_KERNEL_LINUX_CONFIG_FILE}" .config
   102                  CT_DoYes "" |make ARCH=${CT_KERNEL_ARCH} oldconfig
   103                  # 2.4 doesn't follow V=# for verbosity... :-(
   104                  make ARCH=${CT_KERNEL_ARCH} symlinks include/linux/version.h
   105                  ;;
   106         2.6)     mkdir -p "${CT_BUILD_DIR}/build-kernel-headers"
   107                  cd "${CT_BUILD_DIR}/build-kernel-headers"
   108                  cp "${CT_KERNEL_LINUX_CONFIG_FILE}" .config
   109                  CT_DoYes "" |make -C "${CT_SRC_DIR}/${CT_KERNEL_FILE}"         \
   110                                    O="`pwd`" ${V_OPT} ARCH=${CT_KERNEL_ARCH}    \
   111                                    oldconfig
   112                  case "${CT_KERNEL_ARCH}" in
   113                      sh*)        # sh does secret stuff in 'make prepare' that can't be
   114                                  # triggered separately, but happily, it doesn't use
   115                                  # target gcc, so we can use it.
   116                                  # Update: this fails on 2.6.11, as it installs
   117                                  # elfconfig.h, which requires target compiler :-(
   118                                  make ${PARALLELMFLAGS}                 \
   119                                       ARCH=${CT_KERNEL_ARCH} ${V_OPT}   \
   120                                       prepare include/linux/version.h
   121                                  ;;
   122                      arm*|cris*) make ${PARALLELMFLAGS}                 \
   123                                       ARCH=${CT_KERNEL_ARCH} ${V_OPT}       \
   124                                       include/asm include/linux/version.h   \
   125                                       include/asm-${CT_KERNEL_ARCH}/.arch
   126                                  ;;
   127                      mips*)      # for linux-2.6, 'make prepare' for mips doesn't 
   128                                  # actually create any symlinks.  Hope generic is ok.
   129                                  # Note that glibc ignores all -I flags passed in CFLAGS,
   130                                  # so you have to use -isystem.
   131                                  make ${PARALLELMFLAGS}                 \
   132                                       ARCH=${CT_KERNEL_ARCH} ${V_OPT}   \
   133                                       include/asm include/linux/version.h
   134                                  TARGET_CFLAGS="${TARGET_CFLAGS} -isystem ${LINUX_HEADER_DIR}/include/asm-mips/mach-generic"
   135                                  ;;
   136                      *)          make ${PARALLELMFLAGS}                 \
   137                                       ARCH=${CT_KERNEL_ARCH} ${V_OPT}   \
   138                                       include/asm include/linux/version.h
   139                                  ;;
   140                  esac
   141                  ;;
   142     esac 2>&1 |CT_DoLog DEBUG
   143 
   144     CT_DoLog EXTRA "Copying kernel headers"
   145     cp -rv include/asm-generic "${CT_HEADERS_DIR}/asm-generic" 2>&1 |CT_DoLog DEBUG
   146     cp -rv include/linux "${CT_HEADERS_DIR}" 2>&1 |CT_DoLog DEBUG
   147     cp -rv include/asm-${CT_KERNEL_ARCH} "${CT_HEADERS_DIR}/asm" 2>&1 |CT_DoLog DEBUG
   148 }