1.1 --- a/scripts/build/kernel/linux.sh Tue Jun 15 20:04:01 2010 +0200
1.2 +++ b/scripts/build/kernel/linux.sh Sat Sep 11 12:42:22 2010 +0200
1.3 @@ -17,7 +17,9 @@
1.4
1.5 # Download the kernel
1.6 do_kernel_get() {
1.7 - if [ "${CT_KERNEL_LINUX_INSTALL}" = "y" ]; then
1.8 + if [ "${CT_KERNEL_LINUX_INSTALL}" = "y" \
1.9 + -a "${CT_KERNEL_LINUX_CUSTOM}" != "y" \
1.10 + ]; then
1.11 CT_GetFile "linux-${CT_KERNEL_VERSION}" \
1.12 {ftp,http}://ftp.{de.,eu.,}kernel.org/pub/linux/kernel/v2.{6{,/testing},4,2}
1.13 fi
1.14 @@ -25,9 +27,43 @@
1.15
1.16 # Extract kernel
1.17 do_kernel_extract() {
1.18 + local tar_opt
1.19 if [ "${CT_KERNEL_LINUX_INSTALL}" = "y" ]; then
1.20 - CT_Extract "linux-${CT_KERNEL_VERSION}"
1.21 - CT_Patch "linux" "${CT_KERNEL_VERSION}"
1.22 + if [ "${CT_KERNEL_LINUX_CUSTOM}" = "y" ]; then
1.23 + # We extract the custom linux tree into a directory with a
1.24 + # well-known name, and strip the leading directory component
1.25 + # of the extracted pathes. This is needed because we do not
1.26 + # know the value for this first component, because it is a
1.27 + # _custom_ tree.
1.28 + # Also, we have to protect from partial extraction using the
1.29 + # .extracting and .extracted locks (not using .patching and
1.30 + # .patched as we are *not* patching that kernel).
1.31 +
1.32 + if [ -e "${CT_SRC_DIR}/.linux-custom.extracted" ]; then
1.33 + CT_DoLog DEBUG "Custom linux kernel tree already extracted"
1.34 + return 0
1.35 + fi
1.36 +
1.37 + CT_TestAndAbort "Custom kernel tree partially extracted. Remove before resuming" -f "${CT_SRC_DIR}/.linux-custom.extracting"
1.38 + CT_DoExecLog DEBUG touch "${CT_SRC_DIR}/.linux-custom.extracting"
1.39 + CT_DoExecLog DEBUG mkdir "${CT_SRC_DIR}/linux-custom"
1.40 +
1.41 + case "${CT_KERNEL_LINUX_CUSTOM_TARBALL}" in
1.42 + *.tar.bz2) tar_opt=-j;;
1.43 + *.tar.gz|*.tgz) tar_opt=-z;;
1.44 + *.tar) ;;
1.45 + *) CT_Abort "Don't know how to handle '${CT_KERNEL_LINUX_CUSTOM_TARBALL}': unknown extension";;
1.46 + esac
1.47 + CT_DoLog EXTRA "Extracting custom linux kernel"
1.48 + CT_DoExecLog ALL tar x -C "${CT_SRC_DIR}/linux-custom" \
1.49 + --strip-components 1 -v ${tar_opt} \
1.50 + -f "${CT_KERNEL_LINUX_CUSTOM_TARBALL}"
1.51 +
1.52 + CT_DoExecLog ALL mv -v "${CT_SRC_DIR}/.linux-custom.extracting" "${CT_SRC_DIR}/.linux-custom.extracted"
1.53 + else
1.54 + CT_Extract "linux-${CT_KERNEL_VERSION}"
1.55 + CT_Patch "linux" "${CT_KERNEL_VERSION}"
1.56 + fi
1.57 fi
1.58 }
1.59
1.60 @@ -46,17 +82,22 @@
1.61
1.62 # Install kernel headers using headers_install from kernel sources.
1.63 do_kernel_install() {
1.64 + local kernel_path
1.65 +
1.66 CT_DoLog DEBUG "Using kernel's headers_install"
1.67
1.68 mkdir -p "${CT_BUILD_DIR}/build-kernel-headers"
1.69 - cd "${CT_BUILD_DIR}/build-kernel-headers"
1.70
1.71 + kernel_path="${CT_SRC_DIR}/linux-${CT_KERNEL_VERSION}"
1.72 + if [ "${CT_KERNEL_LINUX_CUSTOM}" = "y" ]; then
1.73 + kernel_path="${CT_SRC_DIR}/linux-custom"
1.74 + fi
1.75 V_OPT="V=${CT_KERNEL_LINUX_VERBOSE_LEVEL}"
1.76
1.77 CT_DoLog EXTRA "Installing kernel headers"
1.78 CT_DoExecLog ALL \
1.79 - make -C "${CT_SRC_DIR}/linux-${CT_KERNEL_VERSION}" \
1.80 - O=$(pwd) \
1.81 + make -C "${kernel_path}" \
1.82 + O="${CT_BUILD_DIR}/build-kernel-headers" \
1.83 ARCH=${CT_ARCH} \
1.84 INSTALL_HDR_PATH="${CT_SYSROOT_DIR}/usr" \
1.85 ${V_OPT} \
1.86 @@ -65,8 +106,8 @@
1.87 if [ "${CT_KERNEL_LINUX_INSTALL_CHECK}" = "y" ]; then
1.88 CT_DoLog EXTRA "Checking installed headers"
1.89 CT_DoExecLog ALL \
1.90 - make -C "${CT_SRC_DIR}/linux-${CT_KERNEL_VERSION}" \
1.91 - O=$(pwd) \
1.92 + make -C "${kernel_path}" \
1.93 + O="${CT_BUILD_DIR}/build-kernel-headers" \
1.94 ARCH=${CT_ARCH} \
1.95 INSTALL_HDR_PATH="${CT_SYSROOT_DIR}/usr" \
1.96 ${V_OPT} \