scripts/build/kernel/linux.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Wed Sep 21 22:42:35 2011 +0200 (2011-09-21)
branch1.12
changeset 2685 86010f887870
parent 2567 92e02b41d2d1
permissions -rw-r--r--
kernel/linux: add alternate download locations

Since kernel.org is dead, and there is no announced or known estimated
time or return to normality, it is impossible to download any kernel at
this time.

Add a known-working mirror.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
(transplanted from 7df89370f80537d1b36b2fda70e3a1c6bc237a65)
yann@1345
     1
# This file declares functions to install the kernel headers for linux
yann@1345
     2
# Copyright 2007 Yann E. MORIN
yann@1345
     3
# Licensed under the GPL v2. See COPYING in the root of this package
yann@1345
     4
yann@1345
     5
CT_DoKernelTupleValues() {
yann@1345
     6
    if [ "${CT_ARCH_USE_MMU}" = "y" ]; then
yann@1345
     7
        CT_TARGET_KERNEL="linux"
yann@1345
     8
    else
thomas@1910
     9
    # Sometime, noMMU linux targets have a -uclinux tuple, while
thomas@1910
    10
    # sometime it's -linux. We currently have only one noMMU linux
thomas@1910
    11
    # target, and it uses -linux, so let's just use that. Time
thomas@1910
    12
    # to fix that later...
thomas@1910
    13
    #    CT_TARGET_KERNEL="uclinux"
thomas@1910
    14
        CT_TARGET_KERNEL="linux"
yann@1345
    15
    fi
yann@1345
    16
}
yann@1345
    17
yann@1345
    18
# Download the kernel
yann@1345
    19
do_kernel_get() {
yann@2264
    20
    local k_ver
yann@1990
    21
    if [    "${CT_KERNEL_LINUX_INSTALL}" = "y"  \
yann@1990
    22
         -a "${CT_KERNEL_LINUX_CUSTOM}" != "y"  \
yann@1990
    23
       ]; then
yann@2264
    24
        case "${CT_KERNEL_VERSION}" in
yann@2567
    25
            2.6.*.*|3.*.*)
yann@2567
    26
                # 4-part versions (for 2.6 stables and long-terms), and
yann@2567
    27
                # 3-part versions (for 3.x.y stables and long-terms),
yann@2567
    28
                # we need to trash the last digit
yann@2264
    29
                k_ver="${CT_KERNEL_VERSION%.*}"
yann@2264
    30
                ;;
yann@2567
    31
            2.6.*|3.*)
yann@2567
    32
                # 3-part version (for 2.6.x initial releases), and 2-part
yann@2567
    33
                # versions (for 3.x initial releases), use all of it
yann@2264
    34
                k_ver="${CT_KERNEL_VERSION}"
yann@2264
    35
                ;;
yann@2264
    36
        esac
yann@2567
    37
        CT_GetFile "linux-${CT_KERNEL_VERSION}"                                             \
yann@2567
    38
                   http://ftp.{de.,eu.,}kernel.org/pub/linux/kernel/v2.6                    \
yann@2567
    39
                   http://ftp.{de.,eu.,}kernel.org/pub/linux/kernel/v3.0                    \
yann@2567
    40
                   http://ftp.{de.,eu.,}kernel.org/pub/linux/kernel/v2.6/longterm/v${k_ver} \
yann@2685
    41
                   http://ftp.{de.,eu.,}kernel.org/pub/linux/kernel/v3.0/longterm/v${k_ver} \
yann@2685
    42
                   http://ftp.free.fr/mirrors/ftp.kernel.org//linux/kernel/v2.6             \
yann@2685
    43
                   http://ftp.free.fr/mirrors/ftp.kernel.org//linux/kernel/v3.0             \
yann@2685
    44
                   http://ftp.free.fr/mirrors/ftp.kernel.org//linux/kernel/v2.6/longterm/v${k_ver}  \
yann@2685
    45
                   http://ftp.free.fr/mirrors/ftp.kernel.org//linux/kernel/v3.0/longterm/v${k_ver}
yann@1345
    46
    fi
yann@1345
    47
}
yann@1345
    48
yann@1345
    49
# Extract kernel
yann@1345
    50
do_kernel_extract() {
yann@1990
    51
    local tar_opt
yann@1989
    52
    if [ "${CT_KERNEL_LINUX_INSTALL}" = "y" ]; then
yann@1990
    53
        if [ "${CT_KERNEL_LINUX_CUSTOM}" = "y" ]; then
yann@1990
    54
            # We extract the custom linux tree into a directory with a
yann@1990
    55
            # well-known name, and strip the leading directory component
yann@1990
    56
            # of the extracted pathes. This is needed because we do not
yann@1990
    57
            # know the value for this first component, because it is a
yann@1990
    58
            # _custom_ tree.
yann@1990
    59
            # Also, we have to protect from partial extraction using the
yann@1990
    60
            # .extracting and .extracted locks (not using .patching and
yann@1990
    61
            # .patched as we are *not* patching that kernel).
yann@1990
    62
yann@1990
    63
            if [ -e "${CT_SRC_DIR}/.linux-custom.extracted" ]; then
yann@1990
    64
                CT_DoLog DEBUG "Custom linux kernel tree already extracted"
yann@1990
    65
                return 0
yann@1990
    66
            fi
yann@1990
    67
yann@1990
    68
            CT_TestAndAbort "Custom kernel tree partially extracted. Remove before resuming" -f "${CT_SRC_DIR}/.linux-custom.extracting"
yann@1990
    69
            CT_DoExecLog DEBUG touch "${CT_SRC_DIR}/.linux-custom.extracting"
yann@1990
    70
            CT_DoExecLog DEBUG mkdir "${CT_SRC_DIR}/linux-custom"
yann@1990
    71
yann@1990
    72
            case "${CT_KERNEL_LINUX_CUSTOM_TARBALL}" in
yann@1990
    73
                *.tar.bz2)      tar_opt=-j;;
yann@1990
    74
                *.tar.gz|*.tgz) tar_opt=-z;;
yann@1990
    75
                *.tar)          ;;
yann@1990
    76
                *)              CT_Abort "Don't know how to handle '${CT_KERNEL_LINUX_CUSTOM_TARBALL}': unknown extension";;
yann@1990
    77
            esac
yann@1990
    78
            CT_DoLog EXTRA "Extracting custom linux kernel"
yann@1990
    79
            CT_DoExecLog ALL tar x -C "${CT_SRC_DIR}/linux-custom"      \
yann@1990
    80
                                 --strip-components 1 -v ${tar_opt}     \
yann@1990
    81
                                 -f "${CT_KERNEL_LINUX_CUSTOM_TARBALL}"
yann@1990
    82
yann@1990
    83
            CT_DoExecLog ALL mv -v "${CT_SRC_DIR}/.linux-custom.extracting" "${CT_SRC_DIR}/.linux-custom.extracted"
yann@1990
    84
        else
yann@1990
    85
            CT_Extract "linux-${CT_KERNEL_VERSION}"
yann@1990
    86
            CT_Patch "linux" "${CT_KERNEL_VERSION}"
yann@1990
    87
        fi
yann@1345
    88
    fi
yann@1345
    89
}
yann@1345
    90
yann@1345
    91
# Wrapper to the actual headers install method
yann@1345
    92
do_kernel_headers() {
yann@1345
    93
    CT_DoStep INFO "Installing kernel headers"
yann@1345
    94
yann@1989
    95
    if [ "${CT_KERNEL_LINUX_INSTALL}" = "y" ]; then
yann@1989
    96
        do_kernel_install
yann@1989
    97
    else
yann@1345
    98
        do_kernel_custom
yann@1345
    99
    fi
yann@1345
   100
yann@1345
   101
    CT_EndStep
yann@1345
   102
}
yann@1345
   103
yann@1345
   104
# Install kernel headers using headers_install from kernel sources.
yann@1345
   105
do_kernel_install() {
yann@1990
   106
    local kernel_path
yann@1990
   107
yann@1345
   108
    CT_DoLog DEBUG "Using kernel's headers_install"
yann@1345
   109
yann@1345
   110
    mkdir -p "${CT_BUILD_DIR}/build-kernel-headers"
yann@1345
   111
yann@1990
   112
    kernel_path="${CT_SRC_DIR}/linux-${CT_KERNEL_VERSION}"
yann@1990
   113
    if [ "${CT_KERNEL_LINUX_CUSTOM}" = "y" ]; then
yann@1990
   114
        kernel_path="${CT_SRC_DIR}/linux-custom"
yann@1990
   115
    fi
yann@1345
   116
    V_OPT="V=${CT_KERNEL_LINUX_VERBOSE_LEVEL}"
yann@1345
   117
yann@1345
   118
    CT_DoLog EXTRA "Installing kernel headers"
yann@1345
   119
    CT_DoExecLog ALL                                    \
yann@1990
   120
    make -C "${kernel_path}"                            \
yann@1990
   121
         O="${CT_BUILD_DIR}/build-kernel-headers"       \
yann@1746
   122
         ARCH=${CT_ARCH}                                \
yann@1345
   123
         INSTALL_HDR_PATH="${CT_SYSROOT_DIR}/usr"       \
yann@1345
   124
         ${V_OPT}                                       \
yann@1345
   125
         headers_install
yann@1345
   126
yann@1345
   127
    if [ "${CT_KERNEL_LINUX_INSTALL_CHECK}" = "y" ]; then
yann@1345
   128
        CT_DoLog EXTRA "Checking installed headers"
yann@1345
   129
        CT_DoExecLog ALL                                    \
yann@1990
   130
        make -C "${kernel_path}"                            \
yann@1990
   131
             O="${CT_BUILD_DIR}/build-kernel-headers"       \
yann@1746
   132
             ARCH=${CT_ARCH}                                \
yann@1345
   133
             INSTALL_HDR_PATH="${CT_SYSROOT_DIR}/usr"       \
yann@1345
   134
             ${V_OPT}                                       \
yann@1345
   135
             headers_check
yann@1345
   136
    fi
bryanhundven@2228
   137
bryanhundven@2228
   138
    # Cleanup
bryanhundven@2228
   139
    find "${CT_SYSROOT_DIR}" -type f                        \
bryanhundven@2228
   140
                             \(    -name '.install'         \
bryanhundven@2228
   141
                                -o -name '..install.cmd'    \
bryanhundven@2228
   142
                                -o -name '.check'           \
bryanhundven@2228
   143
                                -o -name '..check.cmd'      \
bryanhundven@2228
   144
                             \)                             \
bryanhundven@2228
   145
                             -exec rm {} \;
yann@1345
   146
}
yann@1345
   147
yann@1345
   148
# Use custom headers (most probably by using make headers_install in a
yann@1345
   149
# modified (read: customised) kernel tree, or using pre-2.6.18 headers, such
yann@1345
   150
# as 2.4). In this case, simply copy the headers in place
yann@1345
   151
do_kernel_custom() {
yann@1345
   152
    local tar_opt
yann@1345
   153
yann@1345
   154
    CT_DoLog EXTRA "Installing custom kernel headers"
yann@1345
   155
yann@1345
   156
    mkdir -p "${CT_SYSROOT_DIR}/usr"
yann@1345
   157
    cd "${CT_SYSROOT_DIR}/usr"
yann@1345
   158
    if [ "${CT_KERNEL_LINUX_CUSTOM_IS_TARBALL}" = "y" ]; then
yann@1345
   159
        case "${CT_KERNEL_LINUX_CUSTOM_PATH}" in
yann@1345
   160
            *.tar)      ;;
yann@1345
   161
            *.tgz)      tar_opt=--gzip;;
yann@1345
   162
            *.tar.gz)   tar_opt=--gzip;;
yann@1345
   163
            *.tar.bz2)  tar_opt=--bzip2;;
yann@1345
   164
            *.tar.lzma) tar_opt=--lzma;;
yann@1345
   165
        esac
yann@1345
   166
        CT_DoExecLog ALL tar x ${tar_opt} -vf ${CT_KERNEL_LINUX_CUSTOM_PATH}
yann@1345
   167
    else
yann@1345
   168
        CT_DoExecLog ALL cp -rv "${CT_KERNEL_LINUX_CUSTOM_PATH}/include" .
yann@1345
   169
    fi
yann@1345
   170
}