scripts/build/kernel/linux.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Mon Dec 12 00:01:54 2011 +0100 (2011-12-12)
changeset 2798 4d92888ec7cb
parent 2690 7e0a5e30a02c
child 2800 0e8f92344fdb
permissions -rw-r--r--
kernel/linux: add alternate download locations

Some longterm versions are not in the usual directory.
Account for these new locations.

Get rid of the mirror location, now that the main kernel site is
(almost) back to normal operations.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
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@2603
    21
    local custom_name
yann@2690
    22
    local rel_dir
yann@2690
    23
    local korg_base mirror_base
yann@2603
    24
yann@2603
    25
    if [ "${CT_KERNEL_LINUX_USE_CUSTOM_HEADERS}" = "y"  ]; then
yann@2603
    26
        return 0
yann@2603
    27
    fi
yann@2603
    28
yann@2603
    29
    if [ "${CT_KERNEL_LINUX_CUSTOM}" = "y" ]; then
sinseman44@2680
    30
        if [ ! -d "${CT_KERNEL_LINUX_CUSTOM_LOCATION}" ]; then
sinseman44@2680
    31
            # Wee need to know the custom tarball extension,
sinseman44@2680
    32
            # so we can create a properly-named symlink, which
sinseman44@2680
    33
            # we use later on in 'extract'
sinseman44@2680
    34
            case "${CT_KERNEL_LINUX_CUSTOM_LOCATION}" in
sinseman44@2680
    35
                *.tar.bz2)      custom_name="linux-custom.tar.bz2";;
sinseman44@2680
    36
                *.tar.gz|*.tgz) custom_name="linux-custom.tar.gz";;
sinseman44@2680
    37
                *.tar)          custom_name="linux-custom.tar";;
sinseman44@2680
    38
                *)  CT_Abort "Unknown extension for custom linux tarball '${CT_KERNEL_LINUX_CUSTOM_LOCATION}'";;
sinseman44@2680
    39
            esac
sinseman44@2680
    40
            CT_DoExecLog DEBUG ln -sf "${CT_KERNEL_LINUX_CUSTOM_LOCATION}"  \
sinseman44@2680
    41
                                      "${CT_TARBALLS_DIR}/${custom_name}"
sinseman44@2680
    42
        else
sinseman44@2680
    43
            custom_name="linux-custom"
sinseman44@2680
    44
            CT_DoExecLog DEBUG ln -s "${CT_KERNEL_LINUX_CUSTOM_LOCATION}"  \
sinseman44@2680
    45
                                      "${CT_SRC_DIR}/${custom_name}"
sinseman44@2680
    46
        fi
yann@2603
    47
    else # Not a custom tarball
yann@2264
    48
        case "${CT_KERNEL_VERSION}" in
yann@2567
    49
            2.6.*.*|3.*.*)
yann@2567
    50
                # 4-part versions (for 2.6 stables and long-terms), and
yann@2567
    51
                # 3-part versions (for 3.x.y stables and long-terms),
yann@2567
    52
                # we need to trash the last digit
yann@2264
    53
                k_ver="${CT_KERNEL_VERSION%.*}"
yann@2264
    54
                ;;
yann@2567
    55
            2.6.*|3.*)
yann@2567
    56
                # 3-part version (for 2.6.x initial releases), and 2-part
yann@2567
    57
                # versions (for 3.x initial releases), use all of it
yann@2264
    58
                k_ver="${CT_KERNEL_VERSION}"
yann@2264
    59
                ;;
yann@2264
    60
        esac
yann@2690
    61
        case "${CT_KERNEL_VERSION}" in
yann@2690
    62
            2.6.*)  rel_dir=v2.6;;
yann@2690
    63
            3.*)    rel_dir=v3.x;;
yann@2690
    64
        esac
yann@2690
    65
        korg_base="http://ftp.kernel.org/pub/linux/kernel/${rel_dir}"
yann@2798
    66
        CT_GetFile "linux-${CT_KERNEL_VERSION}"         \
yann@2798
    67
                   "${korg_base}"                       \
yann@2798
    68
                   "${korg_base}/longterm/v${k_ver}"    \
yann@2798
    69
                   "${korg_base}/longterm
yann@1345
    70
    fi
yann@1345
    71
}
yann@1345
    72
yann@1345
    73
# Extract kernel
yann@1345
    74
do_kernel_extract() {
sinseman44@2680
    75
    if [ "${CT_KERNEL_LINUX_USE_CUSTOM_HEADERS}" = "y" \
sinseman44@2680
    76
         -o -d "${CT_KERNEL_LINUX_CUSTOM_LOCATION}" ]; then
yann@2603
    77
        return 0
yann@1345
    78
    fi
sinseman44@2680
    79
   
yann@2603
    80
    # This also handles the custom tarball
yann@2603
    81
    CT_Extract "linux-${CT_KERNEL_VERSION}"
yann@2603
    82
    CT_Patch "linux" "${CT_KERNEL_VERSION}"
yann@1345
    83
}
yann@1345
    84
yann@1345
    85
# Wrapper to the actual headers install method
yann@1345
    86
do_kernel_headers() {
yann@1345
    87
    CT_DoStep INFO "Installing kernel headers"
yann@1345
    88
yann@2603
    89
    if [ "${CT_KERNEL_LINUX_USE_CUSTOM_HEADERS}" = "y" ]; then
yann@2603
    90
        do_kernel_custom
yann@2603
    91
    else
yann@1989
    92
        do_kernel_install
yann@1345
    93
    fi
yann@1345
    94
yann@1345
    95
    CT_EndStep
yann@1345
    96
}
yann@1345
    97
yann@1345
    98
# Install kernel headers using headers_install from kernel sources.
yann@1345
    99
do_kernel_install() {
yann@1990
   100
    local kernel_path
yann@1990
   101
yann@1345
   102
    CT_DoLog DEBUG "Using kernel's headers_install"
yann@1345
   103
yann@1345
   104
    mkdir -p "${CT_BUILD_DIR}/build-kernel-headers"
yann@1345
   105
yann@1990
   106
    kernel_path="${CT_SRC_DIR}/linux-${CT_KERNEL_VERSION}"
yann@1990
   107
    if [ "${CT_KERNEL_LINUX_CUSTOM}" = "y" ]; then
yann@1990
   108
        kernel_path="${CT_SRC_DIR}/linux-custom"
yann@1990
   109
    fi
yann@1345
   110
    V_OPT="V=${CT_KERNEL_LINUX_VERBOSE_LEVEL}"
yann@1345
   111
yann@1345
   112
    CT_DoLog EXTRA "Installing kernel headers"
yann@1345
   113
    CT_DoExecLog ALL                                    \
yann@1990
   114
    make -C "${kernel_path}"                            \
yann@1990
   115
         O="${CT_BUILD_DIR}/build-kernel-headers"       \
yann@1746
   116
         ARCH=${CT_ARCH}                                \
yann@1345
   117
         INSTALL_HDR_PATH="${CT_SYSROOT_DIR}/usr"       \
yann@1345
   118
         ${V_OPT}                                       \
yann@1345
   119
         headers_install
yann@1345
   120
yann@1345
   121
    if [ "${CT_KERNEL_LINUX_INSTALL_CHECK}" = "y" ]; then
yann@1345
   122
        CT_DoLog EXTRA "Checking installed headers"
yann@1345
   123
        CT_DoExecLog ALL                                    \
yann@1990
   124
        make -C "${kernel_path}"                            \
yann@1990
   125
             O="${CT_BUILD_DIR}/build-kernel-headers"       \
yann@1746
   126
             ARCH=${CT_ARCH}                                \
yann@1345
   127
             INSTALL_HDR_PATH="${CT_SYSROOT_DIR}/usr"       \
yann@1345
   128
             ${V_OPT}                                       \
yann@1345
   129
             headers_check
yann@1345
   130
    fi
bryanhundven@2228
   131
bryanhundven@2228
   132
    # Cleanup
bryanhundven@2228
   133
    find "${CT_SYSROOT_DIR}" -type f                        \
bryanhundven@2228
   134
                             \(    -name '.install'         \
bryanhundven@2228
   135
                                -o -name '..install.cmd'    \
bryanhundven@2228
   136
                                -o -name '.check'           \
bryanhundven@2228
   137
                                -o -name '..check.cmd'      \
bryanhundven@2228
   138
                             \)                             \
bryanhundven@2228
   139
                             -exec rm {} \;
yann@1345
   140
}
yann@1345
   141
yann@1345
   142
# Use custom headers (most probably by using make headers_install in a
yann@1345
   143
# modified (read: customised) kernel tree, or using pre-2.6.18 headers, such
yann@1345
   144
# as 2.4). In this case, simply copy the headers in place
yann@1345
   145
do_kernel_custom() {
yann@1345
   146
    local tar_opt
yann@1345
   147
yann@1345
   148
    CT_DoLog EXTRA "Installing custom kernel headers"
yann@1345
   149
yann@1345
   150
    mkdir -p "${CT_SYSROOT_DIR}/usr"
yann@1345
   151
    cd "${CT_SYSROOT_DIR}/usr"
yann@1345
   152
    if [ "${CT_KERNEL_LINUX_CUSTOM_IS_TARBALL}" = "y" ]; then
yann@1345
   153
        case "${CT_KERNEL_LINUX_CUSTOM_PATH}" in
yann@1345
   154
            *.tar)      ;;
yann@1345
   155
            *.tgz)      tar_opt=--gzip;;
yann@1345
   156
            *.tar.gz)   tar_opt=--gzip;;
yann@1345
   157
            *.tar.bz2)  tar_opt=--bzip2;;
yann@1345
   158
        esac
yann@1345
   159
        CT_DoExecLog ALL tar x ${tar_opt} -vf ${CT_KERNEL_LINUX_CUSTOM_PATH}
yann@1345
   160
    else
yann@1345
   161
        CT_DoExecLog ALL cp -rv "${CT_KERNEL_LINUX_CUSTOM_PATH}/include" .
yann@1345
   162
    fi
yann@1345
   163
}