scripts/build/kernel/linux.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Mon Sep 26 22:59:14 2011 +0200 (2011-09-26)
changeset 2690 7e0a5e30a02c
parent 2680 b94e0f9d15a3
child 2798 4d92888ec7cb
permissions -rw-r--r--
kernel/linux: prepare for 3.1 and above

The real upstream location is not in the '3.0' directory, but
in the '3.x' directory.

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