Files
BPI-CM9-Linux/amlbian/scripts/build-kernel.sh
T
2026-08-24 10:03:24 +08:00

563 lines
25 KiB
Bash

#!/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
# ==============================================================================