scripts/build/kernel/linux.sh
author "Yann E. MORIN" <yann.morin.1998@free.fr>
Sun May 11 23:43:52 2014 +0200 (2014-05-11)
changeset 3320 78af1c99bc6d
parent 3262 87ad9e82546d
permissions -rw-r--r--
scripts/functions: add target_endian_le and target_endian_be

We currently define target_endian_el and target_endian_eb to be the
tuple extension depending on endianness, defined to be respectively
'el' or 'eb' according to the endianness.

Some architecture do not use 'el' or 'eb', but use 'le' or 'be'.

Provide that as well, as two new variables: target_endian_le and
target_endian_be.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Cody P Schafer <dev@codyps.com>
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
esben@3065
     9
        # Some no-mmu linux targets requires a -uclinux tuple (like m68k/cf),
esben@3065
    10
        # while others must have a -linux tuple (like bfin).  Other targets
esben@3065
    11
        # should be added here when someone starts to care about them.
esben@3065
    12
        case "${CT_ARCH}" in
esben@3065
    13
            blackfin)   CT_TARGET_KERNEL="linux" ;;
esben@3065
    14
            m68k)       CT_TARGET_KERNEL="uclinux" ;;
esben@3065
    15
            *)          CT_Abort "Unsupported no-mmu arch '${CT_ARCH}'"
esben@3065
    16
        esac
yann@1345
    17
    fi
yann@1345
    18
}
yann@1345
    19
yann@1345
    20
# Download the kernel
yann@1345
    21
do_kernel_get() {
yann@2264
    22
    local k_ver
yann@2603
    23
    local custom_name
yann@2690
    24
    local rel_dir
yann@2690
    25
    local korg_base mirror_base
yann@2603
    26
yann@2603
    27
    if [ "${CT_KERNEL_LINUX_USE_CUSTOM_HEADERS}" = "y"  ]; then
yann@2603
    28
        return 0
yann@2603
    29
    fi
yann@2603
    30
yann@2603
    31
    if [ "${CT_KERNEL_LINUX_CUSTOM}" = "y" ]; then
david@3076
    32
        CT_GetCustom "linux" "${CT_KERNEL_VERSION}"     \
david@3076
    33
                     "${CT_KERNEL_LINUX_CUSTOM_LOCATION}"
yann@2603
    34
    else # Not a custom tarball
yann@2264
    35
        case "${CT_KERNEL_VERSION}" in
yann@2567
    36
            2.6.*.*|3.*.*)
yann@2567
    37
                # 4-part versions (for 2.6 stables and long-terms), and
yann@2567
    38
                # 3-part versions (for 3.x.y stables and long-terms),
yann@2567
    39
                # we need to trash the last digit
yann@2264
    40
                k_ver="${CT_KERNEL_VERSION%.*}"
yann@2264
    41
                ;;
yann@2567
    42
            2.6.*|3.*)
yann@2567
    43
                # 3-part version (for 2.6.x initial releases), and 2-part
yann@2567
    44
                # versions (for 3.x initial releases), use all of it
yann@2264
    45
                k_ver="${CT_KERNEL_VERSION}"
yann@2264
    46
                ;;
yann@2264
    47
        esac
yann@2690
    48
        case "${CT_KERNEL_VERSION}" in
yann@2690
    49
            2.6.*)  rel_dir=v2.6;;
yann@2690
    50
            3.*)    rel_dir=v3.x;;
yann@2690
    51
        esac
yann@2690
    52
        korg_base="http://ftp.kernel.org/pub/linux/kernel/${rel_dir}"
yann@2798
    53
        CT_GetFile "linux-${CT_KERNEL_VERSION}"         \
yann@2798
    54
                   "${korg_base}"                       \
yann@2798
    55
                   "${korg_base}/longterm/v${k_ver}"    \
benoit@2800
    56
                   "${korg_base}/longterm"
yann@1345
    57
    fi
yann@1345
    58
}
yann@1345
    59
yann@1345
    60
# Extract kernel
yann@1345
    61
do_kernel_extract() {
yann@3079
    62
    # If using a custom headers tree, nothing to do
yann@3080
    63
    if [ "${CT_KERNEL_LINUX_USE_CUSTOM_HEADERS}" = "y" ]; then
yann@2603
    64
        return 0
yann@1345
    65
    fi
yann@3079
    66
yann@3079
    67
    # If using a custom directory location, nothing to do
yann@3079
    68
    if [ "${CT_KERNEL_LINUX_CUSTOM}" = "y"    \
yann@3079
    69
         -a -d "${CT_SRC_DIR}/linux-${CT_KERNEL_VERSION}" ]; then
yann@3079
    70
        return 0
yann@3079
    71
    fi
yann@3079
    72
yann@3079
    73
    # Otherwise, we're using either a mainstream tarball, or a custom
yann@3079
    74
    # tarball; in either case, we need to extract
yann@2603
    75
    CT_Extract "linux-${CT_KERNEL_VERSION}"
yann@3079
    76
yann@3079
    77
    # If using a custom tarball, no need to patch
yann@3079
    78
    if [ "${CT_KERNEL_LINUX_CUSTOM}" = "y" ]; then
yann@3079
    79
        return 0
yann@3079
    80
    fi
yann@2603
    81
    CT_Patch "linux" "${CT_KERNEL_VERSION}"
yann@1345
    82
}
yann@1345
    83
yann@1345
    84
# Wrapper to the actual headers install method
yann@1345
    85
do_kernel_headers() {
yann@1345
    86
    CT_DoStep INFO "Installing kernel headers"
yann@1345
    87
yann@2603
    88
    if [ "${CT_KERNEL_LINUX_USE_CUSTOM_HEADERS}" = "y" ]; then
yann@2603
    89
        do_kernel_custom
yann@2603
    90
    else
yann@1989
    91
        do_kernel_install
yann@1345
    92
    fi
yann@1345
    93
yann@1345
    94
    CT_EndStep
yann@1345
    95
}
yann@1345
    96
yann@1345
    97
# Install kernel headers using headers_install from kernel sources.
yann@1345
    98
do_kernel_install() {
yann@1990
    99
    local kernel_path
yann@3265
   100
    local kernel_arch
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
zhenqiang@3261
   112
    kernel_arch="${CT_ARCH}"
yann@3262
   113
    case "${CT_ARCH}:${CT_ARCH_BITNESS}" in
yann@3262
   114
        # ARM 64 (aka AArch64) is special
yann@3262
   115
        arm:64) kernel_arch="arm64";;
yann@3262
   116
    esac
zhenqiang@3261
   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@3265
   122
         ARCH=${kernel_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@3265
   132
             ARCH=${kernel_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;;
jerzy@3204
   164
            *.tar.xz)   tar_opt=--xz;;
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
}