#!/bin/bash # setup.sh - 解压构建工具链到内核仓库 # # 用法: # ./setup.sh <内核仓库路径> # # 例: # git clone # cd # ./setup.sh ~/android_kernel_eebbk_sm6150 # # 效果: 工具链解压到 <内核仓库路径>/../toolchain/ (与内核仓库同级) # / # ├── android_kernel_eebbk_sm6150/ <- 内核仓库 # └── toolchain/ # ├── android_prebuilts_clang_host_linux-x86_clang-6443078-10.0/ # └── binutils-2.27-install/ set -e if [ $# -lt 1 ]; then echo "用法: ./setup.sh <内核仓库路径>" echo "例: ./setup.sh ~/android_kernel_eebbk_sm6150" exit 1 fi KERNEL_DIR="$(cd "$1" && pwd)" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" TOOLCHAIN_DIR="$(dirname "$KERNEL_DIR")/toolchain" if [ ! -d "$KERNEL_DIR/Makefile" ] && [ ! -f "$KERNEL_DIR/Makefile" ]; then echo "错误: $KERNEL_DIR 看起来不是内核源码目录 (没有 Makefile)" exit 1 fi echo "=== 内核仓库: $KERNEL_DIR ===" echo "=== 工具链安装到: $TOOLCHAIN_DIR ===" mkdir -p "$TOOLCHAIN_DIR" echo "=== 解压 binutils-2.27 (39MB) ===" tar -xzf "$SCRIPT_DIR/binutils-2.27-install.tar.gz" -C "$TOOLCHAIN_DIR" echo "完成" echo "=== 解压 clang-11.0.1 (342MB, 请稍候) ===" tar -xzf "$SCRIPT_DIR/clang-6443078.tar.gz" -C "$TOOLCHAIN_DIR" echo "完成" echo "" echo "=== 工具链就绪 ===" ls -d "$TOOLCHAIN_DIR"/android_prebuilts_clang_host_linux-x86_clang-6443078-10.0 ls -d "$TOOLCHAIN_DIR"/binutils-2.27-install echo "" echo "编译内核:" echo " cd $KERNEL_DIR" echo " export TC=$TOOLCHAIN_DIR" echo " export ARCH=arm64" echo " export CROSS_COMPILE=\$TC/binutils-2.27-install/bin/aarch64-linux-gnu-" echo " export CLANG=\$TC/android_prebuilts_clang_host_linux-x86_clang-6443078-10.0" echo " export PATH=\$CLANG/bin:\$PATH" echo " export LOCALVERSION=-perf" echo " make vendor/sdmsteppe-perf_defconfig" echo " make -j\$(nproc) CC=\"python3 ./scripts/gcc-wrapper.py \$CLANG/bin/aarch64-linux-gnu-clang\" HOSTCC=gcc HOSTCXX=g++" echo " gzip -n -9 -c arch/arm64/boot/Image > Image.gz"