scripts/build/kernel_linux.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sat May 03 17:51:16 2008 +0000 (2008-05-03)
changeset 486 92f6149c4275
parent 199 d799643901c3
child 523 010f6f4e4dd6
permissions -rw-r--r--
Some people are reposrting that ftp does not work on their network, probably due to proxies, while http does work.
Some (most) of the sites we use toretrieve tarballs have http equivallent for the ftp service. Use http as a failover.
There's no solution for those sites that do not have such an http equivalent.

/trunk/scripts/build/binutils.sh | 5 2 3 0 ++---
/trunk/scripts/build/libc_glibc.sh | 4 2 2 0 ++--
/trunk/scripts/build/libc_uClibc.sh | 2 1 1 0 +-
/trunk/scripts/build/debug/400-ltrace.sh | 2 1 1 0 +-
/trunk/scripts/build/debug/300-gdb.sh | 8 3 5 0 +++-----
/trunk/scripts/build/kernel_linux.sh | 7 2 5 0 ++-----
/trunk/scripts/build/cc_gcc.sh | 6 2 4 0 ++----
/trunk/scripts/build/gmp.sh | 4 1 3 0 +---
8 files changed, 14 insertions(+), 24 deletions(-)
yann@1
     1
# This file declares functions to install the kernel headers for linux
yann@1
     2
# Copyright 2007 Yann E. MORIN
yann@1
     3
# Licensed under the GPL v2. See COPYING in the root of this package
yann@1
     4
yann@161
     5
do_print_filename() {
yann@161
     6
    [ "${CT_KERNEL}" = "linux" ] || return 0
yann@164
     7
    case "${CT_KERNEL_LINUX_HEADERS_SANITISED}" in
yann@164
     8
        y)  echo "linux-libc-headers-${CT_KERNEL_VERSION}";;
yann@164
     9
        *)  echo "linux-${CT_KERNEL_VERSION}";;
yann@164
    10
    esac
yann@161
    11
}
yann@161
    12
yann@63
    13
# Download the kernel
yann@63
    14
do_kernel_get() {
yann@63
    15
    if [ "${CT_KERNEL_LINUX_HEADERS_USE_CUSTOM_DIR}" != "y" ]; then
yann@486
    16
        CT_GetFile "${CT_KERNEL_FILE}"                                                  \
yann@486
    17
                   {ftp,http}://ftp.kernel.org/pub/linux/kernel/v2.{6{,/testing},4,2}   \
yann@63
    18
                   http://ep09.pld-linux.org/~mmazur/linux-libc-headers
yann@63
    19
    fi
yann@63
    20
    return 0
yann@63
    21
}
yann@63
    22
yann@63
    23
# Extract kernel
yann@63
    24
do_kernel_extract() {
yann@63
    25
    if [ "${CT_KERNEL_LINUX_HEADERS_USE_CUSTOM_DIR}" != "y" ]; then
yann@63
    26
        CT_ExtractAndPatch "${CT_KERNEL_FILE}"
yann@63
    27
    fi
yann@63
    28
    return 0
yann@63
    29
}
yann@63
    30
yann@1
    31
# Check kernel configuration
yann@1
    32
do_kernel_check_config() {
yann@66
    33
    # Only the copied or sanitised headers need a config file.
yann@66
    34
    # Pre-existing headers as well as headers_install don't.
yann@66
    35
    if [ "${CT_KERNEL_LINUX_NEEDS_CONFIG}" = "y"        \
yann@66
    36
         -a \( -z "${CT_KERNEL_LINUX_CONFIG_FILE}"      \
yann@66
    37
               -o ! -r "${CT_KERNEL_LINUX_CONFIG_FILE}" \
yann@66
    38
            \)                                          \
yann@66
    39
       ]; then
yann@49
    40
        CT_DoLog WARN "You did not provide a kernel configuration file!"
yann@49
    41
        CT_DoLog WARN "I will try to generate one for you, but beware!"
yann@49
    42
yann@49
    43
        CT_DoStep INFO "Building a default configuration file for linux kernel"
yann@49
    44
yann@49
    45
        mkdir -p "${CT_BUILD_DIR}/build-kernel-defconfig"
yann@49
    46
        cd "${CT_BUILD_DIR}/build-kernel-defconfig"
yann@49
    47
        make -C "${CT_SRC_DIR}/${CT_KERNEL_FILE}" O=`pwd`   \
yann@78
    48
             ARCH=${CT_KERNEL_ARCH} defconfig               2>&1 |CT_DoLog ALL
yann@49
    49
yann@49
    50
        CT_KERNEL_LINUX_CONFIG_FILE="`pwd`/.config"
yann@49
    51
yann@49
    52
        CT_EndStep
yann@37
    53
    fi
yann@1
    54
}
yann@1
    55
yann@1
    56
# Wrapper to the actual headers install method
yann@1
    57
do_kernel_headers() {
yann@1
    58
    CT_DoStep INFO "Installing kernel headers"
yann@1
    59
yann@37
    60
    # Special case when using pre-installed headers
yann@37
    61
    if [ "${CT_KERNEL_LINUX_HEADERS_USE_CUSTOM_DIR}" = "y" ]; then
yann@37
    62
        do_kernel_preinstalled
yann@1
    63
    else
yann@37
    64
        # We need to enter this directory to find the kernel version strings
yann@37
    65
        cd "${CT_SRC_DIR}/${CT_KERNEL_FILE}"
yann@37
    66
        if [ "${CT_KERNEL_LINUX_HEADERS_SANITISED}" != "y" ]; then
yann@37
    67
            k_version=`awk '/^VERSION =/ { print $3 }' Makefile`
yann@37
    68
            k_patchlevel=`awk '/^PATCHLEVEL =/ { print $3 }' Makefile`
yann@37
    69
            k_sublevel=`awk '/^SUBLEVEL =/ { print $3 }' Makefile`
yann@37
    70
            k_extraversion=`awk '/^EXTRAVERSION =/ { print $3 }' Makefile`
yann@37
    71
        else
yann@37
    72
            k_version=`echo "${CT_KERNEL_VERSION}." |cut -d . -f 1`
yann@37
    73
            k_patchlevel=`echo "${CT_KERNEL_VERSION}." |cut -d . -f 2`
yann@37
    74
            k_sublevel=`echo "${CT_KERNEL_VERSION}." |cut -d . -f 3`
yann@37
    75
            k_extraversion=`echo "${CT_KERNEL_VERSION}." |cut -d . -f 4`
yann@37
    76
        fi
yann@1
    77
yann@37
    78
        case "${k_version}.${k_patchlevel}" in
yann@37
    79
            2.2|2.4|2.6) ;;
yann@37
    80
            *)  CT_Abort "Unsupported kernel version \"linux-${k_version}.${k_patchlevel}\".";;
yann@37
    81
        esac
yann@1
    82
yann@37
    83
        # Kernel version that support verbosity will use this, others will ignore it:
yann@37
    84
        V_OPT="V=${CT_KERNEL_LINUX_VERBOSE_LEVEL}"
yann@1
    85
yann@37
    86
        if [ "${CT_KERNEL_LINUX_HEADERS_INSTALL}" = "y" ]; then
yann@37
    87
            do_kernel_install
yann@37
    88
        elif [ "${CT_KERNEL_LINUX_HEADERS_SANITISED}" = "y" ]; then
yann@37
    89
            do_kernel_sanitised
yann@37
    90
        else [ "${CT_KERNEL_LINUX_HEADERS_COPY}" = "y" ];
yann@37
    91
            do_kernel_copy
yann@37
    92
        fi
yann@1
    93
    fi
yann@1
    94
yann@1
    95
    CT_EndStep
yann@1
    96
}
yann@1
    97
yann@1
    98
# Install kernel headers using headers_install from kernel sources.
yann@1
    99
do_kernel_install() {
yann@78
   100
    CT_DoLog DEBUG "Using kernel's headers_install"
yann@1
   101
yann@1
   102
    mkdir -p "${CT_BUILD_DIR}/build-kernel-headers"
yann@1
   103
    cd "${CT_BUILD_DIR}/build-kernel-headers"
yann@1
   104
yann@1
   105
    case "${k_version}.${k_patchlevel}" in
yann@1
   106
        2.6) [ ${k_sublevel} -ge 18 ] || CT_Abort "Kernel version >= 2.6.18 is needed to install kernel headers.";;
yann@1
   107
        *)   CT_Abort "Kernel version >= 2.6.18 is needed to install kernel headers.";;
yann@1
   108
    esac
yann@1
   109
yann@1
   110
    CT_DoLog EXTRA "Installing kernel headers"
yann@64
   111
    make -C "${CT_SRC_DIR}/${CT_KERNEL_FILE}"       \
yann@64
   112
         O="`pwd`"                                  \
yann@64
   113
         ARCH=${CT_KERNEL_ARCH}                     \
yann@1
   114
         INSTALL_HDR_PATH="${CT_SYSROOT_DIR}/usr"   \
yann@1
   115
         ${V_OPT}                                   \
yann@78
   116
         headers_install                            2>&1 |CT_DoLog ALL
yann@1
   117
yann@199
   118
    if [ "${CT_KERNEL_LINUX_HEADERS_INSTALL_CHECK}" = "y" ]; then
yann@199
   119
        CT_DoLog EXTRA "Checking installed headers"
yann@199
   120
        make -C "${CT_SRC_DIR}/${CT_KERNEL_FILE}"       \
yann@199
   121
             O="`pwd`"                                  \
yann@199
   122
             ARCH=${CT_KERNEL_ARCH}                     \
yann@199
   123
             INSTALL_HDR_PATH="${CT_SYSROOT_DIR}/usr"   \
yann@199
   124
             ${V_OPT}                                   \
yann@199
   125
             headers_check                              2>&1 |CT_DoLog ALL
yann@199
   126
        find "${CT_SYSROOT_DIR}" -type f -name '.check*' -exec rm {} \;
yann@199
   127
    fi
yann@1
   128
}
yann@1
   129
yann@1
   130
# Install kernel headers from oldish Mazur's sanitised headers.
yann@1
   131
do_kernel_sanitised() {
yann@1
   132
    CT_DoLog EXTRA "Copying sanitised headers"
yann@1
   133
    cd "${CT_SRC_DIR}/${CT_KERNEL_FILE}"
yann@78
   134
    cp -rv include/linux "${CT_HEADERS_DIR}" 2>&1 |CT_DoLog ALL
yann@78
   135
    cp -rv "include/asm-${CT_KERNEL_ARCH}" "${CT_HEADERS_DIR}/asm" 2>&1 |CT_DoLog ALL
yann@1
   136
}
yann@1
   137
yann@1
   138
# Install kernel headers by plain copy.
yann@1
   139
do_kernel_copy() {
yann@78
   140
    CT_DoLog DEBUG "Copying plain kernel headers"
yann@1
   141
    CT_DoLog WARN "You are using plain kernel headers. You really shouldn't do that."
yann@1
   142
    CT_DoLog WARN "You'd be better off by using installed headers (or sanitised headers)."
yann@1
   143
yann@1
   144
    # 2.2 and 2.4 don't support building out-of-tree. 2.6 does.
yann@1
   145
    CT_DoLog EXTRA "Preparing kernel headers"
yann@1
   146
    case "${k_version}.${k_patchlevel}" in
yann@1
   147
        2.2|2.4) cd "${CT_SRC_DIR}/${CT_KERNEL_FILE}"
yann@1
   148
                 cp "${CT_KERNEL_LINUX_CONFIG_FILE}" .config
yann@1
   149
                 CT_DoYes "" |make ARCH=${CT_KERNEL_ARCH} oldconfig
yann@1
   150
                 # 2.4 doesn't follow V=# for verbosity... :-(
yann@1
   151
                 make ARCH=${CT_KERNEL_ARCH} symlinks include/linux/version.h
yann@1
   152
                 ;;
yann@1
   153
        2.6)     mkdir -p "${CT_BUILD_DIR}/build-kernel-headers"
yann@1
   154
                 cd "${CT_BUILD_DIR}/build-kernel-headers"
yann@1
   155
                 cp "${CT_KERNEL_LINUX_CONFIG_FILE}" .config
yann@1
   156
                 CT_DoYes "" |make -C "${CT_SRC_DIR}/${CT_KERNEL_FILE}"         \
yann@1
   157
                                   O="`pwd`" ${V_OPT} ARCH=${CT_KERNEL_ARCH}    \
yann@1
   158
                                   oldconfig
yann@1
   159
                 case "${CT_KERNEL_ARCH}" in
yann@1
   160
                     sh*)        # sh does secret stuff in 'make prepare' that can't be
yann@1
   161
                                 # triggered separately, but happily, it doesn't use
yann@1
   162
                                 # target gcc, so we can use it.
yann@1
   163
                                 # Update: this fails on 2.6.11, as it installs
yann@1
   164
                                 # elfconfig.h, which requires target compiler :-(
yann@1
   165
                                 make ${PARALLELMFLAGS}                 \
yann@1
   166
                                      ARCH=${CT_KERNEL_ARCH} ${V_OPT}   \
yann@1
   167
                                      prepare include/linux/version.h
yann@1
   168
                                 ;;
yann@1
   169
                     arm*|cris*) make ${PARALLELMFLAGS}                 \
yann@1
   170
                                      ARCH=${CT_KERNEL_ARCH} ${V_OPT}       \
yann@1
   171
                                      include/asm include/linux/version.h   \
yann@1
   172
                                      include/asm-${CT_KERNEL_ARCH}/.arch
yann@1
   173
                                 ;;
yann@1
   174
                     mips*)      # for linux-2.6, 'make prepare' for mips doesn't 
yann@1
   175
                                 # actually create any symlinks.  Hope generic is ok.
yann@1
   176
                                 # Note that glibc ignores all -I flags passed in CFLAGS,
yann@1
   177
                                 # so you have to use -isystem.
yann@1
   178
                                 make ${PARALLELMFLAGS}                 \
yann@1
   179
                                      ARCH=${CT_KERNEL_ARCH} ${V_OPT}   \
yann@1
   180
                                      include/asm include/linux/version.h
yann@1
   181
                                 TARGET_CFLAGS="${TARGET_CFLAGS} -isystem ${LINUX_HEADER_DIR}/include/asm-mips/mach-generic"
yann@1
   182
                                 ;;
yann@1
   183
                     *)          make ${PARALLELMFLAGS}                 \
yann@1
   184
                                      ARCH=${CT_KERNEL_ARCH} ${V_OPT}   \
yann@1
   185
                                      include/asm include/linux/version.h
yann@1
   186
                                 ;;
yann@1
   187
                 esac
yann@1
   188
                 ;;
yann@78
   189
    esac 2>&1 |CT_DoLog ALL
yann@1
   190
yann@1
   191
    CT_DoLog EXTRA "Copying kernel headers"
yann@78
   192
    cp -rv include/asm-generic "${CT_HEADERS_DIR}/asm-generic" 2>&1 |CT_DoLog ALL
yann@78
   193
    cp -rv include/linux "${CT_HEADERS_DIR}" 2>&1 |CT_DoLog ALL
yann@78
   194
    cp -rv include/asm-${CT_KERNEL_ARCH} "${CT_HEADERS_DIR}/asm" 2>&1 |CT_DoLog ALL
yann@1
   195
}
yann@37
   196
yann@37
   197
# Use preinstalled headers (most probably by using make headers_install in a
yann@37
   198
# modified (read: customised) kernel tree). In this case, simply copy
yann@37
   199
# the headers in place
yann@37
   200
do_kernel_preinstalled() {
yann@37
   201
    CT_DoLog EXTRA "Copying preinstalled kernel headers"
yann@37
   202
yann@37
   203
    mkdir -p "${CT_SYSROOT_DIR}/usr"
yann@37
   204
    cd "${CT_KERNEL_LINUX_HEADERS_CUSTOM_DIR}"
yann@78
   205
    cp -rv include "${CT_SYSROOT_DIR}/usr" 2>&1 |CT_DoLog ALL
yann@37
   206
}