blob: 00170b12058f94b426cd61ac640c3be905b10fa7 [file] [log] [blame]
#!/bin/bash
function pre_defconfig_cmds() {
if [[ ${AMLOGIC_BREAK_GKI} -eq "1" ]]; then
echo "CONFIG_AMLOGIC_BREAK_GKI=y" >> ${ROOT_DIR}/${FRAGMENT_CONFIG}
else
echo "CONFIG_AMLOGIC_BREAK_GKI=n" >> ${ROOT_DIR}/${FRAGMENT_CONFIG}
fi
if [[ ${IN_KERNEL_MODULES} -eq "1" ]]; then
echo "CONFIG_AMLOGIC_IN_KERNEL_MODULES=y" >> ${ROOT_DIR}/${FRAGMENT_CONFIG}
SKIP_EXT_MODULES=1
export SKIP_EXT_MODULES
EXT_MODULES=
export EXT_MODULES
else
echo "CONFIG_AMLOGIC_IN_KERNEL_MODULES=n" >> ${ROOT_DIR}/${FRAGMENT_CONFIG}
fi
KCONFIG_CONFIG=${ROOT_DIR}/${KERNEL_DIR}/arch/arm64/configs/${DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KERNEL_DIR}/arch/arm64/configs/gki_defconfig ${ROOT_DIR}/${FRAGMENT_CONFIG}
}
export -f pre_defconfig_cmds
function post_defconfig_cmds() {
# check_defconfig
rm ${ROOT_DIR}/${KERNEL_DIR}/arch/arm64/configs/${DEFCONFIG}
pushd ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}
sed -i '5,${/CONFIG_AMLOGIC_BREAK_GKI/d}' ${ROOT_DIR}/${FRAGMENT_CONFIG}
sed -i '5,${/CONFIG_AMLOGIC_IN_KERNEL_MODULES/d}' ${ROOT_DIR}/${FRAGMENT_CONFIG}
popd
}
export -f post_defconfig_cmds
function read_ext_module_config() {
ALL_LINE=""
while read LINE
do
if [[ $LINE != \#* && $LINE != "" ]]; then
ALL_LINE="$ALL_LINE"" ""$LINE"
fi
done < $1
export GKI_EXT_MODULE_CONFIG=$ALL_LINE
echo "GKI_EXT_MODULE_CONFIG=${GKI_EXT_MODULE_CONFIG}"
}
function read_ext_module_predefine() {
PRE_DEFINE=""
for y_config in `cat $1 | grep "^CONFIG_.*=y" | sed 's/=y//'`; do
PRE_DEFINE="$PRE_DEFINE"" -D"${y_config}
done
for m_config in `cat $1 | grep "^CONFIG_.*=m" | sed 's/=m//'`; do
PRE_DEFINE="$PRE_DEFINE"" -D"${m_config}_MODULE
done
export GKI_EXT_MODULE_PREDEFINE=$PRE_DEFINE
echo "GKI_EXT_MODULE_PREDEFINE=${GKI_EXT_MODULE_PREDEFINE}"
}
function prepare_module_build() {
if [[ -z ${IN_KERNEL_MODULES} ]]; then
read_ext_module_config $FRAGMENT_CONFIG && read_ext_module_predefine $FRAGMENT_CONFIG
fi
}
export -f prepare_module_build
function 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 adjust_sequence_modules_loading() {
if [[ -n $1 ]]; then
chips=$1
fi
source ${ROOT_DIR}/${KERNEL_DIR}/${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_BLACKLIST[@]}; do
modules=`ls ${module}*`
delete_module=(${delete_module[@]} ${modules[@]})
done
if [[ ${#delete_module[@]} == 0 ]]; then
echo "No delete module, MODULES_LOAD_BLACKLIST=${MODULES_LOAD_BLACKLIST[*]}"
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 ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list:MODULES_LOAD_BLACKLIST
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
}
creat_ramdis_vendor_install_sh() {
install_temp=$1
source ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list
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
head -n ${ramdisk_last_line} ${install_temp} > ramdisk_install.sh
sed -i '1s/^/#!\/bin\/sh\n\nset -ex\n/' ramdisk_install.sh
echo "echo Install ramdisk modules success!" >> ramdisk_install.sh
chmod 755 ramdisk_install.sh
file_last_line=`sed -n "$=" ${install_temp}`
let line=${file_last_line}-${ramdisk_last_line}
tail -n ${line} ${install_temp} > vendor_install.sh
sed -i '1s/^/#!\/bin\/sh\n\nset -ex\n/' vendor_install.sh
echo "echo Install vendor modules success!" >> vendor_install.sh
chmod 755 vendor_install.sh
}
function modules_install() {
arg1=$1
pushd ${DIST_DIR}
rm modules -rf
mkdir modules
local modules_list=$(find ${MODULES_STAGING_DIR}/lib/modules -type f -name "*.ko")
cp ${modules_list} modules
local stagin_module=$(echo ${MODULES_STAGING_DIR}/lib/modules/*)
echo stagin_module=${stagin_module}
cp ${stagin_module}/modules.dep modules
cd modules
sed -i 's#[^ ]*/##g' modules.dep
adjust_sequence_modules_loading "${arg1[*]}"
touch __install.sh
for loop in `cat modules.dep | sed 's/:.*//'`; do
mod_probe $loop
echo insmod $loop >> __install.sh
done
cat __install.sh | awk ' {
if (!cnt[$2]) {
print $0;
cnt[$2]++;
}
}' > __install.sh.tmp
creat_ramdis_vendor_install_sh __install.sh.tmp
cp __install.sh.tmp __install.sh
sed -i '1s/^/#!\/bin\/sh\n\nset -ex\n/' __install.sh
echo "echo Install modules success!" >> __install.sh
chmod 755 __install.sh
echo "#!/bin/sh" > install.sh
# echo "./__install.sh || reboot" >> install.sh
# echo "./__install.sh" >> install.sh
echo "./ramdisk_install.sh" >> install.sh
echo "./vendor_install.sh" >> install.sh
chmod 755 install.sh
echo "/modules/: all `wc -l modules.dep | awk '{print $1}'` modules."
cd ../
popd
}
export -f modules_install
function rebuild_rootfs() {
pushd ${DIST_DIR}
local ARCH=arm64
if [[ -n $1 ]]; then
ARCH=$1
fi
rm rootfs -rf
mkdir rootfs
cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot rootfs
cd rootfs
dd if=rootfs_base.cpio.gz.uboot of=rootfs_base.cpio.gz bs=64 skip=1
gunzip rootfs_base.cpio.gz
mkdir rootfs
cd rootfs
cpio -i -F ../rootfs_base.cpio
if [ -d ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer ]; then
cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer . -rf
fi
cp -rf ../../modules .
if [[ -n ${LLVM} ]]; then
for module in `ls modules/*.ko`;
do
${ROOT_DIR}/${CLANG_PREBUILT_BIN}/llvm-objcopy --strip-debug ${module}
done
elif [[ -n ${CROSS_COMPILE} ]]; then
for module in `ls modules/*.ko`;
do
${CROSS_COMPILE}objcopy --strip-debug ${module}
done
else
echo "can't strip debug module"
fi
find . | cpio -o -H newc | gzip > ../rootfs_new.cpio.gz
cd ../
mkimage -A ${ARCH} -O linux -T ramdisk -C none -d rootfs_new.cpio.gz rootfs_new.cpio.gz.uboot
mv rootfs_new.cpio.gz.uboot ../
cd ../
popd
}
export -f rebuild_rootfs
function check_undefined_symbol() {
pushd ${DIST_DIR}/modules
echo
echo "========================================================"
echo "Functions or variables not defined in this module refer to which module."
nm ../vmlinux | grep -E " T | D | B | R | W "> vmlinux_T.txt
cat __install.sh | grep "insmod" | cut -d ' ' -f 2 > module_list.txt
while read LINE
do
echo ${LINE}
for U in `nm ${LINE} | grep " U " | sed -e 's/^\s*//' -e 's/\s*$//' | cut -d ' ' -f 2`
do
#echo ${U}
U_v=`grep -w ${U} vmlinux_T.txt`
in_vmlinux=0
if [ -n "${U_v}" ];
then
#printf "\t%-50s <== vmlinux\n" ${U}
in_vmlinux=1
continue
fi
in_module=0
MODULE=
while read LINE1
do
U_m=`nm ${LINE1} | grep -E " T | D | B | R " | grep -v "\.cfi_jt" | grep "${U}"`
if [ -n "${U_m}" ];
then
in_module=1
MODULE=${LINE1}
fi
done < module_list.txt
if [ ${in_module} -eq "1" ];
then
printf "\t%-50s <== %s\n" ${U} ${MODULE}
continue
else
printf "\t%-50s <== none\n" ${U}
fi
done
echo
echo
done < module_list.txt
rm vmlinux_T.txt
rm module_list.txt
popd
}
export -f check_undefined_symbol