Last active
December 2, 2018 11:48
-
-
Save takumin/77e879b2918f5a4cf1c16dc291e0cd62 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/sh | |
| set -e | |
| ################################################################################ | |
| # Variables | |
| ################################################################################ | |
| # Raspberry Pi Kernel Version | |
| : ${KERNEL_VERSION:="4.14.y"} | |
| # Raspberry Pi Kernel Source URL | |
| : ${SOURCE_URL:="https://github.com/raspberrypi/linux/archive/rpi-${KERNEL_VERSION}.zip"} | |
| # Linaro ARM Toolchain | |
| : ${TOOLCHAIN_BASEURL:="https://releases.linaro.org/components/toolchain/binaries/latest-7"} | |
| : ${TOOLCHAIN_VERSION:="7.3.1"} | |
| : ${TOOLCHAIN_RELEASE:="2018.05"} | |
| # Working Directory | |
| : ${DOWN_DIR:="${HOME}/Downloads"} | |
| : ${WORK_DIR:="/tmp/raspi"} | |
| : ${TOOL_DIR:="${WORK_DIR}/tool"} | |
| : ${BUILD_DIR:="${WORK_DIR}/build"} | |
| : ${SOURCE_DIR:="${WORK_DIR}/source"} | |
| : ${INSTALL_DIR:="${WORK_DIR}/install"} | |
| ################################################################################ | |
| # Cleanup | |
| ################################################################################ | |
| rm -fr "${BUILD_DIR}" | |
| rm -fr "${SOURCE_DIR}" | |
| rm -fr "${INSTALL_DIR}" | |
| ################################################################################ | |
| # Initialize | |
| ################################################################################ | |
| if [ ! -d "${DOWN_DIR}" ]; then | |
| mkdir -p "${DOWN_DIR}" | |
| fi | |
| if [ ! -d "${WORK_DIR}" ]; then | |
| mkdir -p "${WORK_DIR}" | |
| fi | |
| if [ ! -d "${TOOL_DIR}" ]; then | |
| mkdir -p "${TOOL_DIR}" | |
| fi | |
| if [ ! -d "${BUILD_DIR}" ]; then | |
| mkdir -p "${BUILD_DIR}" | |
| fi | |
| if [ ! -d "${SOURCE_DIR}" ]; then | |
| mkdir -p "${SOURCE_DIR}" | |
| fi | |
| if [ ! -d "${INSTALL_DIR}" ]; then | |
| mkdir -p "${INSTALL_DIR}" | |
| fi | |
| ################################################################################ | |
| # Download | |
| ################################################################################ | |
| if [ ! -f "${DOWN_DIR}/linux-rpi-${KERNEL_VERSION}.zip" ]; then | |
| wget -O "${DOWN_DIR}/linux-rpi-${KERNEL_VERSION}.zip" "${SOURCE_URL}" | |
| fi | |
| if [ ! -f "${DOWN_DIR}/gcc-linaro-${TOOLCHAIN_VERSION}-${TOOLCHAIN_RELEASE}-x86_64_armv8l-linux-gnueabihf.tar.xz" ]; then | |
| wget -O "${DOWN_DIR}/gcc-linaro-${TOOLCHAIN_VERSION}-${TOOLCHAIN_RELEASE}-x86_64_armv8l-linux-gnueabihf.tar.xz" \ | |
| "${TOOLCHAIN_BASEURL}/armv8l-linux-gnueabihf/gcc-linaro-${TOOLCHAIN_VERSION}-${TOOLCHAIN_RELEASE}-x86_64_armv8l-linux-gnueabihf.tar.xz" | |
| fi | |
| if [ ! -f "${DOWN_DIR}/gcc-linaro-${TOOLCHAIN_VERSION}-${TOOLCHAIN_RELEASE}-x86_64_aarch64-linux-gnu.tar.xz" ]; then | |
| wget -O "${DOWN_DIR}/gcc-linaro-${TOOLCHAIN_VERSION}-${TOOLCHAIN_RELEASE}-x86_64_aarch64-linux-gnu.tar.xz" \ | |
| "${TOOLCHAIN_BASEURL}/aarch64-linux-gnu/gcc-linaro-${TOOLCHAIN_VERSION}-${TOOLCHAIN_RELEASE}-x86_64_aarch64-linux-gnu.tar.xz" | |
| fi | |
| ################################################################################ | |
| # Extract | |
| ################################################################################ | |
| if [ ! -d "${SOURCE_DIR}/kernel" ]; then | |
| unzip -d "${WORK_DIR}" "${DOWN_DIR}/linux-rpi-${KERNEL_VERSION}.zip" | |
| mv "${WORK_DIR}/linux-rpi-${KERNEL_VERSION}" "${SOURCE_DIR}/kernel" | |
| fi | |
| if [ ! -d "${TOOL_DIR}/gcc-linaro-${TOOLCHAIN_VERSION}-${TOOLCHAIN_RELEASE}-x86_64_armv8l-linux-gnueabihf" ]; then | |
| tar -xvf "${DOWN_DIR}/gcc-linaro-${TOOLCHAIN_VERSION}-${TOOLCHAIN_RELEASE}-x86_64_armv8l-linux-gnueabihf.tar.xz" -C "${TOOL_DIR}" | |
| fi | |
| if [ ! -d "${TOOL_DIR}/gcc-linaro-${TOOLCHAIN_VERSION}-${TOOLCHAIN_RELEASE}-x86_64_aarch64-linux-gnu" ]; then | |
| tar -xvf "${DOWN_DIR}/gcc-linaro-${TOOLCHAIN_VERSION}-${TOOLCHAIN_RELEASE}-x86_64_aarch64-linux-gnu.tar.xz" -C "${TOOL_DIR}" | |
| fi | |
| ################################################################################ | |
| # Build | |
| ################################################################################ | |
| export ARCH="arm64" | |
| export CROSS_COMPILE="${TOOL_DIR}/gcc-linaro-${TOOLCHAIN_VERSION}-${TOOLCHAIN_RELEASE}-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-" | |
| export CROSS32CC="${TOOL_DIR}/gcc-linaro-${TOOLCHAIN_VERSION}-${TOOLCHAIN_RELEASE}-x86_64_armv8l-linux-gnueabihf/bin/armv8l-linux-gnueabihf-gcc" | |
| mkdir -p "${BUILD_DIR}/kernel" | |
| make -j `nproc` -C "${SOURCE_DIR}/kernel" O="${BUILD_DIR}/kernel" bcmrpi3_defconfig | |
| make -j `nproc` -C "${SOURCE_DIR}/kernel" O="${BUILD_DIR}/kernel" vmlinux | |
| make -j `nproc` -C "${SOURCE_DIR}/kernel" O="${BUILD_DIR}/kernel" dtbs | |
| make -j `nproc` -C "${SOURCE_DIR}/kernel" O="${BUILD_DIR}/kernel" modules | |
| ################################################################################ | |
| # Install | |
| ################################################################################ | |
| RELEASE="`make -s -C ${SOURCE_DIR}/kernel O=${BUILD_DIR}/kernel kernelrelease`" | |
| VERSION="`make -s -C ${SOURCE_DIR}/kernel O=${BUILD_DIR}/kernel kernelversion`" | |
| mkdir -p "${INSTALL_DIR}/kernel/image" | |
| cp "${BUILD_DIR}/kernel/vmlinux" "${INSTALL_DIR}/kernel/image/vmlinux" | |
| find "${BUILD_DIR}/kernel/arch/arm64/boot/dts" -type f -name "*.dtb" -exec cp {} "${INSTALL_DIR}/kernel/image/" \; | |
| make -j `nproc` -C "${SOURCE_DIR}/kernel" O="${BUILD_DIR}/kernel" INSTALL_HDR_PATH="${INSTALL_DIR}/kernel/headers/usr" headers_install | |
| make -j `nproc` -C "${SOURCE_DIR}/kernel" O="${BUILD_DIR}/kernel" INSTALL_MOD_PATH="${INSTALL_DIR}/kernel/modules" modules_install | |
| # make -j `nproc` -C "${SOURCE_DIR}/kernel" O="${BUILD_DIR}/kernel" INSTALL_FW_PATH="${INSTALL_DIR}/kernel/firmware/lib/firmware" firmware_install | |
| rm "${INSTALL_DIR}/kernel/modules/lib/modules/${RELEASE}/build" | |
| rm "${INSTALL_DIR}/kernel/modules/lib/modules/${RELEASE}/source" | |
| rm -fr "${INSTALL_DIR}/kernel/modules/lib/firmware" | |
| ################################################################################ | |
| # Archive | |
| ################################################################################ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment