153 lines
5.0 KiB
Bash
153 lines
5.0 KiB
Bash
#!/usr/bin/env bash
|
|
#
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
#
|
|
# Copyright (c) 2026 AMLOGIC
|
|
#
|
|
# Linux UAPI headers build script for AMLbian
|
|
# This script installs Linux UAPI headers for different Amlogic chipsets
|
|
|
|
set -e
|
|
|
|
# Get script dir5yyectory
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
AMLBIAN_DIR="$(dirname "${SCRIPT_DIR}")"
|
|
|
|
aml_comp_path="$(amlbian_get_aml_comp_dir)"
|
|
|
|
kernel_build_dir="${aml_comp_path}/kernel/aml-${KERNEL_VERSION}/build"
|
|
STAGING_KERNEL_DIR="${aml_comp_path}/kernel/aml-${KERNEL_VERSION}"
|
|
|
|
function __linux_headers_install {
|
|
local install_dir="${1}"
|
|
|
|
aml_log info "LINUX-HEADERS" "Starting Linux headers installation..."
|
|
|
|
local aml_comp_path="$(amlbian_get_aml_comp_dir)"
|
|
if [[ -z "${aml_comp_path}" ]] || [[ ! -d "${aml_comp_path}" ]]; then
|
|
aml_log error "LINUX-HEADERS" "aml-comp not found: ${aml_comp_path}"
|
|
exit 1
|
|
fi
|
|
|
|
local STAGING_KERNEL_DIR="${aml_comp_path}/kernel/aml-${KERNEL_VERSION}"
|
|
|
|
cp -ar ${STAGING_KERNEL_DIR}/include ${install_dir}
|
|
cp -ar ${STAGING_KERNEL_DIR}/Makefile ${install_dir}
|
|
cp -ar ${STAGING_KERNEL_DIR}/scripts ${install_dir}
|
|
mkdir -p ${install_dir}/arch
|
|
cp -ar ${STAGING_KERNEL_DIR}/arch/arm64 ${install_dir}/arch
|
|
|
|
cp -ar ${STAGING_KERNEL_DIR}/build/.config ${install_dir}
|
|
cp -ar ${STAGING_KERNEL_DIR}/build/Module.symvers ${install_dir}
|
|
|
|
find ${STAGING_KERNEL_DIR}/build \( -name '*.o' -o -name '*.cmd' -o -name '*.a' \) -delete
|
|
|
|
cp -ar ${STAGING_KERNEL_DIR}/build/scripts/ ${install_dir}/
|
|
cp -ar ${STAGING_KERNEL_DIR}/build/include/ ${install_dir}/
|
|
cp -ar ${STAGING_KERNEL_DIR}/build/arch/arm64/include/ ${install_dir}/arch/arm64/
|
|
|
|
mkdir -p ${install_dir}/common_drivers
|
|
cp -ar ${STAGING_KERNEL_DIR}/common_drivers/include ${install_dir}/common_drivers
|
|
|
|
|
|
# find ${STAGING_KERNEL_DIR}/common_drivers -name '*.h' -exec cp --parents {} ${install_dir} \;
|
|
|
|
display_alert "LINUX-HEADERS" "Installation completed" "success"
|
|
return 0
|
|
}
|
|
|
|
function __linux_headers_create_deb {
|
|
local build_dir="${1}"
|
|
local install_dir="${2}"
|
|
|
|
# 设置必要的变量
|
|
local pkg_name="linux-headers"
|
|
local version="${DEB_VERSION}"
|
|
local architecture="${ARCH:-arm64}"
|
|
local maintainer="Amlbian Builder <build@amlbian.com>"
|
|
local description="Linux headers for kernel ${KERNEL_VERSION}"
|
|
|
|
aml_log info "LINUX-HEADERS" "Creating Debian package for ${pkg_name} ${version}..."
|
|
|
|
# 创建Debian包控制文件
|
|
local deb_dir="${build_dir}/deb/${pkg_name}-${version}"
|
|
local debian_dir="${deb_dir}/DEBIAN"
|
|
|
|
mkdir -p "${debian_dir}"
|
|
|
|
# 将安装目录的内容复制到debian-root
|
|
if [[ -d "${install_dir}" ]] && [[ "$(ls -A "${install_dir}")" ]]; then
|
|
cp -a "${install_dir}"/. "${deb_dir}/" 2>/dev/null || true
|
|
aml_log debug "LINUX-HEADERS" "Copied installed files to ${deb_dir}"
|
|
else
|
|
aml_log error "LINUX-HEADERS" "No installed files found in ${install_dir}"
|
|
return 1
|
|
fi
|
|
|
|
# 创建control文件
|
|
cat > "${debian_dir}/control" <<EOF
|
|
Package: ${pkg_name}
|
|
Version: ${version}
|
|
Architecture: ${architecture}
|
|
Maintainer: ${maintainer}
|
|
Description: ${description}
|
|
This package provides Linux headers for Amlogic hardware.
|
|
Section: devel
|
|
Priority: optional
|
|
EOF
|
|
|
|
aml_log info "LINUX-HEADERS" "Building Debian package..."
|
|
|
|
# 构建Debian包
|
|
cd "${build_dir}/deb"
|
|
dpkg-deb --build "${pkg_name}-${version}"
|
|
|
|
local deb_file="${pkg_name}-${version}.deb"
|
|
if [[ -f "${deb_file}" ]]; then
|
|
local output_dir="${BUILD_DIR}/output"
|
|
mkdir -p "${output_dir}"
|
|
mv "${deb_file}" "${output_dir}/linux-${pkg_name}-${BOARD}-amlbian_${version}_${architecture}.deb"
|
|
display_alert "LINUX-HEADERS" "Debian package created: ${output_dir}/linux-${pkg_name}-${BOARD}-amlbian_${version}_${architecture}.deb" "success"
|
|
else
|
|
aml_log error "LINUX-HEADERS" "Failed to build Debian package"
|
|
return 1
|
|
fi
|
|
|
|
return 0
|
|
}
|
|
|
|
function amlbian_build_linux_headers {
|
|
aml_log info "AMLOGIC: Building Linux headers ${KERNEL_VERSION} ${BOARD}"
|
|
|
|
# Define all directory paths (in .tmp directory)
|
|
local build_root="${MODULE_BUILD_DIR}/linux-headers-build-${ARCH:-arm64}"
|
|
local build_dir="${build_root}/build" # Build directory
|
|
local install_dir="${build_root}/install" # Install directory
|
|
|
|
rm -rf "${build_root}"
|
|
|
|
# 创建目录
|
|
mkdir -p "${build_dir}" "${install_dir}"
|
|
|
|
aml_log debug "AMLOGIC: build_dir ${build_dir}"
|
|
aml_log debug "AMLOGIC: install_dir ${install_dir}"
|
|
aml_log debug "AMLOGIC: output_dir ${BUILD_DIR}/output"
|
|
|
|
# 安装头文件
|
|
if ! __linux_headers_install "${install_dir}"; then
|
|
aml_log error "AMLOGIC: Linux headers installation failed"
|
|
return 1
|
|
fi
|
|
|
|
aml_log info "AMLOGIC: Creating Debian package..."
|
|
__linux_headers_create_deb "${build_dir}" "${install_dir}"
|
|
|
|
return 0
|
|
}
|
|
|
|
aml_log info "AMLIbian Linux Headers Build Script" "Version: ${KERNEL_VERSION}, Board: ${BOARD}"
|
|
|
|
amlbian_build_linux_headers
|
|
|
|
aml_log info "AMLOGIC: Linux headers build completed" "${OUTPUT_DIR}"
|