blob: 233b047c7eb897dc612b42e9146365802c9bc689 [file] [log] [blame]
wanwei.jiang91776952021-11-19 13:10:32 +08001#!/bin/bash
2
3function pre_defconfig_cmds() {
wanwei.jiangff4dccd2022-08-14 01:14:51 +08004 export OUT_AMLOGIC_DIR=$(readlink -m ${COMMON_OUT_DIR}/amlogic)
Lei Zhang2853aa52022-08-23 09:40:06 +08005 if [ "${ARCH}" = "arm" ]; then
6 export PATH=${PATH}:/usr/bin/
7 fi
wanwei.jiangff4dccd2022-08-14 01:14:51 +08008
Wanwei Jiang51217812022-11-01 20:23:03 +08009 if [[ -z ${ANDROID_PROJECT} ]]; then
10 local temp_file=`mktemp /tmp/config.XXXXXXXXXXXX`
11 echo "CONFIG_AMLOGIC_SERIAL_MESON=y" > ${temp_file}
qinglin.li931a53f2022-11-23 11:09:03 +080012 echo "CONFIG_DEVTMPFS=y" >> ${temp_file}
Dezhen Wanga6806c52023-06-13 19:47:05 +080013 if [[ ${ARCH} == arm ]]; then
Wanwei Jiang51217812022-11-01 20:23:03 +080014 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${GKI_BASE_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG} ${temp_file}
Dezhen Wanga6806c52023-06-13 19:47:05 +080015 else
16 if [[ ${GKI_CONFIG} == gki_20 ]]; then
17 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${GKI_BASE_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG} ${temp_file}
18 elif [[ ${GKI_CONFIG} == gki_10 ]]; then
19 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${GKI_BASE_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG_GKI10} ${temp_file}
20 elif [[ ${GKI_CONFIG} == gki_debug ]]; then
21 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${GKI_BASE_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG_GKI10} ${ROOT_DIR}/${FRAGMENT_CONFIG_DEBUG} ${temp_file}
22 fi
Wanwei Jiang51217812022-11-01 20:23:03 +080023 fi
24 rm ${temp_file}
25 else
Dezhen Wanga6806c52023-06-13 19:47:05 +080026 if [[ ${ARCH} == arm ]]; then
27 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${GKI_BASE_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG}
28 else
29 if [[ ${GKI_CONFIG} == gki_20 ]]; then
30 if [[ -n ${CHECK_GKI_20} ]]; then
31 local temp_file=`mktemp /tmp/config.XXXXXXXXXXXX`
32 echo "CONFIG_STMMAC_ETH=n" > ${temp_file}
33 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${GKI_BASE_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG} ${temp_file}
34 rm ${temp_file}
35 else
36 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${GKI_BASE_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG}
37 fi
38 elif [[ ${GKI_CONFIG} == gki_10 ]]; then
39 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${GKI_BASE_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG_GKI10}
40 elif [[ ${GKI_CONFIG} == gki_debug ]]; then
41 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${GKI_BASE_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG_GKI10} ${ROOT_DIR}/${FRAGMENT_CONFIG_DEBUG}
qinglin.li8d41aaf2023-02-07 19:49:44 +080042 fi
Wanwei Jiang51217812022-11-01 20:23:03 +080043 fi
wanwei.jiang6fdd3152022-08-01 20:35:05 +080044 fi
qinglin.li7a994a02022-12-05 15:04:40 +080045
46 if [[ -n ${UPGRADE_PROJECT} ]]; then
Dezhen Wang061c4782023-05-25 11:13:08 +080047 if [[ ${ANDROID_VERSION} == r || ${ANDROID_VERSION} == R ]]; then
48 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG_UPGRADE_R}
49 fi
qinglin.libce54712023-05-08 13:56:31 +080050 if [[ ${ANDROID_VERSION} == p || ${ANDROID_VERSION} == P ]]; then
51 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG_UPGRADE_P}
52 fi
Dezhen Wang061c4782023-05-25 11:13:08 +080053 if [[ ${ANDROID_VERSION} == s || ${ANDROID_VERSION} == S ]]; then
54 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG_UPGRADE_S}
55 fi
yao zhang1a0c556a2023-06-27 10:32:14 +080056 if [[ ${ANDROID_VERSION} == u || ${ANDROID_VERSION} == U ]]; then
57 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG_UPGRADE_U}
58 fi
qinglin.li7a994a02022-12-05 15:04:40 +080059 fi
Dezhen Wangab7ba642023-03-15 14:10:44 +080060
Wanwei Jiangc65e4d32023-03-21 16:24:41 +080061 if [[ ${IN_BUILD_GKI_10} == 1 ]]; then
62 local temp_file=`mktemp /tmp/config.XXXXXXXXXXXX`
63 echo "CONFIG_MODULE_SIG_ALL=y" >> ${temp_file}
64 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${temp_file}
65 rm ${temp_file}
66 fi
Dezhen Wanga5f456a2023-05-05 17:40:31 +080067
68 if [[ -n ${DEV_CONFIGS} ]]; then
69 config_list=$(echo ${DEV_CONFIGS}|sed 's/+/ /g')
70 #verify the extra config is in the right path and merge the config
71 CONFIG_DIR=arch/${ARCH}/configs
72 for config_name in ${config_list[@]}
73 do
74 if [[ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/${CONFIG_DIR}/${config_name} ]]; then
75 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/${CONFIG_DIR}/${config_name}
76 elif [[ -f ${config_name} ]]; then
77 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${config_name}
78 else
79 echo "ERROR: config file ${config_name} is not in the right path!!"
80 exit
81 fi
82 done
83 fi
wanwei.jiang91776952021-11-19 13:10:32 +080084}
85export -f pre_defconfig_cmds
86
87function post_defconfig_cmds() {
Wanwei Jiang2d4f9742022-09-13 11:22:17 +080088 rm ${ROOT_DIR}/${KCONFIG_DEFCONFIG}
wanwei.jiang91776952021-11-19 13:10:32 +080089}
90export -f post_defconfig_cmds
91
92function read_ext_module_config() {
93 ALL_LINE=""
94 while read LINE
95 do
96 if [[ $LINE != \#* && $LINE != "" ]]; then
97 ALL_LINE="$ALL_LINE"" ""$LINE"
98 fi
99 done < $1
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800100
101 echo "${ALL_LINE}"
wanwei.jiang91776952021-11-19 13:10:32 +0800102}
103
pengzhao.liua923dea2023-06-25 09:58:20 +0800104function autotest(){
105 if [[ -d ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/ ]]; then
106 if [[ ! -f ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/pre-commit ]]; then
107 cp ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/pre-commit ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/pre-commit
108 cp ${KERNEL_DIR}/scripts/amlogic/pre-commit ${KERNEL_DIR}/.git/hooks/pre-commit
109 chmod +x ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/pre-commit
110 chmod +x ${KERNEL_DIR}/.git/hooks/pre-commit
111 fi
112 fi
113}
114
wanwei.jiang91776952021-11-19 13:10:32 +0800115function read_ext_module_predefine() {
116 PRE_DEFINE=""
117
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800118 for y_config in `cat $1 | grep "^CONFIG_.*=y" | sed 's/=y//'`; do
wanwei.jiang91776952021-11-19 13:10:32 +0800119 PRE_DEFINE="$PRE_DEFINE"" -D"${y_config}
120 done
121
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800122 for m_config in `cat $1 | grep "^CONFIG_.*=m" | sed 's/=m//'`; do
wanwei.jiang91776952021-11-19 13:10:32 +0800123 PRE_DEFINE="$PRE_DEFINE"" -D"${m_config}_MODULE
124 done
125
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800126 echo "${PRE_DEFINE}"
wanwei.jiang91776952021-11-19 13:10:32 +0800127}
128
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800129top_ext_drivers=top_ext_drivers
wanwei.jiang91776952021-11-19 13:10:32 +0800130function prepare_module_build() {
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800131 local temp_file=`mktemp /tmp/kernel.XXXXXXXXXXXX`
Wanwei Jiang0a74fb12022-12-09 16:27:40 +0800132 if [[ ! `grep "CONFIG_AMLOGIC_IN_KERNEL_MODULES=y" ${ROOT_DIR}/${FRAGMENT_CONFIG}` ]]; then
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800133 sed 's:#.*$::g' ${ROOT_DIR}/${FRAGMENT_CONFIG} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
134 GKI_EXT_KERNEL_MODULE_CONFIG=$(read_ext_module_config ${temp_file})
135 GKI_EXT_KERNEL_MODULE_PREDEFINE=$(read_ext_module_predefine ${temp_file})
136 export GKI_EXT_KERNEL_MODULE_CONFIG GKI_EXT_KERNEL_MODULE_PREDEFINE
wanwei.jiang91776952021-11-19 13:10:32 +0800137 fi
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800138
139 for ext_module_config in ${EXT_MODULES_CONFIG}; do
140 sed 's:#.*$::g' ${ROOT_DIR}/${ext_module_config} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
141 GKI_EXT_MODULE_CONFIG=$(read_ext_module_config ${temp_file})
142 GKI_EXT_MODULE_PREDEFINE=$(read_ext_module_predefine ${temp_file})
143 done
144 export GKI_EXT_MODULE_CONFIG GKI_EXT_MODULE_PREDEFINE
145 echo GKI_EXT_MODULE_CONFIG=${GKI_EXT_MODULE_CONFIG}
146 echo GKI_EXT_MODULE_PREDEFINE=${GKI_EXT_MODULE_PREDEFINE}
147
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800148 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
149 if [[ -d ${top_ext_drivers} ]]; then
150 rm -rf ${top_ext_drivers}
151 fi
152 mkdir -p ${top_ext_drivers}
153 fi
154
155 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
156 extra_symbols="KBUILD_EXTRA_SYMBOLS +="
157 fi
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800158 ext_modules=
159 for ext_module in ${EXT_MODULES}; do
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800160 module_abs_path=`readlink -e ${ext_module}`
161 module_rel_path=$(rel_path ${module_abs_path} ${ROOT_DIR})
162 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
163 if [[ `echo ${module_rel_path} | grep "\.\.\/"` ]]; then
164 cp -rf ${module_abs_path} ${top_ext_drivers}
165 module_rel_path=${top_ext_drivers}/${module_abs_path##*/}
166 fi
167 fi
168 ext_modules="${ext_modules} ${module_rel_path}"
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800169 done
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800170
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800171 for ext_module_path in ${EXT_MODULES_PATH}; do
172 sed 's:#.*$::g' ${ROOT_DIR}/${ext_module_path} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800173 while read LINE
174 do
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800175 module_abs_path=`readlink -e ${LINE}`
176 module_rel_path=$(rel_path ${module_abs_path} ${ROOT_DIR})
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800177 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
178 if [[ `echo ${module_rel_path} | grep "\.\.\/"` ]]; then
179 cp -rf ${module_abs_path} ${top_ext_drivers}
180 module_rel_path=${top_ext_drivers}/${module_abs_path##*/}
181 fi
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800182 fi
183 ext_modules="${ext_modules} ${module_rel_path}"
184
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800185 done < ${temp_file}
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800186 done
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800187 EXT_MODULES=${ext_modules}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800188
189 local flag=0
190 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
191 for ext_module in ${EXT_MODULES}; do
192 ext_mod_rel=$(rel_path ${ext_module} ${KERNEL_DIR})
193 if [[ ${flag} -eq "1" ]]; then
194 sed -i "/# auto add KBUILD_EXTRA_SYMBOLS start/,/# auto add KBUILD_EXTRA_SYMBOLS end/d" ${ext_module}/Makefile
195 sed -i "2 i # auto add KBUILD_EXTRA_SYMBOLS end" ${ext_module}/Makefile
196 sed -i "2 i ${extra_symbols}" ${ext_module}/Makefile
197 sed -i "2 i # auto add KBUILD_EXTRA_SYMBOLS start" ${ext_module}/Makefile
198 echo "${ext_module}/Makefile add: ${extra_symbols}"
199 fi
200 extra_symbols="${extra_symbols} ${ext_mod_rel}/Module.symvers"
201 flag=1
202 done
203 fi
204
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800205 export EXT_MODULES
206 echo EXT_MODULES=${EXT_MODULES}
207
208 rm ${temp_file}
wanwei.jiang91776952021-11-19 13:10:32 +0800209}
210
211export -f prepare_module_build
wanwei.jiang612a8882021-11-23 17:12:23 +0800212
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800213function extra_cmds() {
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800214 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
215 for ext_module in ${EXT_MODULES}; do
216 sed -i "/# auto add KBUILD_EXTRA_SYMBOLS start/,/# auto add KBUILD_EXTRA_SYMBOLS end/d" ${ext_module}/Makefile
217 done
218 fi
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800219
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800220 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
221 if [[ -d ${top_ext_drivers} ]]; then
222 rm -rf ${top_ext_drivers}
223 fi
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800224 fi
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800225
226 for FILE in ${FILES}; do
227 if [[ "${FILE}" =~ \.dtbo ]] && \
228 [ -n "${DTS_EXT_DIR}" ] && [ -f "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" ] ; then
229 MKDTIMG_DTBOS="${MKDTIMG_DTBOS} ${DIST_DIR}/${FILE}"
230 fi
231 done
232 export MKDTIMG_DTBOS
233
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800234 set +x
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800235 modules_install
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800236 set -x
237
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800238 local src_dir=$(echo ${MODULES_STAGING_DIR}/lib/modules/*)
239 pushd ${src_dir}
wanwei.jiangf73b2202022-07-23 16:00:44 +0800240 cp modules.order modules_order.back
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800241 : > modules.order
Wanwei Jiang571dde62022-11-17 14:37:41 +0800242 set +x
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800243 while read LINE
244 do
245 find -name ${LINE} >> modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800246 done < ${OUT_AMLOGIC_DIR}/modules/modules.order
Wanwei Jiang571dde62022-11-17 14:37:41 +0800247 set -x
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800248 sed -i "s/^\.\///" modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800249 : > ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800250 ext_modules=
251 for ext_module in ${EXT_MODULES}; do
252 if [[ ${ext_module} =~ "../" ]]; then
253 ext_module_old=${ext_module}
254 ext_module=${ext_module//\.\.\//}
255 ext_dir=$(dirname ${ext_module})
256 [[ -d extra/${ext_module} ]] && rm -rf extra/${ext_dir}
257 mkdir -p extra/${ext_dir}
258 cp -rf extra/${ext_module_old} extra/${ext_dir}
259
260 ext_modules_order_file=$(ls extra/${ext_module}/modules.order.*)
261 ext_dir_top=${ext_module%/*}
wanwei.jiangf73b2202022-07-23 16:00:44 +0800262 sed -i "s/\.\.\///g" ${ext_modules_order_file}
263 cat ${ext_modules_order_file} >> modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800264 cat ${ext_modules_order_file} | awk -F/ '{print $NF}' >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
wanwei.jiangf73b2202022-07-23 16:00:44 +0800265 : > ${ext_modules_order_file}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800266 else
267 ext_modules_order_file=$(ls extra/${ext_module}/modules.order.*)
wanwei.jiangf73b2202022-07-23 16:00:44 +0800268 cat ${ext_modules_order_file} >> modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800269 cat ${ext_modules_order_file} | awk -F/ '{print $NF}' >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
wanwei.jiangf73b2202022-07-23 16:00:44 +0800270 : > ${ext_modules_order_file}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800271 fi
272 ext_modules="${ext_modules} ${ext_module}"
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800273 done
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800274 EXT_MODULES=${ext_modules}
275 echo EXT_MODULES=${EXT_MODULES}
276 export EXT_MODULES
wanwei.jiangf73b2202022-07-23 16:00:44 +0800277
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800278 head -n ${ramdisk_last_line} modules.order > vendor_boot_modules
wanwei.jiangf73b2202022-07-23 16:00:44 +0800279 file_last_line=`sed -n "$=" modules.order`
280 let line=${file_last_line}-${ramdisk_last_line}
281 tail -n ${line} modules.order > vendor_dlkm_modules
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800282 export MODULES_LIST=${src_dir}/vendor_boot_modules
283 if [[ "${ARCH}" = "arm64" && -z ${FAST_BUILD} ]]; then
Lei Zhang96efea62022-09-02 14:55:06 +0800284 export VENDOR_DLKM_MODULES_LIST=${src_dir}/vendor_dlkm_modules
285 fi
wanwei.jiangf73b2202022-07-23 16:00:44 +0800286
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800287 popd
wanwei.jiang1d154992022-05-30 14:56:26 +0800288
Wanwei Jiang0a74fb12022-12-09 16:27:40 +0800289 if [[ -z ${ANDROID_PROJECT} ]] && [[ -d ${OUT_DIR}/${DTS_EXT_DIR} ]]; then
wanwei.jiang1d154992022-05-30 14:56:26 +0800290 FILES="$FILES `ls ${OUT_DIR}/${DTS_EXT_DIR}`"
291 fi
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800292
293 if [[ -f ${KERNEL_BUILD_VAR_FILE} ]]; then
294 : > ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiangb2ed83c2022-09-09 14:01:20 +0800295 echo "KERNEL_DIR=${KERNEL_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800296 echo "COMMON_OUT_DIR=${COMMON_OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
297 echo "OUT_DIR=${OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
298 echo "DIST_DIR=${DIST_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800299 echo "OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800300 echo "MODULES_STAGING_DIR=${MODULES_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
301 echo "MODULES_PRIVATE_DIR=${MODULES_PRIVATE_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
302 echo "INITRAMFS_STAGING_DIR=${INITRAMFS_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
303 echo "SYSTEM_DLKM_STAGING_DIR=${SYSTEM_DLKM_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
304 echo "VENDOR_DLKM_STAGING_DIR=${VENDOR_DLKM_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
305 echo "MKBOOTIMG_STAGING_DIR=${MKBOOTIMG_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800306 echo "DIST_GKI_DIR=${DIST_GKI_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
307 echo "FULL_KERNEL_VERSION=${FULL_KERNEL_VERSION}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8fe00342023-05-16 22:53:14 +0800308 echo "GKI_MODULES_LOAD_WHITE_LIST=\"${GKI_MODULES_LOAD_WHITE_LIST[*]}\"" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8042e472023-06-06 14:12:32 +0800309 echo "BAZEL=${BAZEL}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800310 fi
Wanwei Jianga07f9a52022-09-30 18:40:40 +0800311
312 for module_path in ${PREBUILT_MODULES_PATH}; do
313 find ${module_path} -type f -name "*.ko" -exec cp {} ${DIST_DIR} \;
314 done
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800315}
316
317export -f extra_cmds
318
Wanwei Jiang2218b892023-03-17 17:31:21 +0800319function bazel_extra_cmds() {
320 modules_install
321
322 if [[ -f ${KERNEL_BUILD_VAR_FILE} ]]; then
323 : > ${KERNEL_BUILD_VAR_FILE}
324 echo "KERNEL_DIR=${KERNEL_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
325 echo "COMMON_OUT_DIR=${COMMON_OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
326 echo "DIST_DIR=${DIST_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
327 echo "OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8fe00342023-05-16 22:53:14 +0800328 echo "GKI_MODULES_LOAD_WHITE_LIST=\"${GKI_MODULES_LOAD_WHITE_LIST[*]}\"" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8042e472023-06-06 14:12:32 +0800329 echo "BAZEL=${BAZEL}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang2218b892023-03-17 17:31:21 +0800330 fi
331
332 if [[ ${GKI_CONFIG} != gki_20 ]]; then
333 [[ -f ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz ]] && rm -f ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz
334 mv ${DIST_DIR}/system_dlkm_staging_archive.tar.gz ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz
335 [[ -d ${DIST_DIR}/system_dlkm_gki10 ]] && rm -rf ${DIST_DIR}/system_dlkm_gki10
336 mkdir ${DIST_DIR}/system_dlkm_gki10
337 pushd ${DIST_DIR}/system_dlkm_gki10
338 tar zxf ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz
339 find -name "*.ko" | while read module; do
Wanwei Jiang475245b2023-05-10 21:06:52 +0800340 module_name=${module##*/}
Wanwei Jiang2218b892023-03-17 17:31:21 +0800341 if [[ ! `grep "/${module_name}" ${DIST_DIR}/system_dlkm.modules.load` ]]; then
342 rm -f ${module}
343 fi
344 done
345 tar czf ${DIST_DIR}/system_dlkm_staging_archive.tar.gz lib
346 popd
347 rm -rf ${DIST_DIR}/system_dlkm_gki10
348 fi
349}
350
351export -f bazel_extra_cmds
352
wanwei.jiang612a8882021-11-23 17:12:23 +0800353function mod_probe() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800354 local ko=$1
355 local loop
qinglin.lia284a932022-09-21 18:07:38 +0800356 for loop in `grep "^$ko:" modules.dep | sed 's/.*://'`; do
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800357 mod_probe $loop
358 echo insmod $loop >> __install.sh
359 done
wanwei.jiang612a8882021-11-23 17:12:23 +0800360}
361
Wanwei Jiang571dde62022-11-17 14:37:41 +0800362function mod_probe_recovery() {
363 local ko=$1
364 local loop
365 for loop in `grep "^$ko:" modules_recovery.dep | sed 's/.*://'`; do
366 mod_probe_recovery $loop
367 echo insmod $loop >> __install_recovery.sh
368 done
369}
370
wanwei.jiangb12abc82021-12-25 22:17:10 +0800371function adjust_sequence_modules_loading() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800372 if [[ -n $1 ]]; then
373 chips=$1
wanwei.jiangb12abc82021-12-25 22:17:10 +0800374 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800375
376 source ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list
377 cp modules.dep modules.dep.temp
378
379 soc_module=()
380 for chip in ${chips[@]}; do
381 chip_module=`ls amlogic-*-soc-${chip}.ko`
382 soc_module=(${soc_module[@]} ${chip_module[@]})
383 done
384 echo soc_module=${soc_module[*]}
385
386 delete_soc_module=()
387 if [[ ${#soc_module[@]} == 0 ]]; then
388 echo "Use all soc module"
389 else
390 for module in `ls amlogic-*-soc-*`; do
391 if [[ ! "${soc_module[@]}" =~ "${module}" ]] ; then
392 echo Delete soc module: ${module}
393 sed -n "/${module}:/p" modules.dep.temp
394 sed -i "/${module}:/d" modules.dep.temp
395 delete_soc_module=(${delete_soc_module[@]} ${module})
396 fi
397 done
398 echo delete_soc_module=${delete_soc_module[*]}
399 fi
400
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800401 if [[ -n ${CLK_SOC_MODULE} ]]; then
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800402 delete_clk_soc_modules=()
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800403 for module in `ls amlogic-clk-soc-*`; do
404 if [[ "${CLK_SOC_MODULE}" != "${module}" ]] ; then
405 echo Delete clk soc module: ${module}
406 sed -n "/${module}:/p" modules.dep.temp
407 sed -i "/${module}:/d" modules.dep.temp
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800408 delete_clk_soc_modules=(${delete_clk_soc_modules[@]} ${module})
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800409 fi
410 done
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800411 echo delete_clk_soc_modules=${delete_clk_soc_modules[*]}
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800412 fi
413
414 if [[ -n ${PINCTRL_SOC_MODULE} ]]; then
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800415 delete_pinctrl_soc_modules=()
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800416 for module in `ls amlogic-pinctrl-soc-*`; do
417 if [[ "${PINCTRL_SOC_MODULE}" != "${module}" ]] ; then
418 echo Delete pinctrl soc module: ${module}
419 sed -n "/${module}:/p" modules.dep.temp
420 sed -i "/${module}:/d" modules.dep.temp
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800421 delete_pinctrl_soc_modules=(${delete_pinctrl_soc_modules[@]} ${module})
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800422 fi
423 done
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800424 echo delete_pinctrl_soc_modules=${delete_pinctrl_soc_modules[*]}
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800425 fi
426
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800427 in_line_i=a
428 delete_type_modules=()
429 echo "TYPE_MODULE_SELECT_MODULE=${TYPE_MODULE_SELECT_MODULE}"
430 mkdir temp_dir
431 cd temp_dir
432 in_temp_dir=y
433 for element in ${TYPE_MODULE_SELECT_MODULE}; do
434 if [[ ${in_temp_dir} = y ]]; then
435 cd ../
436 rm -r temp_dir
437 in_temp_dir=
438 fi
439 if [[ ${in_line_i} = a ]]; then
440 in_line_i=b
441 type_module=${element}
442 select_modules_i=0
443 select_modules_count=
444 select_modules=
445 elif [[ ${in_line_i} = b ]]; then
446 in_line_i=c
447 select_modules_count=${element}
448 else
449 let select_modules_i+=1
450 select_modules="${select_modules} ${element}"
451 if [[ ${select_modules_i} -eq ${select_modules_count} ]]; then
452 in_line_i=a
453 echo type_module=$type_module select_modules=$select_modules
454 for module in `ls ${type_module}`; do
455 dont_delete_module=0
456 for select_module in ${select_modules}; do
457 if [[ "${select_module}" == "${module}" ]] ; then
458 dont_delete_module=1
459 break;
460 fi
461 done
462 if [[ ${dont_delete_module} != 1 ]]; then
463 echo Delete module: ${module}
464 sed -n "/${module}:/p" modules.dep.temp
465 sed -i "/${module}:/d" modules.dep.temp
466 delete_type_modules=(${delete_type_modules[@]} ${module})
467 fi
468 done
469 echo delete_type_modules=${delete_type_modules[*]}
470 fi
471 fi
472 done
473 if [[ -n ${in_temp_dir} ]]; then
474 cd ../
475 rm -r temp_dir
476 fi
477
478 black_modules=()
Dezhen Wang45dfcb02023-02-13 17:41:44 +0800479 mkdir service_module
480 echo MODULES_SERVICE_LOAD_LIST=${MODULES_SERVICE_LOAD_LIST[@]}
481 BLACK_AND_SERVICE_LIST=(${MODULES_LOAD_BLACK_LIST[@]} ${MODULES_SERVICE_LOAD_LIST[@]})
482 echo ${BLACK_AND_SERVICE_LIST[@]}
483 for module in ${BLACK_AND_SERVICE_LIST[@]}; do
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800484 modules=`ls ${module}*`
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800485 black_modules=(${black_modules[@]} ${modules[@]})
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800486 done
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800487 if [[ ${#black_modules[@]} == 0 ]]; then
488 echo "black_modules is null, don't delete modules, MODULES_LOAD_BLACK_LIST=${MODULES_LOAD_BLACK_LIST[*]}"
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800489 else
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800490 echo black_modules=${black_modules[*]}
491 for module in ${black_modules[@]}; do
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800492 echo Delete module: ${module}
493 sed -n "/${module}:/p" modules.dep.temp
494 sed -i "/${module}:/d" modules.dep.temp
495 done
496 fi
497
Wanwei Jiang475245b2023-05-10 21:06:52 +0800498 GKI_MODULES_LOAD_BLACK_LIST=()
499 if [[ "${FULL_KERNEL_VERSION}" != "common13-5.15" ]]; then
500 gki_modules_temp_file=`mktemp /tmp/config.XXXXXXXXXXXX`
501 cp ${ROOT_DIR}/${KERNEL_DIR}/android/gki_system_dlkm_modules ${gki_modules_temp_file}
502
503 for module in ${GKI_MODULES_LOAD_WHITE_LIST[@]}; do
504 sed -i "/\/${module}/d" ${gki_modules_temp_file}
505 done
506
507 for module in `cat ${gki_modules_temp_file}`; do
508 module=${module##*/}
509 GKI_MODULES_LOAD_BLACK_LIST[${#GKI_MODULES_LOAD_BLACK_LIST[*]}]=${module}
510 done
511 rm -f ${gki_modules_temp_file}
512
513 for module in ${GKI_MODULES_LOAD_BLACK_LIST[@]}; do
514 echo Delete module: ${module}
515 sed -n "/${module}:/p" modules.dep.temp
516 sed -i "/${module}:/d" modules.dep.temp
517 done
518 fi
519
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800520 cat modules.dep.temp | cut -d ':' -f 2 > modules.dep.temp1
Wanwei Jiang475245b2023-05-10 21:06:52 +0800521 delete_modules=(${delete_soc_module[@]} ${delete_clk_soc_modules[@]} ${delete_pinctrl_soc_modules[@]} ${delete_type_modules[@]} ${black_modules[@]} ${GKI_MODULES_LOAD_BLACK_LIST[@]})
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800522 for module in ${delete_modules[@]}; do
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800523 if [[ ! `ls $module` ]]; then
524 continue
525 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800526 match=`sed -n "/${module}/=" modules.dep.temp1`
527 for match in ${match[@]}; do
528 match_count=(${match_count[@]} $match)
529 done
530 if [[ ${#match_count[@]} != 0 ]]; then
531 echo "Error ${#match_count[@]} modules depend on ${module}, please modify:"
wanwei.jiang50759e12022-03-24 12:36:17 +0800532 echo ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list:MODULES_LOAD_BLACK_LIST
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800533 exit
534 fi
Dezhen Wang45dfcb02023-02-13 17:41:44 +0800535 if [[ -n ${ANDROID_PROJECT} ]]; then
536 for service_module_temp in ${MODULES_SERVICE_LOAD_LIST[@]}; do
537 if [[ ${module} = ${service_module_temp} ]]; then
538 mv ${module} service_module
539 fi
540 done
541 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800542 rm -f ${module}
543 done
544 rm -f modules.dep.temp1
wanwei.jiangb12abc82021-12-25 22:17:10 +0800545 touch modules.dep.temp1
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800546
547 for module in ${RAMDISK_MODULES_LOAD_LIST[@]}; do
548 echo RAMDISK_MODULES_LOAD_LIST: $module
wanwei.jiangb12abc82021-12-25 22:17:10 +0800549 sed -n "/${module}:/p" modules.dep.temp
550 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1
551 sed -i "/${module}:/d" modules.dep.temp
552 sed -n "/${module}.*\.ko:/p" modules.dep.temp
553 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1
554 sed -i "/${module}.*\.ko:/d" modules.dep.temp
555 done
556
Wanwei Jiang571dde62022-11-17 14:37:41 +0800557 if [[ -n ${ANDROID_PROJECT} ]]; then
558 cp modules.dep.temp modules_recovery.dep.temp
559 cp modules.dep.temp1 modules_recovery.dep.temp1
560 fi
561
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800562 for module in ${VENDOR_MODULES_LOAD_FIRST_LIST[@]}; do
563 echo VENDOR_MODULES_LOAD_FIRST_LIST: $module
564 sed -n "/${module}:/p" modules.dep.temp
565 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1
566 sed -i "/${module}:/d" modules.dep.temp
567 sed -n "/${module}.*\.ko:/p" modules.dep.temp
568 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1
569 sed -i "/${module}.*\.ko:/d" modules.dep.temp
wanwei.jiangb12abc82021-12-25 22:17:10 +0800570 done
571
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800572 if [ -f modules.dep.temp2 ]; then
573 rm modules.dep.temp2
574 fi
575 touch modules.dep.temp2
576 for module in ${VENDOR_MODULES_LOAD_LAST_LIST[@]}; do
577 echo VENDOR_MODULES_LOAD_FIRST_LIST: $module
578 sed -n "/${module}:/p" modules.dep.temp
579 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp2
580 sed -i "/${module}:/d" modules.dep.temp
581 sed -n "/${module}.*\.ko:/p" modules.dep.temp
582 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp2
583 sed -i "/${module}.*\.ko:/d" modules.dep.temp
584 done
585
586 cat modules.dep.temp >> modules.dep.temp1
587 cat modules.dep.temp2 >> modules.dep.temp1
588
wanwei.jiangb12abc82021-12-25 22:17:10 +0800589 cp modules.dep.temp1 modules.dep
590 rm modules.dep.temp
591 rm modules.dep.temp1
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800592 rm modules.dep.temp2
Wanwei Jiang571dde62022-11-17 14:37:41 +0800593
594 if [[ -n ${ANDROID_PROJECT} ]]; then
595 for module in ${RECOVERY_MODULES_LOAD_LIST[@]}; do
596 echo RECOVERY_MODULES_LOAD_LIST: $module
597 sed -n "/${module}:/p" modules_recovery.dep.temp
598 sed -n "/${module}:/p" modules_recovery.dep.temp >> modules_recovery.dep.temp1
599 sed -i "/${module}:/d" modules_recovery.dep.temp
600 sed -n "/${module}.*\.ko:/p" modules_recovery.dep.temp
601 sed -n "/${module}.*\.ko:/p" modules_recovery.dep.temp >> modules_recovery.dep.temp1
602 sed -i "/${module}.*\.ko:/d" modules_recovery.dep.temp
603 done
604
605 cat modules_recovery.dep.temp >> modules_recovery.dep.temp1
606
607 cp modules_recovery.dep.temp1 modules_recovery.dep
608 rm modules_recovery.dep.temp
609 rm modules_recovery.dep.temp1
610 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800611}
612
Wanwei Jiang571dde62022-11-17 14:37:41 +0800613create_ramdisk_vendor_recovery() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800614 install_temp=$1
Wanwei Jiang571dde62022-11-17 14:37:41 +0800615 if [[ -n ${ANDROID_PROJECT} ]]; then
616 recovery_install_temp=$2
617 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800618 source ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list
Wanwei Jiang9173e462022-09-29 00:58:33 +0800619 ramdisk_module_i=${#RAMDISK_MODULES_LOAD_LIST[@]}
620 while [ ${ramdisk_module_i} -gt 0 ]; do
621 let ramdisk_module_i--
622 echo ramdisk_module_i=$ramdisk_module_i ${RAMDISK_MODULES_LOAD_LIST[${ramdisk_module_i}]}
623 if [[ `grep "${RAMDISK_MODULES_LOAD_LIST[${ramdisk_module_i}]}" ${install_temp}` ]]; then
624 last_ramdisk_module=${RAMDISK_MODULES_LOAD_LIST[${ramdisk_module_i}]}
625 break;
626 fi
627 done
628 # last_ramdisk_module=${RAMDISK_MODULES_LOAD_LIST[${#RAMDISK_MODULES_LOAD_LIST[@]}-1]}
qinglin.libce54712023-05-08 13:56:31 +0800629 if [[ -n ${last_ramdisk_module} ]]; then
630 last_ramdisk_module_line=`sed -n "/${last_ramdisk_module}/=" ${install_temp}`
631 for line in ${last_ramdisk_module_line}; do
632 ramdisk_last_line=${line}
633 done
634 else
635 ramdisk_last_line=1
636 fi
wanwei.jiangf73b2202022-07-23 16:00:44 +0800637 export ramdisk_last_line
Wanwei Jiang571dde62022-11-17 14:37:41 +0800638
639 if [[ -n ${ANDROID_PROJECT} ]]; then
640 recovery_module_i=${#RECOVERY_MODULES_LOAD_LIST[@]}
qinglin.lidba324f2023-03-02 19:56:21 +0800641 #when RECOVERY_MODULES_LOAD_LIST is NULL
642 if [ ${#RECOVERY_MODULES_LOAD_LIST[@]} -eq 0 ]; then
643 last_recovery_module=${last_ramdisk_module}
644 fi
Wanwei Jiang571dde62022-11-17 14:37:41 +0800645 while [ ${recovery_module_i} -gt 0 ]; do
646 let recovery_module_i--
647 echo recovery_module_i=$recovery_module_i ${RECOVERY_MODULES_LOAD_LIST[${recovery_module_i}]}
648 if [[ `grep "${RECOVERY_MODULES_LOAD_LIST[${recovery_module_i}]}" ${recovery_install_temp}` ]]; then
649 last_recovery_module=${RECOVERY_MODULES_LOAD_LIST[${recovery_module_i}]}
650 break;
651 fi
652 done
653 # last_recovery_module=${RECOVERY_MODULES_LOAD_LIST[${#RECOVERY_MODULES_LOAD_LIST[@]}-1]}
qinglin.libce54712023-05-08 13:56:31 +0800654 if [[ -n ${last_recovery_module} ]]; then
655 last_recovery_module_line=`sed -n "/${last_recovery_module}/=" ${recovery_install_temp}`
656 for line in ${last_recovery_module_line}; do
657 recovery_last_line=${line}
658 done
659 else
660 recovery_last_line=1
661 fi
Wanwei Jiang571dde62022-11-17 14:37:41 +0800662 sed -n "${ramdisk_last_line},${recovery_last_line}p" ${recovery_install_temp} > recovery_install.sh
qinglin.libce54712023-05-08 13:56:31 +0800663 if [[ -n ${last_ramdisk_module} ]]; then
664 sed -i "1d" recovery_install.sh
665 fi
Wanwei Jiang571dde62022-11-17 14:37:41 +0800666 mkdir recovery
667 cat recovery_install.sh | cut -d ' ' -f 2 > recovery/recovery_modules.order
qinglin.lidba324f2023-03-02 19:56:21 +0800668 if [ ${#RECOVERY_MODULES_LOAD_LIST[@]} -ne 0 ]; then
669 cat recovery_install.sh | cut -d ' ' -f 2 | xargs cp -t recovery/
670 fi
Wanwei Jiang571dde62022-11-17 14:37:41 +0800671 sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' recovery_install.sh
672 echo "echo Install recovery modules success!" >> recovery_install.sh
673 chmod 755 recovery_install.sh
674 mv recovery_install.sh recovery/
675 fi
676
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800677 head -n ${ramdisk_last_line} ${install_temp} > ramdisk_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800678 mkdir ramdisk
wanwei.jiangf73b2202022-07-23 16:00:44 +0800679 cat ramdisk_install.sh | cut -d ' ' -f 2 > ramdisk/ramdisk_modules.order
wanwei.jiang50759e12022-03-24 12:36:17 +0800680 cat ramdisk_install.sh | cut -d ' ' -f 2 | xargs mv -t ramdisk/
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800681
qinglin.lie5b951e2022-06-07 16:13:44 +0800682 sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' ramdisk_install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800683 echo "echo Install ramdisk modules success!" >> ramdisk_install.sh
684 chmod 755 ramdisk_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800685 mv ramdisk_install.sh ramdisk/
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800686
687 file_last_line=`sed -n "$=" ${install_temp}`
688 let line=${file_last_line}-${ramdisk_last_line}
689 tail -n ${line} ${install_temp} > vendor_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800690 mkdir vendor
wanwei.jiangf73b2202022-07-23 16:00:44 +0800691 cat vendor_install.sh | cut -d ' ' -f 2 > vendor/vendor_modules.order
wanwei.jiang50759e12022-03-24 12:36:17 +0800692 cat vendor_install.sh | cut -d ' ' -f 2 | xargs mv -t vendor/
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800693
qinglin.lie5b951e2022-06-07 16:13:44 +0800694 sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' vendor_install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800695 echo "echo Install vendor modules success!" >> vendor_install.sh
696 chmod 755 vendor_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800697 mv vendor_install.sh vendor/
wanwei.jiangb12abc82021-12-25 22:17:10 +0800698}
699
wanwei.jiang612a8882021-11-23 17:12:23 +0800700function modules_install() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800701 arg1=$1
702
Wanwei Jiang2218b892023-03-17 17:31:21 +0800703 export OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR:-$(readlink -m ${COMMON_OUT_DIR}/amlogic)}
704 echo $OUT_AMLOGIC_DIR
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800705 rm -rf ${OUT_AMLOGIC_DIR}
706 mkdir -p ${OUT_AMLOGIC_DIR}
707 mkdir -p ${OUT_AMLOGIC_DIR}/modules
708 mkdir -p ${OUT_AMLOGIC_DIR}/ext_modules
Wanwei Jiangae4d7c12023-02-17 19:22:04 +0800709 mkdir -p ${OUT_AMLOGIC_DIR}/symbols
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800710
Wanwei Jiang2218b892023-03-17 17:31:21 +0800711 if [[ ${BAZEL} == "1" ]]; then
712 local output="out/bazel/output_user_root"
713 for dir in `ls ${output}`; do
714 if [[ ${dir} =~ ^[0-9A-Fa-f]*$ ]]; then
715 digit_output=${output}/${dir}
716 break
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800717 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800718 done
719
Wanwei Jiang0df84602023-05-05 14:40:42 +0800720 while read module
721 do
Wanwei Jiang475245b2023-05-10 21:06:52 +0800722 module_name=${module##*/}
Wanwei Jiang0df84602023-05-05 14:40:42 +0800723 if [[ `echo ${module} | grep "^kernel\/"` ]]; then
724 if [[ -f ${DIST_DIR}/${module_name} ]]; then
725 cp ${DIST_DIR}/${module_name} ${OUT_AMLOGIC_DIR}/modules
726 else
727 module=`find ${digit_output}/execroot/ -name ${module_name} | grep "amlogic"`
728 cp ${module} ${OUT_AMLOGIC_DIR}/modules
729 fi
730 elif [[ `echo ${module} | grep "^extra\/"` ]]; then
731 cp ${DIST_DIR}/${module_name} ${OUT_AMLOGIC_DIR}/ext_modules
Wanwei Jiang2218b892023-03-17 17:31:21 +0800732 else
Wanwei Jiang0df84602023-05-05 14:40:42 +0800733 echo "warning unrecognized module: ${module}"
Wanwei Jiang2218b892023-03-17 17:31:21 +0800734 fi
Wanwei Jiang0df84602023-05-05 14:40:42 +0800735 done < ${DIST_DIR}/modules.load
Wanwei Jiang2218b892023-03-17 17:31:21 +0800736
737 dep_file=`find ${digit_output}/execroot/ -name *.dep | grep "amlogic"`
738 cp ${dep_file} ${OUT_AMLOGIC_DIR}/modules/full_modules.dep
Wanwei Jiang0df84602023-05-05 14:40:42 +0800739 grep -E "^kernel\/" ${dep_file} > ${OUT_AMLOGIC_DIR}/modules/modules.dep
Wanwei Jiang2218b892023-03-17 17:31:21 +0800740 touch ${module} ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
741 for order_file in `find ${digit_output}/execroot/ -name "modules.order.*" | grep "amlogic"`; do
742 echo "# ${order_file}" >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
743 cat ${order_file} >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
744 echo >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
745 done
746 else
747 local MODULES_ROOT_DIR=$(echo ${MODULES_STAGING_DIR}/lib/modules/*)
748 pushd ${MODULES_ROOT_DIR}
749 local common_drivers=${COMMON_DRIVERS_DIR##*/}
750 local modules_list=$(find -type f -name "*.ko")
751 for module in ${modules_list}; do
752 if [[ -n ${ANDROID_PROJECT} ]]; then # copy internal build modules
753 if [[ `echo ${module} | grep -E "\.\/kernel\/|\/${common_drivers}\/"` ]]; then
754 cp ${module} ${OUT_AMLOGIC_DIR}/modules/
755 else
756 cp ${module} ${OUT_AMLOGIC_DIR}/ext_modules/
757 fi
758 else # copy all modules, include external modules
759 cp ${module} ${OUT_AMLOGIC_DIR}/modules/
760 fi
761 done
762
763 if [[ -n ${ANDROID_PROJECT} ]]; then # internal build modules
764 grep -E "^kernel\/|^${common_drivers}\/" modules.dep > ${OUT_AMLOGIC_DIR}/modules/modules.dep
765 else # all modules, include external modules
766 cp modules.dep ${OUT_AMLOGIC_DIR}/modules
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800767 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800768 popd
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800769 fi
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800770 pushd ${OUT_AMLOGIC_DIR}/modules
wanwei.jiang612a8882021-11-23 17:12:23 +0800771 sed -i 's#[^ ]*/##g' modules.dep
772
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800773 adjust_sequence_modules_loading "${arg1[*]}"
wanwei.jiangb12abc82021-12-25 22:17:10 +0800774
wanwei.jiang5c8d2b62021-11-26 20:36:33 +0800775 touch __install.sh
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800776 touch modules.order
wanwei.jiang612a8882021-11-23 17:12:23 +0800777 for loop in `cat modules.dep | sed 's/:.*//'`; do
778 mod_probe $loop
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800779 echo $loop >> modules.order
wanwei.jiang612a8882021-11-23 17:12:23 +0800780 echo insmod $loop >> __install.sh
781 done
782
783 cat __install.sh | awk ' {
784 if (!cnt[$2]) {
785 print $0;
786 cnt[$2]++;
787 }
788 }' > __install.sh.tmp
789
Wanwei Jiangbf119d22022-10-27 09:49:49 +0800790 cp modules.order modules.order.back
791 cut -d ' ' -f 2 __install.sh.tmp > modules.order
Wanwei Jiang571dde62022-11-17 14:37:41 +0800792
793 if [[ -n ${ANDROID_PROJECT} ]]; then
794 touch __install_recovery.sh
795 touch modules_recovery.order
796 for loop in `cat modules_recovery.dep | sed 's/:.*//'`; do
797 mod_probe_recovery $loop
798 echo $loop >> modules_recovery.order
799 echo insmod $loop >> __install_recovery.sh
800 done
801
802 cat __install_recovery.sh | awk ' {
803 if (!cnt[$2]) {
804 print $0;
805 cnt[$2]++;
806 }
807 }' > __install_recovery.sh.tmp
808
809 cut -d ' ' -f 2 __install_recovery.sh.tmp > modules_recovery.order
810 fi
811 create_ramdisk_vendor_recovery __install.sh.tmp __install_recovery.sh.tmp
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800812
Dezhen Wang124ad7d2023-02-06 15:35:14 +0800813 if [[ -n ${MANUAL_INSMOD_MODULE} ]]; then
814 install_file=manual_install.sh
815 else
816 install_file=install.sh
817 fi
818 echo "#!/bin/sh" > ${install_file}
819 echo "cd ramdisk" >> ${install_file}
820 echo "./ramdisk_install.sh" >> ${install_file}
821 echo "cd ../vendor" >> ${install_file}
822 echo "./vendor_install.sh" >> ${install_file}
823 echo "cd ../" >> ${install_file}
824 chmod 755 ${install_file}
wanwei.jiang612a8882021-11-23 17:12:23 +0800825
826 echo "/modules/: all `wc -l modules.dep | awk '{print $1}'` modules."
Wanwei Jianga5977bd2022-08-24 22:43:40 +0800827 rm __install.sh __install.sh.tmp
wanwei.jiang612a8882021-11-23 17:12:23 +0800828
Wanwei Jiang571dde62022-11-17 14:37:41 +0800829 if [[ -n ${ANDROID_PROJECT} ]]; then
830 rm __install_recovery.sh __install_recovery.sh.tmp
831 fi
832
wanwei.jiang236e9a32021-12-07 16:34:14 +0800833 popd
Wanwei Jiangae4d7c12023-02-17 19:22:04 +0800834
Wanwei Jiang2218b892023-03-17 17:31:21 +0800835 if [[ ${BAZEL} == "1" ]]; then
836 cp ${DIST_DIR}/vmlinux ${OUT_AMLOGIC_DIR}/symbols
837
838 find ${digit_output}/execroot -name *.ko | grep "unstripped" | while read module; do
839 cp ${module} ${OUT_AMLOGIC_DIR}/symbols
840 chmod +w ${OUT_AMLOGIC_DIR}/symbols/$(basename ${module})
841 done
842 chmod -w ${OUT_AMLOGIC_DIR}/symbols/*.ko
843 else
844 cp ${OUT_DIR}/vmlinux ${OUT_AMLOGIC_DIR}/symbols
845 find ${OUT_DIR} -type f -name "*.ko" -exec cp {} ${OUT_AMLOGIC_DIR}/symbols \;
846 for ext_module in ${EXT_MODULES}; do
847 find ${COMMON_OUT_DIR}/${ext_module} -type f -name "*.ko" -exec cp {} ${OUT_AMLOGIC_DIR}/symbols \;
848 done
849 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800850}
wanwei.jiang236e9a32021-12-07 16:34:14 +0800851export -f modules_install
wanwei.jiang612a8882021-11-23 17:12:23 +0800852
Wanwei Jiang2218b892023-03-17 17:31:21 +0800853function rename_external_module_name() {
854 local external_coppied
855 local vendor_coppied
Wanwei Jiang92c89432023-05-15 23:57:16 +0800856 sed 's/^[\t ]*\|[\t ]*$//g' ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/modules_rename.txt | sed '/^#/d;/^$/d' | sed 's/[[:space:]][[:space:]]*/ /g' | while read module_line; do
Wanwei Jiang2218b892023-03-17 17:31:21 +0800857 target_module_name=`echo ${module_line%%:*} | sed '/^#/d;/^$/d'`
858 modules_name=`echo ${module_line##:*} | sed '/^#/d;/^$/d'`
859 [[ -f ${OUT_AMLOGIC_DIR}/ext_modules/${target_module_name} ]] && external_coppied=1
860 [[ -f ${OUT_AMLOGIC_DIR}/modules/vendor/${target_module_name} ]] && vendor_coppied=1
861 echo target_module_name=$target_module_name modules_name=$modules_name external_coppied=$external_coppied vendor_coppied=$vendor_coppied
862 for module in ${modules_name}; do
863 echo module=$module
864 if [[ -f ${OUT_AMLOGIC_DIR}/ext_modules/${module} ]]; then
865 if [[ -z ${external_coppied} ]]; then
866 cp ${OUT_AMLOGIC_DIR}/ext_modules/${module} ${OUT_AMLOGIC_DIR}/ext_modules/${target_module_name}
867 external_coppied=1
868 fi
869 rm -f ${OUT_AMLOGIC_DIR}/ext_modules/${module}
870 fi
871 if [[ -f ${OUT_AMLOGIC_DIR}/modules/vendor/${module} ]]; then
872 if [[ -z ${vendor_coppied} ]]; then
873 cp ${OUT_AMLOGIC_DIR}/modules/vendor/${module} ${OUT_AMLOGIC_DIR}/modules/vendor/${target_module_name}
874 vendor_coppied=1
875 fi
876 rm -f ${OUT_AMLOGIC_DIR}/modules/vendor/${module}
877 fi
878 done
879 external_coppied=
880 vendor_coppied=
881 done
882}
883export -f rename_external_module_name
884
Dezhen Wang5ad119c2023-05-04 15:07:49 +0800885# function rebuild_rootfs can rebuild the rootfs if rootfs_base.cpio.gz.uboot exist
wanwei.jiang612a8882021-11-23 17:12:23 +0800886function rebuild_rootfs() {
Wanwei Jiang2218b892023-03-17 17:31:21 +0800887 echo
888 echo "========================================================"
889 if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then
890 echo "Rebuild rootfs in order to install modules!"
891 else
892 echo "There's no file ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot, so don't rebuild rootfs!"
893 return
894 fi
895
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800896 pushd ${OUT_AMLOGIC_DIR}
wanwei.jiang612a8882021-11-23 17:12:23 +0800897
Lei Zhang475c17b2022-03-03 11:08:50 +0800898 local ARCH=arm64
899 if [[ -n $1 ]]; then
900 ARCH=$1
901 fi
902
wanwei.jiang612a8882021-11-23 17:12:23 +0800903 rm rootfs -rf
904 mkdir rootfs
Wanwei Jiang2218b892023-03-17 17:31:21 +0800905 cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot rootfs
wanwei.jiang612a8882021-11-23 17:12:23 +0800906 cd rootfs
907 dd if=rootfs_base.cpio.gz.uboot of=rootfs_base.cpio.gz bs=64 skip=1
908 gunzip rootfs_base.cpio.gz
909 mkdir rootfs
910 cd rootfs
911 cpio -i -F ../rootfs_base.cpio
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800912 if [ -d ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer ]; then
913 cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer . -rf
qinglin.li3c25dbb2022-01-14 11:23:10 +0800914 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800915 cp -rf ../../modules .
wanwei.jiang8abddcc2022-03-16 21:18:48 +0800916
wanwei.jiang612a8882021-11-23 17:12:23 +0800917 find . | cpio -o -H newc | gzip > ../rootfs_new.cpio.gz
918 cd ../
Lei Zhang475c17b2022-03-03 11:08:50 +0800919 mkimage -A ${ARCH} -O linux -T ramdisk -C none -d rootfs_new.cpio.gz rootfs_new.cpio.gz.uboot
wanwei.jiang612a8882021-11-23 17:12:23 +0800920 mv rootfs_new.cpio.gz.uboot ../
921 cd ../
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800922 cp rootfs_new.cpio.gz.uboot ${DIST_DIR}
wanwei.jiang612a8882021-11-23 17:12:23 +0800923
924 popd
925}
926export -f rebuild_rootfs
wanwei.jiang403c9942021-11-30 18:29:02 +0800927
Dezhen Wang5ad119c2023-05-04 15:07:49 +0800928# function check_undefined_symbol can check the dependence among the modules
929# parameter:
930# --modules_depend
wanwei.jiang403c9942021-11-30 18:29:02 +0800931function check_undefined_symbol() {
Wanwei Jiang2218b892023-03-17 17:31:21 +0800932 if [[ ${MODULES_DEPEND} != "1" ]]; then
933 return
934 fi
935
936 echo "========================================================"
937 echo "print modules depend"
938
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800939 pushd ${OUT_AMLOGIC_DIR}/modules
wanwei.jiang403c9942021-11-30 18:29:02 +0800940 echo
941 echo "========================================================"
942 echo "Functions or variables not defined in this module refer to which module."
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800943 if [[ -n ${LLVM} ]]; then
944 compile_tool=${ROOT_DIR}/${CLANG_PREBUILT_BIN}/llvm-
945 elif [[ -n ${CROSS_COMPILE} ]]; then
946 compile_tool=${CROSS_COMPILE}
947 else
948 echo "can't find compile tool"
949 fi
Wanwei Jiang0a74fb12022-12-09 16:27:40 +0800950 ${compile_tool}nm ${DIST_DIR}/vmlinux | grep -E " T | D | B | R | W "> vmlinux_T.txt
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800951 # cat __install.sh | grep "insmod" | cut -d ' ' -f 2 > module_list.txt
952 cat ramdisk/ramdisk_install.sh | grep "insmod" | cut -d ' ' -f 2 > module_list.txt
953 cat vendor/vendor_install.sh | grep "insmod" | cut -d ' ' -f 2 >> module_list.txt
954 cp ramdisk/*.ko .
955 cp vendor/*.ko .
wanwei.jiang403c9942021-11-30 18:29:02 +0800956 while read LINE
957 do
958 echo ${LINE}
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800959 for U in `${compile_tool}nm ${LINE} | grep " U " | sed -e 's/^\s*//' -e 's/\s*$//' | cut -d ' ' -f 2`
wanwei.jiang403c9942021-11-30 18:29:02 +0800960 do
961 #echo ${U}
962 U_v=`grep -w ${U} vmlinux_T.txt`
963 in_vmlinux=0
964 if [ -n "${U_v}" ];
965 then
wanwei.jiangd7b29ef2021-12-01 19:59:41 +0800966 #printf "\t%-50s <== vmlinux\n" ${U}
wanwei.jiang403c9942021-11-30 18:29:02 +0800967 in_vmlinux=1
968 continue
969 fi
970 in_module=0
971 MODULE=
972 while read LINE1
973 do
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800974 U_m=`${compile_tool}nm ${LINE1} | grep -E " T | D | B | R " | grep -v "\.cfi_jt" | grep "${U}"`
wanwei.jiang403c9942021-11-30 18:29:02 +0800975 if [ -n "${U_m}" ];
976 then
977 in_module=1
978 MODULE=${LINE1}
979 fi
980 done < module_list.txt
981 if [ ${in_module} -eq "1" ];
982 then
983 printf "\t%-50s <== %s\n" ${U} ${MODULE}
984 continue
985 else
986 printf "\t%-50s <== none\n" ${U}
987 fi
988 done
989 echo
990 echo
991 done < module_list.txt
992 rm vmlinux_T.txt
993 rm module_list.txt
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800994 rm *.ko
wanwei.jiang403c9942021-11-30 18:29:02 +0800995 popd
996}
997export -f check_undefined_symbol
Dezhen Wangd40fa552023-04-11 16:13:27 +0800998
999function reorganized_abi_symbol_list_file() { # delete the extra information but symbol
1000 cat $@ | sed '/^$/d' >> ${symbol_tmp} # remove blank lines
1001 sed -i '/^\[/d' ${symbol_tmp} # remove the title
1002 sed -i '/^\#/d' ${symbol_tmp} # remove the comment
1003}
1004export -f reorganized_abi_symbol_list_file
1005
1006function abi_symbol_list_detect () { # detect symbol information that should be submitted or fix
1007 symbol_file1=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic
1008 symbol_file2=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.10
1009 symbol_file3=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.debug
1010 symbol_file4=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.illegal
1011
1012 file_list=("${symbol_file1} ${symbol_file2} ${symbol_file3} ${symbol_file4}")
1013 for file in ${file_list}
1014 do
1015 local symbol_tmp=`mktemp tmp.XXXXXXXXXXXX`
1016 reorganized_abi_symbol_list_file "${file}"
1017
1018 if [[ -s ${symbol_tmp} ]]; then
1019 if [[ ${file} =~ abi_gki_aarch64_amlogic.illegal ]]; then
1020 echo "WARNING: The symbols in ${file} are illegal, please deal with them as soon as possible!!!"
1021 else
1022 echo "WARNING: The symbols in ${file} should be submit to google!!!"
1023 fi
1024 cat ${symbol_tmp}
1025 echo -e "\n------------------------------------------------------------"
1026 fi
1027 rm ${symbol_tmp}
1028 done
1029}
1030export -f abi_symbol_list_detect
1031
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001032# adjust_config_action concerns three types of cmd:
1033# parameters:
1034# --menuconfig: make menuconfig manually based on different gki standard
1035# --basicconfig: only config kernel with google original gki_defconfig as base
1036# --check_defconfig: contrast the defconfig generated in out directory with gki_defconfig and show the difference
1037function adjust_config_action () {
1038 if [[ -n ${MENUCONFIG} ]] || [[ -n ${BASICCONFIG} ]] || [[ ${CHECK_DEFCONFIG} -eq "1" ]]; then
1039 # ${ROOT_DIR}/${BUILD_DIR}/config.sh menuconfig
1040 HERMETIC_TOOLCHAIN=0
1041 source "${ROOT_DIR}/${BUILD_DIR}/build_utils.sh"
1042 source "${ROOT_DIR}/${BUILD_DIR}/_setup_env.sh"
1043
1044 orig_config=$(mktemp)
1045 orig_defconfig=$(mktemp)
1046 out_config="${OUT_DIR}/.config"
1047 out_defconfig="${OUT_DIR}/defconfig"
1048 changed_config=$(mktemp)
1049 changed_defconfig=$(mktemp)
1050
1051 if [[ -n ${BASICCONFIG} ]]; then # config kernel with gki_defconfig or make menuconfig based on it
1052 set -x
1053 defconfig_name=`basename ${GKI_BASE_CONFIG}`
1054 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${defconfig_name})
1055 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1056 cp ${out_config} ${orig_config}
1057 cp ${out_defconfig} ${orig_defconfig}
1058 if [ "${BASICCONFIG}" = "m" ]; then # make menuconfig based on gki_defconfig
1059 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" menuconfig)
1060 fi
1061 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1062 ${KERNEL_DIR}/scripts/diffconfig ${orig_config} ${out_config} > ${changed_config}
1063 ${KERNEL_DIR}/scripts/diffconfig ${orig_defconfig} ${out_defconfig} > ${changed_defconfig}
1064 if [ "${ARCH}" = "arm" ]; then
1065 cp ${out_defconfig} ${GKI_BASE_CONFIG}
1066 fi
1067 set +x # show the difference between the gki_defconfig and the config after make menuconfig
1068 echo
1069 echo "========================================================"
1070 echo "==================== .config diff ===================="
1071 cat ${changed_config}
1072 echo "==================== defconfig diff ===================="
1073 cat ${changed_defconfig}
1074 echo "========================================================"
1075 echo
1076 elif [[ ${CHECK_DEFCONFIG} -eq "1" ]]; then # compare the defconfig generated in out directory with gki_defconfig
1077 set -x
1078 pre_defconfig_cmds
1079 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
1080 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig) # export the defconfig to out directory
1081 diff -u ${ROOT_DIR}/${GKI_BASE_CONFIG} ${OUT_DIR}/defconfig
1082 post_defconfig_cmds
1083 set +x
1084 else # make menuconfig based on config with different gki standard
1085 set -x
1086 pre_defconfig_cmds
1087 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
1088 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1089 cp ${out_config} ${orig_config}
1090 cp ${out_defconfig} ${orig_defconfig}
1091 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" menuconfig)
1092 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1093 ${KERNEL_DIR}/scripts/diffconfig ${orig_config} ${out_config} > ${changed_config}
1094 ${KERNEL_DIR}/scripts/diffconfig ${orig_defconfig} ${out_defconfig} > ${changed_defconfig}
1095 post_defconfig_cmds
1096 set +x
1097 echo
1098 echo "========================================================"
1099 echo "if the config follows GKI2.0, please add it to the file amlogic_gki.fragment manually"
1100 echo "if the config follows GKI1.0 optimize, please add it to the file amlogic_gki.10 manually"
1101 echo "if the config follows GKI1.0 debug, please add it to the file amlogic_gki.debug manually"
1102 echo "==================== .config diff ===================="
1103 cat ${changed_config}
1104 echo "==================== defconfig diff ===================="
1105 cat ${changed_defconfig}
1106 echo "========================================================"
1107 echo
1108 fi
1109 rm -f ${orig_config} ${changed_config} ${orig_defconfig} ${changed_defconfig}
1110 exit
1111 fi
1112}
1113export -f adjust_config_action
1114
1115# function build_part_of_kernel can only build part of kernel such as image modules or dtbs
1116# parameter:
1117# --image: only build image
1118# --modules: only build kernel modules
1119# --dtbs: only build dtbs
1120function build_part_of_kernel () {
1121 if [[ -n ${IMAGE} ]] || [[ -n ${MODULES} ]] || [[ -n ${DTB_BUILD} ]]; then
1122 old_path=${PATH}
1123 source "${ROOT_DIR}/${BUILD_DIR}/build_utils.sh"
1124 source "${ROOT_DIR}/${BUILD_DIR}/_setup_env.sh"
1125
1126 if [[ ! -f ${OUT_DIR}/.config ]]; then
1127 pre_defconfig_cmds
1128 set -x
1129 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
1130 set +x
1131 post_defconfig_cmds
1132 fi
1133
1134 if [[ -n ${IMAGE} ]]; then
1135 set -x
1136 if [ "${ARCH}" = "arm64" ]; then
1137 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) Image)
1138 elif [ "${ARCH}" = "arm" ]; then
1139 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) LOADADDR=0x108000 uImage)
1140 fi
1141 set +x
1142 fi
1143 mkdir -p ${DIST_DIR}
1144 if [[ -n ${DTB_BUILD} ]]; then
1145 set -x
1146 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) dtbs)
1147 set +x
1148 fi
1149 if [[ -n ${MODULES} ]]; then
1150 export MODULES_STAGING_DIR=$(readlink -m ${COMMON_OUT_DIR}/staging)
1151 rm -rf ${MODULES_STAGING_DIR}
1152 mkdir -p ${MODULES_STAGING_DIR}
1153 if [ "${DO_NOT_STRIP_MODULES}" != "1" ]; then
1154 MODULE_STRIP_FLAG="INSTALL_MOD_STRIP=1"
1155 fi
1156 if [[ `grep "CONFIG_AMLOGIC_IN_KERNEL_MODULES=y" ${ROOT_DIR}/${FRAGMENT_CONFIG}` ]]; then
1157 set -x
1158 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) modules)
1159 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} INSTALL_MOD_PATH=${MODULES_STAGING_DIR} "${MAKE_ARGS[@]}" modules_install)
1160 set +x
1161 fi
1162 echo EXT_MODULES=$EXT_MODULES
1163 prepare_module_build
1164 if [[ -z "${SKIP_EXT_MODULES}" ]] && [[ -n "${EXT_MODULES}" ]]; then
1165 echo "========================================================"
1166 echo " Building external modules and installing them into staging directory"
1167 KERNEL_UAPI_HEADERS_DIR=$(readlink -m ${COMMON_OUT_DIR}/kernel_uapi_headers)
1168 for EXT_MOD in ${EXT_MODULES}; do
1169 EXT_MOD_REL=$(rel_path ${ROOT_DIR}/${EXT_MOD} ${KERNEL_DIR})
1170 mkdir -p ${OUT_DIR}/${EXT_MOD_REL}
1171 set -x
1172 make -C ${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1173 O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}"
1174 make -C ${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1175 O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} \
1176 INSTALL_MOD_PATH=${MODULES_STAGING_DIR} \
1177 INSTALL_MOD_DIR="extra/${EXT_MOD}" \
1178 INSTALL_HDR_PATH="${KERNEL_UAPI_HEADERS_DIR}/usr" \
1179 "${MAKE_ARGS[@]}" modules_install
1180 set +x
1181 done
1182 fi
1183 export OUT_AMLOGIC_DIR=$(readlink -m ${COMMON_OUT_DIR}/amlogic)
1184 set -x
1185 extra_cmds
1186 set +x
1187 MODULES=$(find ${MODULES_STAGING_DIR} -type f -name "*.ko")
1188 cp -p ${MODULES} ${DIST_DIR}
1189
1190 new_path=${PATH}
1191 PATH=${old_path}
1192 echo "========================================================"
1193 if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then
1194 echo "Rebuild rootfs in order to install modules!"
1195 rebuild_rootfs ${ARCH}
1196 else
1197 echo "There's no file ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot, so don't rebuild rootfs!"
1198 fi
1199 PATH=${new_path}
1200 fi
1201 if [ -n "${DTS_EXT_DIR}" ]; then
1202 if [ -d "${ROOT_DIR}/${DTS_EXT_DIR}" ]; then
1203 DTS_EXT_DIR=$(rel_path ${ROOT_DIR}/${DTS_EXT_DIR} ${KERNEL_DIR})
1204 if [ -d ${OUT_DIR}/${DTS_EXT_DIR} ]; then
1205 FILES="$FILES `ls ${OUT_DIR}/${DTS_EXT_DIR}`"
1206 fi
1207 fi
1208 fi
1209 for FILE in ${FILES}; do
1210 if [ -f ${OUT_DIR}/${FILE} ]; then
1211 echo " $FILE"
1212 cp -p ${OUT_DIR}/${FILE} ${DIST_DIR}/
1213 elif [[ "${FILE}" =~ \.dtb|\.dtbo ]] && \
1214 [ -n "${DTS_EXT_DIR}" ] && [ -f "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" ] ; then
1215 # DTS_EXT_DIR is recalculated before to be relative to KERNEL_DIR
1216 echo " $FILE"
1217 cp -p "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" "${DIST_DIR}/"
1218 else
1219 echo " $FILE is not a file, skipping"
1220 fi
1221 done
1222 exit
1223 fi
1224}
1225
1226export -f build_part_of_kernel
1227
1228function export_env_variable () {
1229 export ABI BUILD_CONFIG LTO KMI_SYMBOL_LIST_STRICT_MODE CHECK_DEFCONFIG MANUAL_INSMOD_MODULE ARCH
qinglin.libce54712023-05-08 13:56:31 +08001230 export KERNEL_DIR COMMON_DRIVERS_DIR BUILD_DIR ANDROID_PROJECT GKI_CONFIG UPGRADE_PROJECT ANDROID_VERSION FAST_BUILD CHECK_GKI_20 DEV_CONFIGS
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001231 export FULL_KERNEL_VERSION BAZEL
1232
1233 echo ROOT_DIR=$ROOT_DIR
1234 echo ABI=${ABI} BUILD_CONFIG=${BUILD_CONFIG} LTO=${LTO} KMI_SYMBOL_LIST_STRICT_MODE=${KMI_SYMBOL_LIST_STRICT_MODE} CHECK_DEFCONFIG=${CHECK_DEFCONFIG} MANUAL_INSMOD_MODULE=${MANUAL_INSMOD_MODULE}
qinglin.libce54712023-05-08 13:56:31 +08001235 echo KERNEL_DIR=${KERNEL_DIR} COMMON_DRIVERS_DIR=${COMMON_DRIVERS_DIR} BUILD_DIR=${BUILD_DIR} ANDROID_PROJECT=${ANDROID_PROJECT} GKI_CONFIG=${GKI_CONFIG} UPGRADE_PROJECT=${UPGRADE_PROJECT} ANDROID_VERSION=${ANDROID_VERSION} FAST_BUILD=${FAST_BUILD} CHECK_GKI_20=${CHECK_GKI_20}
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001236 echo FULL_KERNEL_VERSION=${FULL_KERNEL_VERSION} BAZEL=${BAZEL}
1237 echo MENUCONFIG=${MENUCONFIG} BASICCONFIG=${BASICCONFIG} IMAGE=${IMAGE} MODULES=${MODULES} DTB_BUILD=${DTB_BUILD}
1238}
1239
1240export -f export_env_variable
Dezhen Wang850c0d22023-05-31 19:26:20 +08001241
1242function handle_input_parameters () {
1243 VA=
1244 ARGS=()
1245 for i in "$@"
1246 do
1247 case $i in
1248 --arch)
1249 ARCH=$2
1250 VA=1
1251 shift
1252 ;;
1253 --abi)
1254 ABI=1
1255 shift
1256 ;;
1257 --build_config)
1258 BUILD_CONFIG=$2
1259 VA=1
1260 shift
1261 ;;
1262 --lto)
1263 LTO=$2
1264 VA=1
1265 shift
1266 ;;
1267 --symbol_strict)
1268 KMI_SYMBOL_LIST_STRICT_MODE=$2
1269 VA=1
1270 shift
1271 ;;
1272 --menuconfig)
1273 MENUCONFIG=1
1274 shift
1275 ;;
1276 --basicconfig)
1277 if [ "$2" = "m" ] || [ "$2" = "n" ]; then
1278 BASICCONFIG=$2
1279 else
1280 BASICCONFIG="m"
1281 fi
1282 VA=1
1283 shift
1284 ;;
1285 --image)
1286 IMAGE=1
1287 shift
1288 ;;
1289 --modules)
1290 MODULES=1
1291 shift
1292 break
1293 ;;
1294 --dtbs)
1295 DTB_BUILD=1
1296 shift
1297 ;;
1298 --build_dir)
1299 BUILD_DIR=$2
1300 VA=1
1301 shift
1302 ;;
1303 --check_defconfig)
1304 CHECK_DEFCONFIG=1
1305 shift
1306 ;;
1307 --modules_depend)
1308 MODULES_DEPEND=1
1309 shift
1310 ;;
1311 --android_project)
1312 ANDROID_PROJECT=$2
1313 VA=1
1314 shift
1315 ;;
1316 --gki_20)
1317 GKI_CONFIG=gki_20
1318 shift
1319 ;;
1320 --gki_10)
1321 GKI_CONFIG=gki_10
1322 shift
1323 ;;
1324 --gki_debug)
1325 GKI_CONFIG=gki_debug
1326 shift
1327 ;;
1328 --fast_build)
1329 FAST_BUILD=1
1330 shift
1331 ;;
1332 --upgrade)
1333 UPGRADE_PROJECT=1
1334 ANDROID_VERSION=$2
1335 VA=1
1336 shift
1337 ;;
1338 --manual_insmod_module)
1339 MANUAL_INSMOD_MODULE=1
1340 shift
1341 ;;
Dezhen Wang850c0d22023-05-31 19:26:20 +08001342 --check_gki_20)
1343 CHECK_GKI_20=1
1344 GKI_CONFIG=gki_20
1345 LTO=none
1346 shift
1347 ;;
1348 --dev_config)
1349 DEV_CONFIGS=$2
1350 VA=1
1351 shift
1352 ;;
1353 --bazel)
1354 BAZEL=1
1355 shift
1356 ;;
1357 -h|--help)
1358 show_help
1359 exit 0
1360 ;;
1361 *)
1362 if [[ -n $1 ]];
1363 then
1364 if [[ -z ${VA} ]];
1365 then
1366 ARGS+=("$1")
1367 fi
1368 fi
1369 VA=
1370 shift
1371 ;;
1372 esac
1373 done
1374}
1375
1376export -f handle_input_parameters
1377
1378function set_default_parameters () {
1379 if [ "${ARCH}" = "arm" ]; then
1380 ARGS+=("LOADADDR=0x108000")
1381 else
1382 ARCH=arm64
1383 fi
1384
1385 if [[ -z "${ABI}" ]]; then
1386 ABI=0
1387 fi
1388 if [[ -z "${LTO}" ]]; then
1389 LTO=thin
1390 fi
1391 if [[ -n ${CHECK_GKI_20} && -z ${ANDROID_PROJECT} ]]; then
1392 ANDROID_PROJECT=ohm
1393 fi
1394
1395 if [[ -z "${BUILD_CONFIG}" ]]; then
1396 if [ "${ARCH}" = "arm64" ]; then
1397 BUILD_CONFIG=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic
1398 elif [ "${ARCH}" = "arm" ]; then
1399 BUILD_CONFIG=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic32
1400 fi
1401 fi
1402 if [[ -z "${BUILD_DIR}" ]]; then
1403 BUILD_DIR=build
1404 fi
1405
1406 version_message=$(grep -rn BRANCH= ${KERNEL_DIR}/build.config.constants)
1407 version_message="common${version_message##*android}"
1408 if [[ -n ${FULL_KERNEL_VERSION} ]]; then
1409 if [[ "${FULL_KERNEL_VERSION}" != "${version_message}" ]]; then
1410 echo "kernel version is not match!!"
1411 exit
1412 fi
1413 else
1414 FULL_KERNEL_VERSION=${version_message}
1415 fi
1416
1417 if [[ -z ${BAZEL} ]]; then
Dezhen Wang20069292023-06-20 14:51:21 +08001418 [[ "${FULL_KERNEL_VERSION}" != "common13-5.15" && "${ARCH}" == "arm64" && -z ${UPGRADE_PROJECT} ]] && BAZEL=1
Dezhen Wang850c0d22023-05-31 19:26:20 +08001419 fi
1420
1421 auto_patch_to_common_dir
1422
1423 if [[ ! -f ${BUILD_DIR}/build_abi.sh ]]; then
1424 echo "The directory of build does not exist";
1425 exit
1426 fi
1427
1428 ROOT_DIR=$(readlink -f $(dirname $0))
1429 if [[ ! -f ${ROOT_DIR}/${KERNEL_DIR}/init/main.c ]]; then
1430 ROOT_DIR=`pwd`
1431 if [[ ! -f ${ROOT_DIR}/${KERNEL_DIR}/init/main.c ]]; then
1432 echo "the file path of $0 is incorrect"
1433 exit
1434 fi
1435 fi
1436 export ROOT_DIR
1437
1438 CHECK_DEFCONFIG=${CHECK_DEFCONFIG:-0}
1439 MODULES_DEPEND=${MODULES_DEPEND:-0}
1440 if [[ ! -f ${KERNEL_BUILD_VAR_FILE} ]]; then
1441 export KERNEL_BUILD_VAR_FILE=`mktemp /tmp/kernel.XXXXXXXXXXXX`
1442 RM_KERNEL_BUILD_VAR_FILE=1
1443 fi
1444
1445 GKI_CONFIG=${GKI_CONFIG:-gki_debug}
1446
1447 export CROSS_COMPILE=
1448
1449 if [ "${ABI}" -eq "1" ]; then
1450 export OUT_DIR_SUFFIX="_abi"
1451 else
1452 OUT_DIR_SUFFIX=
1453 fi
1454}
1455
1456export -f set_default_parameters
1457
1458function auto_patch_to_common_dir () {
1459 #first auto patch when param parse end
Dezhen Wang850c0d22023-05-31 19:26:20 +08001460
1461 if [[ -f ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/auto_patch/auto_patch.sh ]]; then
1462 export PATCH_PARM
1463 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/auto_patch/auto_patch.sh ${FULL_KERNEL_VERSION}
1464 fi
1465
1466 if [[ ${ONLY_PATCH} -eq "1" ]]; then
1467 cd ${CURRENT_DIR}
1468 exit
1469 fi
1470}
1471
1472export -f auto_patch_to_common_dir
1473
1474
1475# the follow functions are used for smarthome
1476function handle_input_parameters_for_smarthome () {
1477 VA=
1478 ARGS=()
1479 for i in "$@"
1480 do
1481 case $i in
1482 --savedefconfig)
1483 SAVEDEFCONFIG=1
1484 shift
1485 ;;
1486 --menuconfig)
1487 MENUCONFIG=1
1488 shift
1489 ;;
1490 --dtb)
1491 DTB=1
1492 shift
1493 ;;
1494 --manual_insmod_module)
1495 MANUAL_INSMOD_MODULE=1
1496 shift
1497 ;;
1498 --patch)
1499 ONLY_PATCH=1
1500 shift
1501 ;;
1502 -h|--help)
1503 show_help
1504 exit 0
1505 ;;
1506 *)
1507 if [[ -n $1 ]];
1508 then
1509 if [[ -z ${VA} ]];
1510 then
1511 ARGS+=("$1")
1512 fi
1513 fi
1514 VA=
1515 shift
1516 ;;
1517 esac
1518 done
1519}
1520
1521export -f handle_input_parameters_for_smarthome
1522
1523function set_default_parameters_for_smarthome () {
1524 version_message=$(grep -rn BRANCH= ${KERNEL_DIR}/build.config.constants)
1525 version_message="common${version_message##*android}"
1526 if [[ -n ${FULL_KERNEL_VERSION} ]]; then
1527 if [[ "${FULL_KERNEL_VERSION}" != "${version_message}" ]]; then
1528 echo "kernel version is not match!!"
1529 exit
1530 fi
1531 else
1532 FULL_KERNEL_VERSION=${version_message}
1533 fi
1534
1535 tool_args=()
1536 prebuilts_paths=(
1537 CLANG_PREBUILT_BIN
1538 #BUILDTOOLS_PREBUILT_BIN
1539 )
1540 echo CC_CLANG=$CC_CLANG
1541 if [[ $CC_CLANG -eq "1" ]]; then
1542 source ${ROOT_DIR}/${KERNEL_DIR}/build.config.common
1543 if [[ -n "${LLVM}" ]]; then
1544 tool_args+=("LLVM=1")
1545 fi
1546 #if [ -n "${DTC}" ]; then
1547 # tool_args+=("DTC=${DTC}")
1548 #fi
1549 for prebuilt_bin in "${prebuilts_paths[@]}"; do
1550 prebuilt_bin=\${${prebuilt_bin}}
1551 eval prebuilt_bin="${prebuilt_bin}"
1552 if [ -n "${prebuilt_bin}" ]; then
1553 PATH=${PATH//"${ROOT_DIR}\/${prebuilt_bin}:"}
1554 PATH=${ROOT_DIR}/${prebuilt_bin}:${PATH} # add the clang tool to env PATH
1555 fi
1556 done
1557 export PATH
1558 elif [[ -n $CROSS_COMPILE_TOOL ]]; then
1559 export CROSS_COMPILE=${CROSS_COMPILE_TOOL}
1560 fi
1561
1562 if [[ $ARCH == arm64 ]]; then
1563 OUTDIR=${ROOT_DIR}/out/kernel-5.15-64
1564 elif [[ $ARCH == arm ]]; then
1565 OUTDIR=${ROOT_DIR}/out/kernel-5.15-32
1566 tool_args+=("LOADADDR=0x208000")
1567 elif [[ $ARCH == riscv ]]; then
1568 OUTDIR=${ROOT_DIR}/out/riscv-kernel-5.15-64
1569 fi
1570 TOOL_ARGS="${tool_args[@]}"
1571
1572 OUT_DIR=${OUTDIR}/common
1573 mkdir -p ${OUT_DIR}
1574 if [ "${SKIP_RM_OUTDIR}" != "1" ] ; then
1575 rm -rf ${OUTDIR}
1576 fi
1577
1578 echo "========================================================"
1579 echo ""
1580 export DIST_DIR=$(readlink -m ${OUTDIR}/dist)
1581 export MODULES_STAGING_DIR=$(readlink -m ${OUTDIR}/staging)
1582 export OUT_AMLOGIC_DIR=$(readlink -m ${OUTDIR}/amlogic)
1583 echo OUTDIR=$OUTDIR DIST_DIR=$DIST_DIR MODULES_STAGING_DIR=$MODULES_STAGING_DIR KERNEL_DIR=$KERNEL_DIR
1584
1585
1586 source ${ROOT_DIR}/build/kernel/build_utils.sh
1587
1588 DTS_EXT_DIR=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/boot/dts/amlogic
1589 DTS_EXT_DIR=$(rel_path ${ROOT_DIR}/${DTS_EXT_DIR} ${KERNEL_DIR})
1590 export dtstree=${DTS_EXT_DIR}
1591 export DTC_INCLUDE=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/include
1592
1593 EXT_MODULES="
1594 ${EXT_MODULES}
1595 "
1596
1597 EXT_MODULES_CONFIG="
1598 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/ext_modules_config
1599 "
1600
1601 EXT_MODULES_PATH="
1602 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/ext_modules_path
1603 "
1604
1605 POST_KERNEL_BUILD_CMDS="prepare_module_build"
1606 EXTRA_CMDS="extra_cmds"
1607
1608 IN_KERNEL_MODULES=1
1609}
1610
1611export -f set_default_parameters_for_smarthome
1612
1613function savedefconfig_cmd_for_smarthome () {
1614 if [[ -n ${SAVEDEFCONFIG} ]]; then
1615 set -x
1616 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${DEFCONFIG}
1617 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} savedefconfig
1618 rm ${KERNEL_DIR}/arch/${ARCH}/configs/${DEFCONFIG}
1619 cp -f ${OUT_DIR}/defconfig ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/configs/${DEFCONFIG}
1620 set +x
1621 exit
1622 fi
1623}
1624
1625export -f savedefconfig_cmd_for_smarthome
1626
1627function only_build_dtb_for_smarthome () {
1628 if [[ -n ${DTB} ]]; then
1629 set -x
1630 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
1631 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs || exit
1632 set +x
1633 exit
1634 fi
1635}
1636
1637export -f only_build_dtb_for_smarthome
1638
1639function make_menuconfig_cmd_for_smarthome () {
1640 if [[ -n ${MENUCONFIG} ]]; then
1641 set -x
1642 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${DEFCONFIG}
1643 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} menuconfig
1644 set +x
1645 exit
1646 fi
1647}
1648
1649export -f make_menuconfig_cmd_for_smarthome
1650
1651function build_kernel_for_different_cpu_architecture () {
1652 set -x
1653 if [[ $ARCH == arm64 ]]; then
1654 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
1655 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} headers_install &&
1656 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} Image -j12 &&
1657 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} modules -j12 &&
1658 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} INSTALL_MOD_PATH=${MODULES_STAGING_DIR} INSTALL_MOD_STRIP=1 modules_install -j12 &&
1659 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs -j12 || exit
1660 rm ${ROOT_DIR}/${KERNEL_DIR}/arch/arm64/configs/${DEFCONFIG}
1661 elif [[ $ARCH == arm ]]; then
1662 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
1663 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} headers_install &&
1664 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} uImage -j12 &&
1665 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} modules -j12 &&
1666 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} INSTALL_MOD_PATH=${MODULES_STAGING_DIR} INSTALL_MOD_STRIP=1 modules_install -j12 &&
1667 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs -j12 || exit
1668 rm ${ROOT_DIR}/${KERNEL_DIR}/arch/arm/configs/${DEFCONFIG}
1669 elif [[ $ARCH == riscv ]]; then
1670 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
1671 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} headers_install &&
1672 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} Image -j12 &&
1673 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} modules -j12 &&
1674 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} INSTALL_MOD_PATH=${MODULES_STAGING_DIR} modules_install -j12 &&
1675 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs -j12 || exit
1676 rm ${ROOT_DIR}/${KERNEL_DIR}/arch/riscv/configs/${DEFCONFIG}
1677 fi
1678 cp ${OUT_DIR}/arch/${ARCH}/boot/Image* ${DIST_DIR}
1679 cp ${OUT_DIR}/arch/${ARCH}/boot/uImage* ${DIST_DIR}
1680 cp ${OUT_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/boot/dts/amlogic/*.dtb ${DIST_DIR}
1681 cp ${OUT_DIR}/vmlinux ${DIST_DIR}
1682 set +x
1683}
1684
1685export -f build_kernel_for_different_cpu_architecture
1686
1687function build_ext_modules() {
1688 for EXT_MOD in ${EXT_MODULES}; do
1689 EXT_MOD_REL=$(rel_path ${ROOT_DIR}/${EXT_MOD} ${KERNEL_DIR})
1690 mkdir -p ${OUT_DIR}/${EXT_MOD_REL}
1691
1692 set -x
1693 make ARCH=${ARCH} -C ${ROOT_DIR}/${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1694 O=${OUT_DIR} ${TOOL_ARGS} -j12 || exit
1695 make ARCH=${ARCH} -C ${ROOT_DIR}/${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1696 O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} \
1697 INSTALL_MOD_PATH=${MODULES_STAGING_DIR} \
1698 INSTALL_MOD_DIR="extra/${EXT_MOD}" \
1699 INSTALL_MOD_STRIP=1 \
1700 modules_install -j12 || exit
1701 set +x
1702 done
1703}
1704
1705export -f build_ext_modules
1706
1707function copy_modules_and_rebuild_rootfs_for_smarthome () {
1708 MODULES=$(find ${MODULES_STAGING_DIR} -type f -name "*.ko")
1709 if [ -n "${MODULES}" ]; then
1710 if [ -n "${IN_KERNEL_MODULES}" -o -n "${EXT_MODULES}" -o -n "${EXT_MODULES_MAKEFILE}" ]; then
1711 echo "========================================================"
1712 echo " Copying modules files"
1713 for module in ${MODULES}; do
1714 cp ${module} ${DIST_DIR}
1715 done
1716 if [ "${COMPRESS_MODULES}" = "1" ]; then
1717 echo " Archiving modules to ${MODULES_ARCHIVE}"
1718 tar --transform="s,.*/,," -czf ${DIST_DIR}/${MODULES_ARCHIVE} ${MODULES[@]}
1719 fi
1720 fi
1721
1722 if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then
1723 echo "Rebuild rootfs in order to install modules!"
1724 rebuild_rootfs ${ARCH}
1725 echo "Build success!"
1726 else
1727 echo "There's no file ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot, so don't rebuild rootfs!"
1728 fi
1729 fi
1730}
1731
1732export -f copy_modules_and_rebuild_rootfs_for_smarthome