287 lines
9.0 KiB
Bash
Executable File
287 lines
9.0 KiB
Bash
Executable File
#!/bin/sh
|
|
# SPDX-License-Identifier: (GPL-2.0-only OR MIT)
|
|
# Copyright (C) 2026 Amlogic, Inc. All rights reserved
|
|
#
|
|
# merge_config.sh - Takes a list of config fragment values, and merges
|
|
# them one by one. Provides warnings on overridden values, and specified
|
|
# values that did not make it to the resulting .config file (due to missed
|
|
# dependencies or config symbol removal).
|
|
#
|
|
# Portions reused from kconf_check and generate_cfg:
|
|
# http://git.yoctoproject.org/cgit/cgit.cgi/yocto-kernel-tools/tree/tools/kconf_check
|
|
# http://git.yoctoproject.org/cgit/cgit.cgi/yocto-kernel-tools/tree/tools/generate_cfg
|
|
#
|
|
# Copyright (c) 2009-2010 Wind River Systems, Inc.
|
|
# Copyright 2011 Linaro
|
|
|
|
if [ $# -lt 2 ] ; then
|
|
echo "param number: $#, need to provide output dir path and common driver path"
|
|
exit 1
|
|
fi
|
|
|
|
OUT_AMLOGIC_DIR=$1
|
|
MODULES_STAGING_DIR=${OUT_AMLOGIC_DIR}
|
|
COMMON_DRIVERS_DIR=$2
|
|
KERNEL_VER=$3
|
|
NAND_FLAG=$4
|
|
|
|
if [ $# -gt 4 ]; then
|
|
MACHINE=$5
|
|
fi
|
|
|
|
echo "machine: $MACHINE"
|
|
|
|
SEQUENCE_FILE_PATH=${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list
|
|
|
|
mod_probe() {
|
|
local ko=$1
|
|
local loop
|
|
for loop in `grep "^$ko:" modules.dep | sed 's/.*://'`; do
|
|
mod_probe $loop
|
|
echo insmod $loop >> __install.sh
|
|
done
|
|
}
|
|
|
|
function mod_probe_recovery() {
|
|
local ko=$1
|
|
local loop
|
|
for loop in `grep "^$ko:" modules_recovery.dep | sed 's/.*://'`; do
|
|
mod_probe_recovery $loop
|
|
echo insmod $loop >> __install_recovery.sh
|
|
done
|
|
}
|
|
|
|
function regenerate_modules_sequence_list()
|
|
{
|
|
echo "nand flag: ${NAND_FLAG}"
|
|
cp ${SEQUENCE_FILE_PATH} ${SEQUENCE_FILE_PATH}.temp
|
|
if ${NAND_FLAG}; then
|
|
echo "add nand ko to list"
|
|
sed -i "/mmc/a\\\tamlogic-mtd-common\n\tamlogic_mtd_nfc" ${SEQUENCE_FILE_PATH}
|
|
sed -i "/aml_drm/a\\\tamlogic-fs-yaffs" ${SEQUENCE_FILE_PATH}
|
|
fi
|
|
}
|
|
|
|
adjust_sequence_modules_loading() {
|
|
chips=$(echo ${MACHINE} | cut -d'-' -f1 | cut -c6-)
|
|
if [ $chips = "g12b" ] || [ $chips = "sm1" ];then
|
|
chips=g12a
|
|
fi
|
|
|
|
echo " chips list: ${chips}"
|
|
|
|
source ${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list
|
|
cp modules.dep modules.dep.temp
|
|
|
|
soc_module=()
|
|
for chip in ${chips[@]}; do
|
|
chip_module=`ls amlogic-*-soc-${chip}.ko`
|
|
soc_module=(${soc_module[@]} ${chip_module[@]})
|
|
done
|
|
echo soc_module=${soc_module[*]}
|
|
|
|
delete_soc_module=()
|
|
if [[ ${#soc_module[@]} == 0 ]]; then
|
|
echo "Use all soc module"
|
|
else
|
|
for module in `ls amlogic-*-soc-*`; do
|
|
if [[ ! "${soc_module[@]}" =~ "${module}" ]] ; then
|
|
echo Delete soc module: ${module}
|
|
sed -n "/${module}:/p" modules.dep.temp
|
|
sed -i "/${module}:/d" modules.dep.temp
|
|
delete_soc_module=(${delete_soc_module[@]} ${module})
|
|
fi
|
|
done
|
|
echo delete_soc_module=${delete_soc_module[*]}
|
|
fi
|
|
|
|
delete_module=()
|
|
for module in ${MODULES_LOAD_BLACK_LIST[@]}; do
|
|
modules=`ls ${module}*`
|
|
delete_module=(${delete_module[@]} ${modules[@]})
|
|
done
|
|
if [[ ${#delete_module[@]} == 0 ]]; then
|
|
echo "No delete module, MODULES_LOAD_BLACK_LIST=${MODULES_LOAD_BLACK_LIST[*]}"
|
|
else
|
|
echo delete_module=${delete_module[*]}
|
|
for module in ${delete_module[@]}; do
|
|
echo Delete module: ${module}
|
|
sed -n "/${module}:/p" modules.dep.temp
|
|
sed -i "/${module}:/d" modules.dep.temp
|
|
done
|
|
fi
|
|
|
|
cat modules.dep.temp | cut -d ':' -f 2 > modules.dep.temp1
|
|
delete_modules=(${delete_soc_module[@]} ${delete_module[@]})
|
|
for module in ${delete_modules[@]}; do
|
|
match=`sed -n "/${module}/=" modules.dep.temp1`
|
|
for match in ${match[@]}; do
|
|
match_count=(${match_count[@]} $match)
|
|
done
|
|
if [[ ${#match_count[@]} != 0 ]]; then
|
|
echo "Error ${#match_count[@]} modules depend on ${module}, please modify:"
|
|
echo ${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list:MODULES_LOAD_BLACK_LIST
|
|
exit
|
|
fi
|
|
rm -f ${module}
|
|
done
|
|
rm -f modules.dep.temp1
|
|
touch modules.dep.temp1
|
|
|
|
for module in ${RAMDISK_MODULES_LOAD_LIST[@]}; do
|
|
echo RAMDISK_MODULES_LOAD_LIST: $module
|
|
sed -n "/${module}:/p" modules.dep.temp
|
|
sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1
|
|
sed -i "/${module}:/d" modules.dep.temp
|
|
sed -n "/${module}.*\.ko:/p" modules.dep.temp
|
|
sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1
|
|
sed -i "/${module}.*\.ko:/d" modules.dep.temp
|
|
done
|
|
|
|
for module in ${VENDOR_MODULES_LOAD_FIRST_LIST[@]}; do
|
|
echo VENDOR_MODULES_LOAD_FIRST_LIST: $module
|
|
sed -n "/${module}:/p" modules.dep.temp
|
|
sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1
|
|
sed -i "/${module}:/d" modules.dep.temp
|
|
sed -n "/${module}.*\.ko:/p" modules.dep.temp
|
|
sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1
|
|
sed -i "/${module}.*\.ko:/d" modules.dep.temp
|
|
done
|
|
|
|
if [ -f modules.dep.temp2 ]; then
|
|
rm modules.dep.temp2
|
|
fi
|
|
touch modules.dep.temp2
|
|
for module in ${VENDOR_MODULES_LOAD_LAST_LIST[@]}; do
|
|
echo VENDOR_MODULES_LOAD_FIRST_LIST: $module
|
|
sed -n "/${module}:/p" modules.dep.temp
|
|
sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp2
|
|
sed -i "/${module}:/d" modules.dep.temp
|
|
sed -n "/${module}.*\.ko:/p" modules.dep.temp
|
|
sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp2
|
|
sed -i "/${module}.*\.ko:/d" modules.dep.temp
|
|
done
|
|
|
|
cat modules.dep.temp >> modules.dep.temp1
|
|
cat modules.dep.temp2 >> modules.dep.temp1
|
|
|
|
cp modules.dep.temp1 modules.dep
|
|
rm modules.dep.temp
|
|
rm modules.dep.temp1
|
|
rm modules.dep.temp2
|
|
}
|
|
|
|
create_ramdisk_vendor() {
|
|
install_temp=$1
|
|
source ${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list
|
|
ramdisk_module_i=${#RAMDISK_MODULES_LOAD_LIST[@]}
|
|
while [ ${ramdisk_module_i} -gt 0 ]; do
|
|
let ramdisk_module_i--
|
|
echo ramdisk_module_i=$ramdisk_module_i ${RAMDISK_MODULES_LOAD_LIST[${ramdisk_module_i}]}
|
|
if [[ `grep "${RAMDISK_MODULES_LOAD_LIST[${ramdisk_module_i}]}" ${install_temp}` ]]; then
|
|
last_ramdisk_module=${RAMDISK_MODULES_LOAD_LIST[${ramdisk_module_i}]}
|
|
break;
|
|
fi
|
|
done
|
|
# last_ramdisk_module=${RAMDISK_MODULES_LOAD_LIST[${#RAMDISK_MODULES_LOAD_LIST[@]}-1]}
|
|
last_ramdisk_module_line=`sed -n "/${last_ramdisk_module}/=" ${install_temp}`
|
|
for line in ${last_ramdisk_module_line}; do
|
|
ramdisk_last_line=${line}
|
|
done
|
|
export ramdisk_last_line
|
|
head -n ${ramdisk_last_line} ${install_temp} > ramdisk_install.sh
|
|
mkdir ramdisk
|
|
cat ramdisk_install.sh | cut -d ' ' -f 2 > ramdisk/ramdisk_modules.order
|
|
cat ramdisk_install.sh | cut -d ' ' -f 2 | xargs mv -t ramdisk/
|
|
|
|
sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' ramdisk_install.sh
|
|
echo "echo Install ramdisk modules success!" >> ramdisk_install.sh
|
|
chmod 755 ramdisk_install.sh
|
|
sed -i 's/aml_drm\.ko/& video_axis_zoom=1/' ramdisk_install.sh
|
|
mv ramdisk_install.sh ramdisk/
|
|
|
|
file_last_line=`sed -n "$=" ${install_temp}`
|
|
let line=${file_last_line}-${ramdisk_last_line}
|
|
tail -n ${line} ${install_temp} > vendor_install.sh
|
|
mkdir vendor
|
|
cat vendor_install.sh | cut -d ' ' -f 2 > vendor/vendor_modules.order
|
|
cat vendor_install.sh | cut -d ' ' -f 2 | xargs mv -t vendor/
|
|
|
|
sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' vendor_install.sh
|
|
echo "echo Install vendor modules success!" >> vendor_install.sh
|
|
chmod 755 vendor_install.sh
|
|
mv vendor_install.sh vendor/
|
|
}
|
|
|
|
modules_install() {
|
|
mkdir -p ${OUT_AMLOGIC_DIR}/modules
|
|
mkdir -p ${OUT_AMLOGIC_DIR}/ext_modules
|
|
regenerate_modules_sequence_list
|
|
cat ${SEQUENCE_LIST_PATH}
|
|
|
|
#local MODULES_ROOT_DIR=$(echo ${MODULES_STAGING_DIR}/lib/modules/*)
|
|
local MODULES_ROOT_DIR=${MODULES_STAGING_DIR}/lib/modules/${KERNEL_VER}/
|
|
pushd ${MODULES_ROOT_DIR}
|
|
local common_drivers=${COMMON_DRIVERS_DIR##*/}
|
|
echo "common_drivers: $common_driver"
|
|
local modules_list=$(find -type f -name "*.ko")
|
|
for module in ${modules_list}; do
|
|
if [[ -n ${ANDROID_PROJECT} ]]; then # copy internal build modules
|
|
if [[ `echo ${module} | grep -E "\.\/kernel\/|\/${common_drivers}\/"` ]]; then
|
|
cp ${module} ${OUT_AMLOGIC_DIR}/modules/
|
|
else
|
|
cp ${module} ${OUT_AMLOGIC_DIR}/ext_modules/
|
|
fi
|
|
else # copy all modules, include external modules
|
|
cp ${module} ${OUT_AMLOGIC_DIR}/modules/
|
|
fi
|
|
done
|
|
|
|
if [[ -n ${ANDROID_PROJECT} ]]; then # internal build modules
|
|
grep -E "^kernel\/|^${common_drivers}\/" modules.dep > ${OUT_AMLOGIC_DIR}/modules/modules.dep
|
|
else # all modules, include external modules
|
|
cp modules.dep ${OUT_AMLOGIC_DIR}/modules
|
|
fi
|
|
popd
|
|
|
|
pushd ${OUT_AMLOGIC_DIR}/modules
|
|
sed -i 's#[^ ]*/##g' modules.dep
|
|
|
|
adjust_sequence_modules_loading "${arg1[*]}"
|
|
|
|
touch __install.sh
|
|
touch modules.order
|
|
for loop in `cat modules.dep | sed 's/:.*//'`; do
|
|
mod_probe $loop
|
|
echo $loop >> modules.order
|
|
echo insmod $loop >> __install.sh
|
|
done
|
|
|
|
cat __install.sh | awk ' {
|
|
if (!cnt[$2]) {
|
|
print $0;
|
|
cnt[$2]++;
|
|
}
|
|
}' > __install.sh.tmp
|
|
|
|
create_ramdisk_vendor __install.sh.tmp
|
|
|
|
echo "#!/bin/sh" > install.sh
|
|
echo "cd ramdisk" >> install.sh
|
|
echo "./ramdisk_install.sh" >> install.sh
|
|
echo "cd ../vendor" >> install.sh
|
|
echo "./vendor_install.sh" >> install.sh
|
|
echo "cd ../" >> install.sh
|
|
chmod 755 install.sh
|
|
|
|
echo "/modules/: all `wc -l modules.dep | awk '{print $1}'` modules."
|
|
rm __install.sh __install.sh.tmp
|
|
|
|
popd
|
|
}
|
|
|
|
modules_install
|
|
rm -rf ${OUT_AMLOGIC_DIR}/lib/modules/*/build
|
|
rm -rf ${OUT_AMLOGIC_DIR}/lib/modules/*/source
|
|
#mv ${SEQUENCE_FILE_PATH}.temp ${SEQUENCE_FILE_PATH}
|