#!/usr/bin/env bash # # SPDX-License-Identifier: GPL-2.0 # # Copyright (c) 2026 AMLOGIC # # Kernel build script for AMLbian # This script builds kernel for different Amlogic chipsets set -e # Get script directory SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" AMLBIAN_DIR="$(dirname "${SCRIPT_DIR}")" # Source common functions if [[ -f "${AMLBIAN_DIR}/lib/function-common.sh" ]]; then source "${AMLBIAN_DIR}/lib/function-common.sh" fi # ============================================================================== # Section 1: Help Information # ============================================================================== function show_help() { cat << EOF Usage: $(basename "$0") [OPTIONS] Build kernel for Amlogic boards Options: --kernel-version VERSION Kernel version (6.12, etc.) --board BOARD Board name (s6-bq201, a9-by401) --source-dir PATH Local kernel source directory --output-dir PATH Output directory for build artifacts --defconfig CONFIG Kernel defconfig to use --clean Clean before build --help Show this help message Examples: $(basename "$0") --kernel-version 6.12 --board s6-bq201 $(basename "$0") --source-dir /path/to/kernel --clean EOF } # ============================================================================== # Section 2: Default Configuration # ============================================================================== KERNEL_VERSION="${KERNEL_VERSION:-6.12}" BOARD="${BOARD:-s6-bq201}" SOURCE_DIR="${LOCAL_KERNEL_PATH:-${AMLBIAN_DIR}/../../aml-comp/kernel}" #OUTPUT_DIR="${AMLBIAN_DIR}/../../aml-comp/output" OUTPUT_DIR="${AMLBIAN_DIR}/../output/kernel" DEFCONFIG="s6_bq201_defconfig" CLEAN_BUILD="no" # ============================================================================== # Section 3: Parse Arguments # ============================================================================== while [[ $# -gt 0 ]]; do case "$1" in --kernel-version) KERNEL_VERSION="$2" shift 2 ;; --board) BOARD="$2" shift 2 ;; --source-dir) SOURCE_DIR="$2" shift 2 ;; --output-dir) OUTPUT_DIR="$2" shift 2 ;; --defconfig) DEFCONFIG="$2" shift 2 ;; --clean) CLEAN_BUILD="yes" shift ;; --help) show_help exit 0 ;; *) echo "Unknown option: $1" show_help exit 1 ;; esac done # ============================================================================== # Section 4: Build Kernel # ============================================================================== function prepare_linux_config() { Kernel_config="final_defconfig" local KERNEL_SOURCE_DIR="$1" local FINAL_DEFCONFIG_PATH="${KERNEL_SOURCE_DIR}/common_drivers/arch/arm64/configs" local GKI_DEFCONFIG_PATH="${KERNEL_SOURCE_DIR}/arch/arm64/configs" local NFS_BOOT="" KERNEL_CONFIG_DIR="${AMLBIAN_DIR}/patches/linux_defconf" rm -f ${GKI_DEFCONFIG_PATH}/${Kernel_config} echo "[LINUX]prepare kernel config start... ${KERNEL_CONFIG_DIR}" # Print all variables used in this function echo "[LINUX] Variables in prepare_linux_config:" echo " KERNEL_SOURCE_DIR: ${KERNEL_SOURCE_DIR}" echo " AMLBIAN_DIR: ${AMLBIAN_DIR}" echo " FINAL_DEFCONFIG_PATH: ${FINAL_DEFCONFIG_PATH}" echo " GKI_DEFCONFIG_PATH: ${GKI_DEFCONFIG_PATH}" echo " KERNEL_CONFIG_DIR: ${KERNEL_CONFIG_DIR}" echo " Kernel_config: ${Kernel_config}" echo " LINUX_DEFCONFIG: ${LINUX_DEFCONFIG:-not-set}" # Check if critical paths exist echo "[LINUX] Checking critical paths..." # Check KERNEL_SOURCE_DIR if [[ -z "${KERNEL_SOURCE_DIR}" ]]; then echo " ⚠ WARNING: KERNEL_SOURCE_DIR is empty" elif [[ ! -d "${KERNEL_SOURCE_DIR}" ]]; then echo " ⚠ WARNING: KERNEL_SOURCE_DIR does not exist: ${KERNEL_SOURCE_DIR}" else echo " ✓ KERNEL_SOURCE_DIR exists: ${KERNEL_SOURCE_DIR}" fi # Check AMLBIAN_DIR if [[ -z "${AMLBIAN_DIR}" ]]; then echo " ⚠ WARNING: AMLBIAN_DIR is empty" elif [[ ! -d "${AMLBIAN_DIR}" ]]; then echo " ⚠ WARNING: AMLBIAN_DIR does not exist: ${AMLBIAN_DIR}" else echo " ✓ AMLBIAN_DIR exists: ${AMLBIAN_DIR}" fi # Check FINAL_DEFCONFIG_PATH if [[ ! -d "${FINAL_DEFCONFIG_PATH}" ]]; then echo " ⚠ WARNING: FINAL_DEFCONFIG_PATH does not exist: ${FINAL_DEFCONFIG_PATH}" else echo " ✓ FINAL_DEFCONFIG_PATH exists: ${FINAL_DEFCONFIG_PATH}" fi # Check GKI_DEFCONFIG_PATH if [[ ! -d "${GKI_DEFCONFIG_PATH}" ]]; then echo " ⚠ WARNING: GKI_DEFCONFIG_PATH does not exist: ${GKI_DEFCONFIG_PATH}" else echo " ✓ GKI_DEFCONFIG_PATH exists: ${GKI_DEFCONFIG_PATH}" fi # Check KERNEL_CONFIG_DIR if [[ ! -d "${KERNEL_CONFIG_DIR}" ]]; then echo " ⚠ WARNING: KERNEL_CONFIG_DIR does not exist: ${KERNEL_CONFIG_DIR}" else echo " ✓ KERNEL_CONFIG_DIR exists: ${KERNEL_CONFIG_DIR}" # Check for required files in KERNEL_CONFIG_DIR if [[ ! -f "${KERNEL_CONFIG_DIR}/common.cfg" ]]; then echo " ⚠ WARNING: common.cfg not found in ${KERNEL_CONFIG_DIR}" fi if [[ -n "${LINUX_DEFCONFIG}" && ! -f "${KERNEL_CONFIG_DIR}/${LINUX_DEFCONFIG}" ]]; then echo " ⚠ WARNING: ${LINUX_DEFCONFIG} not found in ${KERNEL_CONFIG_DIR}" fi fi # separate base config EXCLUDED_FILES=("common.cfg" "${LINUX_DEFCONFIG}") EXT_CONFIG="" for file in "$KERNEL_CONFIG_DIR"/*; do filename=$(basename "$file") if [[ ! " ${EXCLUDED_FILES[@]} " =~ " $filename " ]]; then EXT_CONFIG+=" ${KERNEL_CONFIG_DIR}/$filename" fi done KCONFIG_CONFIG=${FINAL_DEFCONFIG_PATH}/${Kernel_config} ${KERNEL_SOURCE_DIR}/scripts/kconfig/merge_config.sh -m -r \ ${GKI_DEFCONFIG_PATH}/gki_defconfig \ ${KERNEL_SOURCE_DIR}/common_drivers/arch/arm64/configs/amlogic_gki.fragment \ ${KERNEL_SOURCE_DIR}/common_drivers/arch/arm64/configs/amlogic_gki.10 \ ${KERNEL_SOURCE_DIR}/common_drivers/arch/arm64/configs/amlogic_gki.debug \ ${KERNEL_SOURCE_DIR}/common_drivers/arch/arm64/configs/amlogic_gcc64_defconfig \ ${KERNEL_CONFIG_DIR}/common.cfg \ ${KERNEL_CONFIG_DIR}/${LINUX_DEFCONFIG} \ $EXT_CONFIG cp ${FINAL_DEFCONFIG_PATH}/${Kernel_config} ${GKI_DEFCONFIG_PATH}/${Kernel_config} export LINUX_DEFCONFIG=${Kernel_config} echo "[LINUX]prepare kernel config done..." } # Get kernel version from kernel source .config file function get_kernel_version() { local kernel_source_dir="${1:-${KERNEL_SOURCE_DIR}}" if [[ -z "${kernel_source_dir}" || ! -d "${kernel_source_dir}" ]]; then kernel_source_dir="${KERNEL_SRC_DIR}" if [[ -z "${kernel_source_dir}" || ! -d "${kernel_source_dir}" ]]; then echo "" return 1 fi fi local config_file="${kernel_source_dir}/build/.config" if [[ ! -f "${config_file}" ]]; then echo "" return 1 fi # Extract kernel version from config file # Look for line like: "# Linux/arm64 6.12.38 Kernel Configuration" local version_line=$(grep -E "^# Linux/[a-z0-9_]+ [0-9]+\.[0-9]+\.[0-9]+ Kernel Configuration$" "${config_file}" | head -1) if [[ -z "${version_line}" ]]; then echo "" return 1 fi # Extract version number (e.g., 6.12.38 from "# Linux/arm64 6.12.38 Kernel Configuration") local base_version=$(echo "${version_line}" | sed -E 's/^# Linux\/[a-z0-9_]+ ([0-9]+\.[0-9]+\.[0-9]+) Kernel Configuration$/\1/') if [[ -z "${base_version}" ]]; then echo "" return 1 fi # Add amlogic extension local extended_version="${base_version}-amlogic" # Add git commit hash if available # if [[ -n "${BUILD_REPOSITORY_COMMIT}" ]]; then # extended_version="${extended_version}-${BUILD_REPOSITORY_COMMIT}" # else # # Try to get git commit from kernel source directory # if command -v git >/dev/null 2>&1 && [[ -d "${kernel_source_dir}" ]]; then # if git -C "${kernel_source_dir}" rev-parse --git-dir >/dev/null 2>&1; then # local git_commit="$(git -C "${kernel_source_dir}" rev-parse --short=7 HEAD 2>/dev/null || true)" # if [[ -n "${git_commit}" ]]; then # extended_version="${extended_version}-${git_commit}" # fi # fi # fi # fi echo "${extended_version}" return 0 } function compile_kernel() { local aml_comp_kernel_path=$1 display_alert "AMLOGIC : Kernel start compile ${aml_comp_kernel_path}" "info" # For now, use Armbian's native kernel build cd "${aml_comp_kernel_path}" if [[ -n "${aml_comp_kernel_path}" ]]; then display_alert "COMPILE-KERNEL Found aml-comp Kernel at: ${aml_comp_kernel_path}" # If aml-comp kernel has a Makefile, attempt a local build under amlbian if [[ -f "${aml_comp_kernel_path}/Makefile" ]]; then export KERNEL_SOURCE_DIR="${aml_comp_kernel_path}" display_alert "COMPILE-KERNEL Building aml-comp Kernel locally: ${KERNEL_SOURCE_DIR}" local original_dir="$(pwd)" cd "${aml_comp_kernel_path}" || { display_alert "COMPILE-KERNEL Failed to change to aml-comp kernel directory" "err" cd "${original_dir}" } # Try an out-of-tree build if supported, otherwise in-tree local build_dir="${aml_comp_kernel_path}/build" mkdir -p "${build_dir}" # Check default gcc version before switching toolchain local need_new_toolchain=1 local default_gcc_version="" # Try to get default gcc version if command -v gcc &> /dev/null; then default_gcc_version=$(${CC} --version | head -n1 | grep -oP '\d+\.\d+\.\d+' | head -n1) display_alert "COMPILE-KERNEL Default gcc version: ${default_gcc_version}" # Check if version is >= 5.1.0 if [[ -n "${default_gcc_version}" ]]; then # Simple version comparison local major_version=$(echo "${default_gcc_version}" | cut -d. -f1) local minor_version=$(echo "${default_gcc_version}" | cut -d. -f2) if [[ ${major_version} -gt 5 ]] || ([[ ${major_version} -eq 5 ]] && [[ ${minor_version} -ge 1 ]]); then display_alert "COMPILE-KERNEL Default gcc version ${default_gcc_version} >= 5.1.0, no need for new toolchain" need_new_toolchain=0 else display_alert "COMPILE-KERNEL Default gcc version ${default_gcc_version} < 5.1.0, will try new toolchain" fi fi else display_alert "COMPILE-KERNEL gcc not found in PATH" fi # Only switch to new toolchain if needed if [[ ${need_new_toolchain} -eq 1 ]]; then # local new_toolchain_path="/opt/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/bin" local new_toolchain_path="/opt/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin" if [[ -d "${new_toolchain_path}" ]]; then display_alert "COMPILE-KERNEL Using new toolchain from: ${new_toolchain_path}" export PATH="${new_toolchain_path}:${PATH}" # Check if gcc exists in the new toolchain if [[ -f "${new_toolchain_path}/aarch64-linux-gnu-gcc" ]]; then display_alert "COMPILE-KERNEL Found cross-compiler: ${new_toolchain_path}/aarch64-linux-gnu-gcc" else display_alert "COMPILE-KERNEL Cross-compiler not found in new toolchain, using default" fi else display_alert "COMPILE-KERNEL New toolchain directory not found: ${new_toolchain_path}" fi fi cd "${aml_comp_kernel_path}" # Ensure helpers that rely on KERNEL_SOURCE_DIR see the aml-comp tree export KERNEL_SOURCE_DIR="${aml_comp_kernel_path}" COMMON_DRV_PATH="${aml_comp_kernel_path}/common_drivers" export COMMON_DRIVERS_DIR=${COMMON_DRV_PATH} # Keep source tree clean for out-of-tree builds. This prevents # "source tree is not clean" errors during make. if [[ "${KERNEL_FORCE_MRPROPER:-yes}" == "yes" ]]; then if [[ -f "${aml_comp_kernel_path}/.config" \ || -f "${aml_comp_kernel_path}/include/config/auto.conf" \ || -f "${aml_comp_kernel_path}/include/generated/autoconf.h" ]]; then display_alert "COMPILE-KERNEL Cleaning kernel source tree (mrproper)" make ARCH=arm64 mrproper 2>&1 | while read -r line; do display_alert "COMPILE-KERNEL mrproper: ${line}" done fi fi setup_git_safe_dir ${aml_comp_kernel_path} #apply patches to kernel from common drivers if any display_alert "COMPILE-KERNEL Applying common driver patches to aml-comp kernel..." KERNEL_DIR=${S} COMMON_DRIVERS_DIR="${COMMON_DRV_PATH}" ${COMMON_DRV_PATH}/auto_patch/auto_patch.sh "common16-6.12" 2>&1 | while read -r line; do display_alert "COMPILE-KERNEL apply patch: ${line}" done display_alert "COMPILE-KERNEL Running mrproper on aml-comp kernel tree" make -C "${aml_comp_kernel_path}" ARCH=arm64 mrproper >/dev/null 2>&1 || true prepare_linux_config ${aml_comp_kernel_path} display_alert "COMPILE-KERNEL Running: make -j$(nproc) ARCH=arm64 CROSS_COMPILE=${CROSS_COMPILE:-aarch64-none-linux-gnu-} O=${build_dir} ${FULL_EXTRA_ARGS}" make V=1 -j${nproc} ARCH=arm64 CROSS_COMPILE=${CROSS_COMPILE:-aarch64-none-linux-gnu-} O="${build_dir}" ${LINUX_DEFCONFIG:-defconfig} ${FULL_EXTRA_ARGS} 2>&1 | while read -r line; do display_alert "COMPILE-KERNEL make conf: ${line}" done #example: make -j8 ARCH=arm64 CROSS_COMPILE=ccache aarch64-none-linux-gnu- Image t7_a311d2_an400_linux.dtb t7c_a311d2_an400_linux.dtb modules #make -j${nproc} ARCH=${DISTRIB_ARCH} CROSS_COMPILE="${CCACHE} ${KERNEL_COMPILER}" Image ${LINUX_DTB[@]} modules $EXTRA_MAKE_ARGS #make -j${nproc} ARCH=arm64 CROSS_COMPILE=${CROSS_COMPILE:-aarch64-none-linux-gnu-} O="${build_dir}" Image ${KERNEL_DEVICETREE} modules ${FULL_EXTRA_ARGS} 2>&1 | while read -r line; do #done local make_exit=0 if ! make -j"$(nproc)" -C "${aml_comp_kernel_path}" ARCH=arm64 CROSS_COMPILE=${CROSS_COMPILE:-aarch64-none-linux-gnu-} O="${build_dir}" Image ${KERNEL_DEVICETREE} modules ${FULL_EXTRA_ARGS}; then display_alert "COMPILE-KERNEL Image+${KERNEL_DEVICETREE} build failed, retrying with generic dtbs target" if ! make -j"$(nproc)" ARCH=arm64 CROSS_COMPILE=${CROSS_COMPILE:-aarch64-none-linux-gnu-} O="${build_dir}" Image modules dtbs ${FULL_EXTRA_ARGS}; then make_exit=1 fi fi # Install modules into a deterministic staging path so packaging can # pick them up instead of relying on scattered .ko locations. local modules_staging_dir="${build_dir}/modules-staging" local dtb_staging_dir="${build_dir}/dtb-staging" local kernel_release="" if [[ ${make_exit} -eq 0 ]]; then kernel_release="$(make -s ARCH=arm64 CROSS_COMPILE=${CROSS_COMPILE:-aarch64-none-linux-gnu-} O="${build_dir}" kernelrelease 2>/dev/null || true)" [[ -z "${kernel_release}" ]] && kernel_release="${KERNEL_VER:-}" [[ -z "${kernel_release}" ]] && kernel_release="$(basename "$(find "${build_dir}/lib/modules" -mindepth 1 -maxdepth 1 -type d 2>/dev/null | head -1)")" if [[ -n "${kernel_release}" ]]; then rm -rf "${modules_staging_dir}" mkdir -p "${modules_staging_dir}" display_alert "COMPILE-KERNEL Installing modules to staging: ${modules_staging_dir}" make -j"$(nproc)" ARCH=arm64 CROSS_COMPILE=${CROSS_COMPILE:-aarch64-none-linux-gnu-} O="${build_dir}" \ INSTALL_MOD_PATH="${modules_staging_dir}" DEPMOD=true modules_install ${FULL_EXTRA_ARGS} || true local modules_install_exit=0 [[ -d "${modules_staging_dir}/lib/modules/${kernel_release}" ]] || modules_install_exit=1 if [[ ${modules_install_exit} -ne 0 ]]; then display_alert "COMPILE-KERNEL modules_install failed; trying fallback .ko collection" fi local staged_mod_dir="${modules_staging_dir}/lib/modules/${kernel_release}" local staged_mod_count=0 if [[ -d "${staged_mod_dir}" ]]; then staged_mod_count=$(find "${staged_mod_dir}" -type f -name "*.ko*" 2>/dev/null | wc -l) fi if [[ ${staged_mod_count} -eq 0 ]]; then display_alert "COMPILE-KERNEL No modules in staging; collecting scattered .ko as fallback" mkdir -p "${staged_mod_dir}/extra" find "${build_dir}" "${aml_comp_kernel_path}" -type f -name "*.ko" 2>/dev/null | while read -r ko; do cp -f "${ko}" "${staged_mod_dir}/extra/" 2>/dev/null || true done staged_mod_count=$(find "${staged_mod_dir}" -type f -name "*.ko*" 2>/dev/null | wc -l) fi display_alert "COMPILE-KERNEL Staged kernel modules: ${staged_mod_count}" export AMLBIAN_KERNEL_MODULES_DIR="${staged_mod_dir}" export AMLBIAN_KERNEL_VERSION="${kernel_release}" display_alert "COMPILE-KERNEL AMLBIAN_KERNEL_MODULES_DIR=${AMLBIAN_KERNEL_MODULES_DIR}" depmod -a -b ${modules_staging_dir} ${kernel_release} display_alert "COMPILE-KERNEL after depmod ...$(ls -l ${modules_staging_dir})" # Stage DTBs deterministically for packaging. rm -rf "${dtb_staging_dir}" mkdir -p "${dtb_staging_dir}" local dtb_found=0 dtb_target dtb_name dtb_path for dtb_target in ${KERNEL_DEVICETREE}; do dtb_name="$(basename "${dtb_target}")" dtb_path="$(find "${build_dir}/arch/arm64/boot/dts" \ "${build_dir}/common_drivers/arch/arm64/boot/dts" \ "${aml_comp_kernel_path}/arch/arm64/boot/dts" -type f -name "${dtb_name}" 2>/dev/null | head -1)" if [[ -n "${dtb_path}" ]]; then cp -f "${dtb_path}" "${dtb_staging_dir}/" dtb_found=1 fi done if [[ ${dtb_found} -eq 0 ]]; then find "${build_dir}/common_drivers/arch/arm64/boot/dts/amlogic" \ "${build_dir}/arch/arm64/boot/dts/amlogic" -type f -name "*.dtb" 2>/dev/null | while read -r one_dtb; do cp -f "${one_dtb}" "${dtb_staging_dir}/" 2>/dev/null || true done fi local dtb_count dtb_count=$(find "${dtb_staging_dir}" -type f -name "*.dtb" 2>/dev/null | wc -l) if [[ ${dtb_count} -gt 0 ]]; then export AMLBIAN_KERNEL_DTB_DIR="${dtb_staging_dir}" display_alert "COMPILE-KERNEL AMLBIAN_KERNEL_DTB_DIR=${AMLBIAN_KERNEL_DTB_DIR} (count=${dtb_count})" else display_alert "COMPILE-KERNEL No DTBs staged for packaging" fi else display_alert "COMPILE-KERNEL Could not determine kernel release; modules staging skipped" "warn" fi fi display_alert "COMPILE-KERNEL make img: ${LINENO}" # local make_exit=${PIPESTATUS[0]} # cd "${original_dir}" # if [[ ${make_exit} -eq 0 ]]; then # used_aml_comp_kernel=1 # export kernel_build_dir="${build_dir}" # display_alert "COMPILE-KERNEL aml-comp kernel built: ${kernel_build_dir} success" "info" # else # display_alert "COMPILE-KERNEL aml-comp kernel build failed or not supported; will fallback to Armbian build" "warn" # used_aml_comp_kernel=0 # fi else display_alert "COMPILE-KERNEL aml-comp Kernel not buildable here; using Armbian kernel" fi else display_alert "COMPILE-KERNEL aml-comp Kernel not available, using Armbian kernel" fi } function package_kernel() { display_alert "PACKAGE-KERNEL start package kernel" "info" # Get kernel version for packaging local kernel_version=$(get_kernel_version "${KERNEL_SRC_DIR}") if [[ -z "${kernel_version}" ]]; then kernel_version="unknown-$(date +%Y%m%d)" display_alert "AMLOGIC : get kernel version failed, set as ${kernel_version} ${BOARD}" "warn" fi # Package kernel image DEB if package_kernel_deb_amlbian_main "${KERNEL_SRC_DIR}" "${kernel_version}" "${LINUX_DEFCONFIG:-defconfig}"; then display_alert "COMPILE-KERNEL Kernel Image DEB package created successfully" "info" else display_alert "COMPILE-KERNEL Failed to create Kernel Image DEB package" "err" fi # Package kernel modules DEB if package_kmod_deb_amlbian_main "${KERNEL_SRC_DIR}" "${kernel_version}"; then display_alert "COMPILE-KERNEL Kernel Modules DEB package created successfully" "info" else display_alert "COMPILE-KERNEL Failed to create Kernel Modules DEB package" "err" fi # Package DTB DEB if package_dtb_deb_amlbian_main "${KERNEL_SRC_DIR}" "${kernel_version}"; then display_alert "COMPILE-KERNEL DTB DEB package created successfully" "info" else display_alert "COMPILE-KERNEL Failed to create DTB DEB package" "err" fi } function prepare_modules() { # bash ${WORKDIR}/modules_install.sh ${D} ${STAGING_KERNEL_DIR}/${COMMON_DRV_PATH}/ ${KERNEL_VERSION} ${NAND_FLAG} ${SOC} display_alert "AMLOGIC: prepare_modules bash ${AMLBIAN_DIR}/scripts/modules_install.sh ${KERNEL_SOURCE_DIR}/build ${COMMON_DRIVERS_DIR} ${AMLBIAN_KERNEL_VERSION} false" "info" bash ${AMLBIAN_DIR}/scripts/modules_install.sh ${KERNEL_SOURCE_DIR}/build/modules-staging ${COMMON_DRIVERS_DIR} ${AMLBIAN_KERNEL_VERSION} false } function amlbian_build_kernel() { if ! is_unit_enabled "kernel"; then echo "[SKIP] >> kernel disable in BUILD_UNITS" return fi display_alert "AMLOGIC: Building kernel ${KERNEL_VERSION} ${BOARD}" "info" display_alert "AMLOGIC: Source directory ${SOURCE_DIR}" "info" display_alert "AMLOGIC: Output directory ${OUTPUT_DIR}" "info" display_alert "AMLOGIC: Defconfig ${DEFCONFIG}" "info" local aml_comp_kernel_path=${SOURCE_DIR}/${KERNEL_VER} export KERNEL_SRC_DIR=${aml_comp_kernel_path} # Check if source directory exists if [[ ! -d "${aml_comp_kernel_path}" ]]; then display_alert "AMLOGIC: Kernel source not found ${aml_comp_kernel_path}" "err" return 1 fi # Create output directory mkdir -p "${OUTPUT_DIR}" # Clean if requested if [[ "${CLEAN_BUILD}" == "yes" ]]; then display_alert "AMLOGIC: Cleaning build directory ${aml_comp_kernel_path}" "info" cd "${aml_comp_kernel_path}" make clean 2>/dev/null || true make mrproper 2>/dev/null || true fi # AMLOGIC: Uncomment below when ready to build # make "${DEFCONFIG}" # make -j$(nproc) Image # make -j$(nproc) modules # make -j$(nproc) dtbs compile_kernel ${aml_comp_kernel_path} prepare_modules package_kernel ${aml_comp_kernel_path} return 0 } # ============================================================================== # Section 5: Main # ============================================================================== display_alert "AMLIbian Kernel Build Script" "Version: ${KERNEL_VERSION}, Board: ${BOARD}" "info" amlbian_build_kernel display_alert "AMLOGIC: Kernel build completed" "${OUTPUT_DIR}" "info" # ============================================================================== # End of build-kernel.sh # ==============================================================================