scripts/build/kernel/linux.sh
author Esben Haabendal <esben.haabendal@prevas.dk>
Wed Sep 26 09:09:23 2012 +0200 (2012-09-26)
changeset 3065 603ccf80c48b
parent 3060 f46a1d105896
child 3076 63d108a39453
permissions -rw-r--r--
kernel/linux: change m68k/no-mmu linux arch tuple to use -uclinux

GCC requires m68k arch tuples to be *-*-uclinux-* to support Linux on
no-mmu m68k (ColdFire) cpus.

Blackfin arch tuple must be *-*-linux-uclibc for FD_PIC_ELF toolchains,
so we cannot just switch to uclinux for no-mmu Linux toolchains.

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