blob: 9335aa46eed0a4ccc82c1278f2f80d53eb573b77 [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
qinglin.li7a994a02022-12-05 15:04:40 +080056 fi
Dezhen Wangab7ba642023-03-15 14:10:44 +080057
Wanwei Jiangc65e4d32023-03-21 16:24:41 +080058 if [[ ${IN_BUILD_GKI_10} == 1 ]]; then
59 local temp_file=`mktemp /tmp/config.XXXXXXXXXXXX`
60 echo "CONFIG_MODULE_SIG_ALL=y" >> ${temp_file}
61 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${temp_file}
62 rm ${temp_file}
63 fi
Dezhen Wanga5f456a2023-05-05 17:40:31 +080064
65 if [[ -n ${DEV_CONFIGS} ]]; then
66 config_list=$(echo ${DEV_CONFIGS}|sed 's/+/ /g')
67 #verify the extra config is in the right path and merge the config
68 CONFIG_DIR=arch/${ARCH}/configs
69 for config_name in ${config_list[@]}
70 do
71 if [[ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/${CONFIG_DIR}/${config_name} ]]; then
72 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}
73 elif [[ -f ${config_name} ]]; then
74 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${config_name}
75 else
76 echo "ERROR: config file ${config_name} is not in the right path!!"
77 exit
78 fi
79 done
80 fi
wanwei.jiang91776952021-11-19 13:10:32 +080081}
82export -f pre_defconfig_cmds
83
84function post_defconfig_cmds() {
Wanwei Jiang2d4f9742022-09-13 11:22:17 +080085 rm ${ROOT_DIR}/${KCONFIG_DEFCONFIG}
wanwei.jiang91776952021-11-19 13:10:32 +080086}
87export -f post_defconfig_cmds
88
89function read_ext_module_config() {
90 ALL_LINE=""
91 while read LINE
92 do
93 if [[ $LINE != \#* && $LINE != "" ]]; then
94 ALL_LINE="$ALL_LINE"" ""$LINE"
95 fi
96 done < $1
wanwei.jiang5c861ae2022-04-21 00:51:50 +080097
98 echo "${ALL_LINE}"
wanwei.jiang91776952021-11-19 13:10:32 +080099}
100
pengzhao.liua923dea2023-06-25 09:58:20 +0800101function autotest(){
102 if [[ -d ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/ ]]; then
103 if [[ ! -f ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/pre-commit ]]; then
104 cp ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/pre-commit ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/pre-commit
105 cp ${KERNEL_DIR}/scripts/amlogic/pre-commit ${KERNEL_DIR}/.git/hooks/pre-commit
106 chmod +x ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/pre-commit
107 chmod +x ${KERNEL_DIR}/.git/hooks/pre-commit
108 fi
109 fi
110}
111
wanwei.jiang91776952021-11-19 13:10:32 +0800112function read_ext_module_predefine() {
113 PRE_DEFINE=""
114
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800115 for y_config in `cat $1 | grep "^CONFIG_.*=y" | sed 's/=y//'`; do
wanwei.jiang91776952021-11-19 13:10:32 +0800116 PRE_DEFINE="$PRE_DEFINE"" -D"${y_config}
117 done
118
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800119 for m_config in `cat $1 | grep "^CONFIG_.*=m" | sed 's/=m//'`; do
wanwei.jiang91776952021-11-19 13:10:32 +0800120 PRE_DEFINE="$PRE_DEFINE"" -D"${m_config}_MODULE
121 done
122
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800123 echo "${PRE_DEFINE}"
wanwei.jiang91776952021-11-19 13:10:32 +0800124}
125
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800126top_ext_drivers=top_ext_drivers
wanwei.jiang91776952021-11-19 13:10:32 +0800127function prepare_module_build() {
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800128 local temp_file=`mktemp /tmp/kernel.XXXXXXXXXXXX`
Wanwei Jiang0a74fb12022-12-09 16:27:40 +0800129 if [[ ! `grep "CONFIG_AMLOGIC_IN_KERNEL_MODULES=y" ${ROOT_DIR}/${FRAGMENT_CONFIG}` ]]; then
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800130 sed 's:#.*$::g' ${ROOT_DIR}/${FRAGMENT_CONFIG} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
131 GKI_EXT_KERNEL_MODULE_CONFIG=$(read_ext_module_config ${temp_file})
132 GKI_EXT_KERNEL_MODULE_PREDEFINE=$(read_ext_module_predefine ${temp_file})
133 export GKI_EXT_KERNEL_MODULE_CONFIG GKI_EXT_KERNEL_MODULE_PREDEFINE
wanwei.jiang91776952021-11-19 13:10:32 +0800134 fi
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800135
136 for ext_module_config in ${EXT_MODULES_CONFIG}; do
137 sed 's:#.*$::g' ${ROOT_DIR}/${ext_module_config} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
138 GKI_EXT_MODULE_CONFIG=$(read_ext_module_config ${temp_file})
139 GKI_EXT_MODULE_PREDEFINE=$(read_ext_module_predefine ${temp_file})
140 done
141 export GKI_EXT_MODULE_CONFIG GKI_EXT_MODULE_PREDEFINE
142 echo GKI_EXT_MODULE_CONFIG=${GKI_EXT_MODULE_CONFIG}
143 echo GKI_EXT_MODULE_PREDEFINE=${GKI_EXT_MODULE_PREDEFINE}
144
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800145 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
146 if [[ -d ${top_ext_drivers} ]]; then
147 rm -rf ${top_ext_drivers}
148 fi
149 mkdir -p ${top_ext_drivers}
150 fi
151
152 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
153 extra_symbols="KBUILD_EXTRA_SYMBOLS +="
154 fi
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800155 ext_modules=
156 for ext_module in ${EXT_MODULES}; do
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800157 module_abs_path=`readlink -e ${ext_module}`
158 module_rel_path=$(rel_path ${module_abs_path} ${ROOT_DIR})
159 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
160 if [[ `echo ${module_rel_path} | grep "\.\.\/"` ]]; then
161 cp -rf ${module_abs_path} ${top_ext_drivers}
162 module_rel_path=${top_ext_drivers}/${module_abs_path##*/}
163 fi
164 fi
165 ext_modules="${ext_modules} ${module_rel_path}"
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800166 done
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800167
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800168 for ext_module_path in ${EXT_MODULES_PATH}; do
169 sed 's:#.*$::g' ${ROOT_DIR}/${ext_module_path} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800170 while read LINE
171 do
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800172 module_abs_path=`readlink -e ${LINE}`
173 module_rel_path=$(rel_path ${module_abs_path} ${ROOT_DIR})
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800174 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
175 if [[ `echo ${module_rel_path} | grep "\.\.\/"` ]]; then
176 cp -rf ${module_abs_path} ${top_ext_drivers}
177 module_rel_path=${top_ext_drivers}/${module_abs_path##*/}
178 fi
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800179 fi
180 ext_modules="${ext_modules} ${module_rel_path}"
181
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800182 done < ${temp_file}
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800183 done
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800184 EXT_MODULES=${ext_modules}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800185
186 local flag=0
187 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
188 for ext_module in ${EXT_MODULES}; do
189 ext_mod_rel=$(rel_path ${ext_module} ${KERNEL_DIR})
190 if [[ ${flag} -eq "1" ]]; then
191 sed -i "/# auto add KBUILD_EXTRA_SYMBOLS start/,/# auto add KBUILD_EXTRA_SYMBOLS end/d" ${ext_module}/Makefile
192 sed -i "2 i # auto add KBUILD_EXTRA_SYMBOLS end" ${ext_module}/Makefile
193 sed -i "2 i ${extra_symbols}" ${ext_module}/Makefile
194 sed -i "2 i # auto add KBUILD_EXTRA_SYMBOLS start" ${ext_module}/Makefile
195 echo "${ext_module}/Makefile add: ${extra_symbols}"
196 fi
197 extra_symbols="${extra_symbols} ${ext_mod_rel}/Module.symvers"
198 flag=1
199 done
200 fi
201
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800202 export EXT_MODULES
203 echo EXT_MODULES=${EXT_MODULES}
204
205 rm ${temp_file}
wanwei.jiang91776952021-11-19 13:10:32 +0800206}
207
208export -f prepare_module_build
wanwei.jiang612a8882021-11-23 17:12:23 +0800209
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800210function extra_cmds() {
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800211 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
212 for ext_module in ${EXT_MODULES}; do
213 sed -i "/# auto add KBUILD_EXTRA_SYMBOLS start/,/# auto add KBUILD_EXTRA_SYMBOLS end/d" ${ext_module}/Makefile
214 done
215 fi
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800216
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800217 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
218 if [[ -d ${top_ext_drivers} ]]; then
219 rm -rf ${top_ext_drivers}
220 fi
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800221 fi
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800222
223 for FILE in ${FILES}; do
224 if [[ "${FILE}" =~ \.dtbo ]] && \
225 [ -n "${DTS_EXT_DIR}" ] && [ -f "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" ] ; then
226 MKDTIMG_DTBOS="${MKDTIMG_DTBOS} ${DIST_DIR}/${FILE}"
227 fi
228 done
229 export MKDTIMG_DTBOS
230
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800231 set +x
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800232 modules_install
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800233 set -x
234
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800235 local src_dir=$(echo ${MODULES_STAGING_DIR}/lib/modules/*)
236 pushd ${src_dir}
wanwei.jiangf73b2202022-07-23 16:00:44 +0800237 cp modules.order modules_order.back
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800238 : > modules.order
Wanwei Jiang571dde62022-11-17 14:37:41 +0800239 set +x
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800240 while read LINE
241 do
242 find -name ${LINE} >> modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800243 done < ${OUT_AMLOGIC_DIR}/modules/modules.order
Wanwei Jiang571dde62022-11-17 14:37:41 +0800244 set -x
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800245 sed -i "s/^\.\///" modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800246 : > ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800247 ext_modules=
248 for ext_module in ${EXT_MODULES}; do
249 if [[ ${ext_module} =~ "../" ]]; then
250 ext_module_old=${ext_module}
251 ext_module=${ext_module//\.\.\//}
252 ext_dir=$(dirname ${ext_module})
253 [[ -d extra/${ext_module} ]] && rm -rf extra/${ext_dir}
254 mkdir -p extra/${ext_dir}
255 cp -rf extra/${ext_module_old} extra/${ext_dir}
256
257 ext_modules_order_file=$(ls extra/${ext_module}/modules.order.*)
258 ext_dir_top=${ext_module%/*}
wanwei.jiangf73b2202022-07-23 16:00:44 +0800259 sed -i "s/\.\.\///g" ${ext_modules_order_file}
260 cat ${ext_modules_order_file} >> modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800261 cat ${ext_modules_order_file} | awk -F/ '{print $NF}' >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
wanwei.jiangf73b2202022-07-23 16:00:44 +0800262 : > ${ext_modules_order_file}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800263 else
264 ext_modules_order_file=$(ls extra/${ext_module}/modules.order.*)
wanwei.jiangf73b2202022-07-23 16:00:44 +0800265 cat ${ext_modules_order_file} >> modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800266 cat ${ext_modules_order_file} | awk -F/ '{print $NF}' >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
wanwei.jiangf73b2202022-07-23 16:00:44 +0800267 : > ${ext_modules_order_file}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800268 fi
269 ext_modules="${ext_modules} ${ext_module}"
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800270 done
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800271 EXT_MODULES=${ext_modules}
272 echo EXT_MODULES=${EXT_MODULES}
273 export EXT_MODULES
wanwei.jiangf73b2202022-07-23 16:00:44 +0800274
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800275 head -n ${ramdisk_last_line} modules.order > vendor_boot_modules
wanwei.jiangf73b2202022-07-23 16:00:44 +0800276 file_last_line=`sed -n "$=" modules.order`
277 let line=${file_last_line}-${ramdisk_last_line}
278 tail -n ${line} modules.order > vendor_dlkm_modules
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800279 export MODULES_LIST=${src_dir}/vendor_boot_modules
280 if [[ "${ARCH}" = "arm64" && -z ${FAST_BUILD} ]]; then
Lei Zhang96efea62022-09-02 14:55:06 +0800281 export VENDOR_DLKM_MODULES_LIST=${src_dir}/vendor_dlkm_modules
282 fi
wanwei.jiangf73b2202022-07-23 16:00:44 +0800283
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800284 popd
wanwei.jiang1d154992022-05-30 14:56:26 +0800285
Wanwei Jiang0a74fb12022-12-09 16:27:40 +0800286 if [[ -z ${ANDROID_PROJECT} ]] && [[ -d ${OUT_DIR}/${DTS_EXT_DIR} ]]; then
wanwei.jiang1d154992022-05-30 14:56:26 +0800287 FILES="$FILES `ls ${OUT_DIR}/${DTS_EXT_DIR}`"
288 fi
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800289
290 if [[ -f ${KERNEL_BUILD_VAR_FILE} ]]; then
291 : > ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiangb2ed83c2022-09-09 14:01:20 +0800292 echo "KERNEL_DIR=${KERNEL_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800293 echo "COMMON_OUT_DIR=${COMMON_OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
294 echo "OUT_DIR=${OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
295 echo "DIST_DIR=${DIST_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800296 echo "OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800297 echo "MODULES_STAGING_DIR=${MODULES_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
298 echo "MODULES_PRIVATE_DIR=${MODULES_PRIVATE_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
299 echo "INITRAMFS_STAGING_DIR=${INITRAMFS_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
300 echo "SYSTEM_DLKM_STAGING_DIR=${SYSTEM_DLKM_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
301 echo "VENDOR_DLKM_STAGING_DIR=${VENDOR_DLKM_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
302 echo "MKBOOTIMG_STAGING_DIR=${MKBOOTIMG_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800303 echo "DIST_GKI_DIR=${DIST_GKI_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
304 echo "FULL_KERNEL_VERSION=${FULL_KERNEL_VERSION}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8fe00342023-05-16 22:53:14 +0800305 echo "GKI_MODULES_LOAD_WHITE_LIST=\"${GKI_MODULES_LOAD_WHITE_LIST[*]}\"" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8042e472023-06-06 14:12:32 +0800306 echo "BAZEL=${BAZEL}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800307 fi
Wanwei Jianga07f9a52022-09-30 18:40:40 +0800308
309 for module_path in ${PREBUILT_MODULES_PATH}; do
310 find ${module_path} -type f -name "*.ko" -exec cp {} ${DIST_DIR} \;
311 done
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800312}
313
314export -f extra_cmds
315
Wanwei Jiang2218b892023-03-17 17:31:21 +0800316function bazel_extra_cmds() {
317 modules_install
318
319 if [[ -f ${KERNEL_BUILD_VAR_FILE} ]]; then
320 : > ${KERNEL_BUILD_VAR_FILE}
321 echo "KERNEL_DIR=${KERNEL_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
322 echo "COMMON_OUT_DIR=${COMMON_OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
323 echo "DIST_DIR=${DIST_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
324 echo "OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8fe00342023-05-16 22:53:14 +0800325 echo "GKI_MODULES_LOAD_WHITE_LIST=\"${GKI_MODULES_LOAD_WHITE_LIST[*]}\"" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8042e472023-06-06 14:12:32 +0800326 echo "BAZEL=${BAZEL}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang2218b892023-03-17 17:31:21 +0800327 fi
328
329 if [[ ${GKI_CONFIG} != gki_20 ]]; then
330 [[ -f ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz ]] && rm -f ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz
331 mv ${DIST_DIR}/system_dlkm_staging_archive.tar.gz ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz
332 [[ -d ${DIST_DIR}/system_dlkm_gki10 ]] && rm -rf ${DIST_DIR}/system_dlkm_gki10
333 mkdir ${DIST_DIR}/system_dlkm_gki10
334 pushd ${DIST_DIR}/system_dlkm_gki10
335 tar zxf ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz
336 find -name "*.ko" | while read module; do
Wanwei Jiang475245b2023-05-10 21:06:52 +0800337 module_name=${module##*/}
Wanwei Jiang2218b892023-03-17 17:31:21 +0800338 if [[ ! `grep "/${module_name}" ${DIST_DIR}/system_dlkm.modules.load` ]]; then
339 rm -f ${module}
340 fi
341 done
342 tar czf ${DIST_DIR}/system_dlkm_staging_archive.tar.gz lib
343 popd
344 rm -rf ${DIST_DIR}/system_dlkm_gki10
345 fi
346}
347
348export -f bazel_extra_cmds
349
wanwei.jiang612a8882021-11-23 17:12:23 +0800350function mod_probe() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800351 local ko=$1
352 local loop
qinglin.lia284a932022-09-21 18:07:38 +0800353 for loop in `grep "^$ko:" modules.dep | sed 's/.*://'`; do
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800354 mod_probe $loop
355 echo insmod $loop >> __install.sh
356 done
wanwei.jiang612a8882021-11-23 17:12:23 +0800357}
358
Wanwei Jiang571dde62022-11-17 14:37:41 +0800359function mod_probe_recovery() {
360 local ko=$1
361 local loop
362 for loop in `grep "^$ko:" modules_recovery.dep | sed 's/.*://'`; do
363 mod_probe_recovery $loop
364 echo insmod $loop >> __install_recovery.sh
365 done
366}
367
wanwei.jiangb12abc82021-12-25 22:17:10 +0800368function adjust_sequence_modules_loading() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800369 if [[ -n $1 ]]; then
370 chips=$1
wanwei.jiangb12abc82021-12-25 22:17:10 +0800371 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800372
373 source ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list
374 cp modules.dep modules.dep.temp
375
376 soc_module=()
377 for chip in ${chips[@]}; do
378 chip_module=`ls amlogic-*-soc-${chip}.ko`
379 soc_module=(${soc_module[@]} ${chip_module[@]})
380 done
381 echo soc_module=${soc_module[*]}
382
383 delete_soc_module=()
384 if [[ ${#soc_module[@]} == 0 ]]; then
385 echo "Use all soc module"
386 else
387 for module in `ls amlogic-*-soc-*`; do
388 if [[ ! "${soc_module[@]}" =~ "${module}" ]] ; then
389 echo Delete soc module: ${module}
390 sed -n "/${module}:/p" modules.dep.temp
391 sed -i "/${module}:/d" modules.dep.temp
392 delete_soc_module=(${delete_soc_module[@]} ${module})
393 fi
394 done
395 echo delete_soc_module=${delete_soc_module[*]}
396 fi
397
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800398 if [[ -n ${CLK_SOC_MODULE} ]]; then
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800399 delete_clk_soc_modules=()
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800400 for module in `ls amlogic-clk-soc-*`; do
401 if [[ "${CLK_SOC_MODULE}" != "${module}" ]] ; then
402 echo Delete clk soc module: ${module}
403 sed -n "/${module}:/p" modules.dep.temp
404 sed -i "/${module}:/d" modules.dep.temp
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800405 delete_clk_soc_modules=(${delete_clk_soc_modules[@]} ${module})
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800406 fi
407 done
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800408 echo delete_clk_soc_modules=${delete_clk_soc_modules[*]}
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800409 fi
410
411 if [[ -n ${PINCTRL_SOC_MODULE} ]]; then
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800412 delete_pinctrl_soc_modules=()
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800413 for module in `ls amlogic-pinctrl-soc-*`; do
414 if [[ "${PINCTRL_SOC_MODULE}" != "${module}" ]] ; then
415 echo Delete pinctrl soc module: ${module}
416 sed -n "/${module}:/p" modules.dep.temp
417 sed -i "/${module}:/d" modules.dep.temp
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800418 delete_pinctrl_soc_modules=(${delete_pinctrl_soc_modules[@]} ${module})
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800419 fi
420 done
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800421 echo delete_pinctrl_soc_modules=${delete_pinctrl_soc_modules[*]}
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800422 fi
423
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800424 in_line_i=a
425 delete_type_modules=()
426 echo "TYPE_MODULE_SELECT_MODULE=${TYPE_MODULE_SELECT_MODULE}"
427 mkdir temp_dir
428 cd temp_dir
429 in_temp_dir=y
430 for element in ${TYPE_MODULE_SELECT_MODULE}; do
431 if [[ ${in_temp_dir} = y ]]; then
432 cd ../
433 rm -r temp_dir
434 in_temp_dir=
435 fi
436 if [[ ${in_line_i} = a ]]; then
437 in_line_i=b
438 type_module=${element}
439 select_modules_i=0
440 select_modules_count=
441 select_modules=
442 elif [[ ${in_line_i} = b ]]; then
443 in_line_i=c
444 select_modules_count=${element}
445 else
446 let select_modules_i+=1
447 select_modules="${select_modules} ${element}"
448 if [[ ${select_modules_i} -eq ${select_modules_count} ]]; then
449 in_line_i=a
450 echo type_module=$type_module select_modules=$select_modules
451 for module in `ls ${type_module}`; do
452 dont_delete_module=0
453 for select_module in ${select_modules}; do
454 if [[ "${select_module}" == "${module}" ]] ; then
455 dont_delete_module=1
456 break;
457 fi
458 done
459 if [[ ${dont_delete_module} != 1 ]]; then
460 echo Delete module: ${module}
461 sed -n "/${module}:/p" modules.dep.temp
462 sed -i "/${module}:/d" modules.dep.temp
463 delete_type_modules=(${delete_type_modules[@]} ${module})
464 fi
465 done
466 echo delete_type_modules=${delete_type_modules[*]}
467 fi
468 fi
469 done
470 if [[ -n ${in_temp_dir} ]]; then
471 cd ../
472 rm -r temp_dir
473 fi
474
475 black_modules=()
Dezhen Wang45dfcb02023-02-13 17:41:44 +0800476 mkdir service_module
477 echo MODULES_SERVICE_LOAD_LIST=${MODULES_SERVICE_LOAD_LIST[@]}
478 BLACK_AND_SERVICE_LIST=(${MODULES_LOAD_BLACK_LIST[@]} ${MODULES_SERVICE_LOAD_LIST[@]})
479 echo ${BLACK_AND_SERVICE_LIST[@]}
480 for module in ${BLACK_AND_SERVICE_LIST[@]}; do
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800481 modules=`ls ${module}*`
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800482 black_modules=(${black_modules[@]} ${modules[@]})
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800483 done
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800484 if [[ ${#black_modules[@]} == 0 ]]; then
485 echo "black_modules is null, don't delete modules, MODULES_LOAD_BLACK_LIST=${MODULES_LOAD_BLACK_LIST[*]}"
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800486 else
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800487 echo black_modules=${black_modules[*]}
488 for module in ${black_modules[@]}; do
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800489 echo Delete module: ${module}
490 sed -n "/${module}:/p" modules.dep.temp
491 sed -i "/${module}:/d" modules.dep.temp
492 done
493 fi
494
Wanwei Jiang475245b2023-05-10 21:06:52 +0800495 GKI_MODULES_LOAD_BLACK_LIST=()
496 if [[ "${FULL_KERNEL_VERSION}" != "common13-5.15" ]]; then
497 gki_modules_temp_file=`mktemp /tmp/config.XXXXXXXXXXXX`
498 cp ${ROOT_DIR}/${KERNEL_DIR}/android/gki_system_dlkm_modules ${gki_modules_temp_file}
499
500 for module in ${GKI_MODULES_LOAD_WHITE_LIST[@]}; do
501 sed -i "/\/${module}/d" ${gki_modules_temp_file}
502 done
503
504 for module in `cat ${gki_modules_temp_file}`; do
505 module=${module##*/}
506 GKI_MODULES_LOAD_BLACK_LIST[${#GKI_MODULES_LOAD_BLACK_LIST[*]}]=${module}
507 done
508 rm -f ${gki_modules_temp_file}
509
510 for module in ${GKI_MODULES_LOAD_BLACK_LIST[@]}; do
511 echo Delete module: ${module}
512 sed -n "/${module}:/p" modules.dep.temp
513 sed -i "/${module}:/d" modules.dep.temp
514 done
515 fi
516
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800517 cat modules.dep.temp | cut -d ':' -f 2 > modules.dep.temp1
Wanwei Jiang475245b2023-05-10 21:06:52 +0800518 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 +0800519 for module in ${delete_modules[@]}; do
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800520 if [[ ! `ls $module` ]]; then
521 continue
522 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800523 match=`sed -n "/${module}/=" modules.dep.temp1`
524 for match in ${match[@]}; do
525 match_count=(${match_count[@]} $match)
526 done
527 if [[ ${#match_count[@]} != 0 ]]; then
528 echo "Error ${#match_count[@]} modules depend on ${module}, please modify:"
wanwei.jiang50759e12022-03-24 12:36:17 +0800529 echo ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list:MODULES_LOAD_BLACK_LIST
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800530 exit
531 fi
Dezhen Wang45dfcb02023-02-13 17:41:44 +0800532 if [[ -n ${ANDROID_PROJECT} ]]; then
533 for service_module_temp in ${MODULES_SERVICE_LOAD_LIST[@]}; do
534 if [[ ${module} = ${service_module_temp} ]]; then
535 mv ${module} service_module
536 fi
537 done
538 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800539 rm -f ${module}
540 done
541 rm -f modules.dep.temp1
wanwei.jiangb12abc82021-12-25 22:17:10 +0800542 touch modules.dep.temp1
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800543
544 for module in ${RAMDISK_MODULES_LOAD_LIST[@]}; do
545 echo RAMDISK_MODULES_LOAD_LIST: $module
wanwei.jiangb12abc82021-12-25 22:17:10 +0800546 sed -n "/${module}:/p" modules.dep.temp
547 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1
548 sed -i "/${module}:/d" modules.dep.temp
549 sed -n "/${module}.*\.ko:/p" modules.dep.temp
550 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1
551 sed -i "/${module}.*\.ko:/d" modules.dep.temp
552 done
553
Wanwei Jiang571dde62022-11-17 14:37:41 +0800554 if [[ -n ${ANDROID_PROJECT} ]]; then
555 cp modules.dep.temp modules_recovery.dep.temp
556 cp modules.dep.temp1 modules_recovery.dep.temp1
557 fi
558
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800559 for module in ${VENDOR_MODULES_LOAD_FIRST_LIST[@]}; do
560 echo VENDOR_MODULES_LOAD_FIRST_LIST: $module
561 sed -n "/${module}:/p" modules.dep.temp
562 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1
563 sed -i "/${module}:/d" modules.dep.temp
564 sed -n "/${module}.*\.ko:/p" modules.dep.temp
565 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1
566 sed -i "/${module}.*\.ko:/d" modules.dep.temp
wanwei.jiangb12abc82021-12-25 22:17:10 +0800567 done
568
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800569 if [ -f modules.dep.temp2 ]; then
570 rm modules.dep.temp2
571 fi
572 touch modules.dep.temp2
573 for module in ${VENDOR_MODULES_LOAD_LAST_LIST[@]}; do
574 echo VENDOR_MODULES_LOAD_FIRST_LIST: $module
575 sed -n "/${module}:/p" modules.dep.temp
576 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp2
577 sed -i "/${module}:/d" modules.dep.temp
578 sed -n "/${module}.*\.ko:/p" modules.dep.temp
579 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp2
580 sed -i "/${module}.*\.ko:/d" modules.dep.temp
581 done
582
583 cat modules.dep.temp >> modules.dep.temp1
584 cat modules.dep.temp2 >> modules.dep.temp1
585
wanwei.jiangb12abc82021-12-25 22:17:10 +0800586 cp modules.dep.temp1 modules.dep
587 rm modules.dep.temp
588 rm modules.dep.temp1
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800589 rm modules.dep.temp2
Wanwei Jiang571dde62022-11-17 14:37:41 +0800590
591 if [[ -n ${ANDROID_PROJECT} ]]; then
592 for module in ${RECOVERY_MODULES_LOAD_LIST[@]}; do
593 echo RECOVERY_MODULES_LOAD_LIST: $module
594 sed -n "/${module}:/p" modules_recovery.dep.temp
595 sed -n "/${module}:/p" modules_recovery.dep.temp >> modules_recovery.dep.temp1
596 sed -i "/${module}:/d" modules_recovery.dep.temp
597 sed -n "/${module}.*\.ko:/p" modules_recovery.dep.temp
598 sed -n "/${module}.*\.ko:/p" modules_recovery.dep.temp >> modules_recovery.dep.temp1
599 sed -i "/${module}.*\.ko:/d" modules_recovery.dep.temp
600 done
601
602 cat modules_recovery.dep.temp >> modules_recovery.dep.temp1
603
604 cp modules_recovery.dep.temp1 modules_recovery.dep
605 rm modules_recovery.dep.temp
606 rm modules_recovery.dep.temp1
607 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800608}
609
Wanwei Jiang571dde62022-11-17 14:37:41 +0800610create_ramdisk_vendor_recovery() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800611 install_temp=$1
Wanwei Jiang571dde62022-11-17 14:37:41 +0800612 if [[ -n ${ANDROID_PROJECT} ]]; then
613 recovery_install_temp=$2
614 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800615 source ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list
Wanwei Jiang9173e462022-09-29 00:58:33 +0800616 ramdisk_module_i=${#RAMDISK_MODULES_LOAD_LIST[@]}
617 while [ ${ramdisk_module_i} -gt 0 ]; do
618 let ramdisk_module_i--
619 echo ramdisk_module_i=$ramdisk_module_i ${RAMDISK_MODULES_LOAD_LIST[${ramdisk_module_i}]}
620 if [[ `grep "${RAMDISK_MODULES_LOAD_LIST[${ramdisk_module_i}]}" ${install_temp}` ]]; then
621 last_ramdisk_module=${RAMDISK_MODULES_LOAD_LIST[${ramdisk_module_i}]}
622 break;
623 fi
624 done
625 # last_ramdisk_module=${RAMDISK_MODULES_LOAD_LIST[${#RAMDISK_MODULES_LOAD_LIST[@]}-1]}
qinglin.libce54712023-05-08 13:56:31 +0800626 if [[ -n ${last_ramdisk_module} ]]; then
627 last_ramdisk_module_line=`sed -n "/${last_ramdisk_module}/=" ${install_temp}`
628 for line in ${last_ramdisk_module_line}; do
629 ramdisk_last_line=${line}
630 done
631 else
632 ramdisk_last_line=1
633 fi
wanwei.jiangf73b2202022-07-23 16:00:44 +0800634 export ramdisk_last_line
Wanwei Jiang571dde62022-11-17 14:37:41 +0800635
636 if [[ -n ${ANDROID_PROJECT} ]]; then
637 recovery_module_i=${#RECOVERY_MODULES_LOAD_LIST[@]}
qinglin.lidba324f2023-03-02 19:56:21 +0800638 #when RECOVERY_MODULES_LOAD_LIST is NULL
639 if [ ${#RECOVERY_MODULES_LOAD_LIST[@]} -eq 0 ]; then
640 last_recovery_module=${last_ramdisk_module}
641 fi
Wanwei Jiang571dde62022-11-17 14:37:41 +0800642 while [ ${recovery_module_i} -gt 0 ]; do
643 let recovery_module_i--
644 echo recovery_module_i=$recovery_module_i ${RECOVERY_MODULES_LOAD_LIST[${recovery_module_i}]}
645 if [[ `grep "${RECOVERY_MODULES_LOAD_LIST[${recovery_module_i}]}" ${recovery_install_temp}` ]]; then
646 last_recovery_module=${RECOVERY_MODULES_LOAD_LIST[${recovery_module_i}]}
647 break;
648 fi
649 done
650 # last_recovery_module=${RECOVERY_MODULES_LOAD_LIST[${#RECOVERY_MODULES_LOAD_LIST[@]}-1]}
qinglin.libce54712023-05-08 13:56:31 +0800651 if [[ -n ${last_recovery_module} ]]; then
652 last_recovery_module_line=`sed -n "/${last_recovery_module}/=" ${recovery_install_temp}`
653 for line in ${last_recovery_module_line}; do
654 recovery_last_line=${line}
655 done
656 else
657 recovery_last_line=1
658 fi
Wanwei Jiang571dde62022-11-17 14:37:41 +0800659 sed -n "${ramdisk_last_line},${recovery_last_line}p" ${recovery_install_temp} > recovery_install.sh
qinglin.libce54712023-05-08 13:56:31 +0800660 if [[ -n ${last_ramdisk_module} ]]; then
661 sed -i "1d" recovery_install.sh
662 fi
Wanwei Jiang571dde62022-11-17 14:37:41 +0800663 mkdir recovery
664 cat recovery_install.sh | cut -d ' ' -f 2 > recovery/recovery_modules.order
qinglin.lidba324f2023-03-02 19:56:21 +0800665 if [ ${#RECOVERY_MODULES_LOAD_LIST[@]} -ne 0 ]; then
666 cat recovery_install.sh | cut -d ' ' -f 2 | xargs cp -t recovery/
667 fi
Wanwei Jiang571dde62022-11-17 14:37:41 +0800668 sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' recovery_install.sh
669 echo "echo Install recovery modules success!" >> recovery_install.sh
670 chmod 755 recovery_install.sh
671 mv recovery_install.sh recovery/
672 fi
673
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800674 head -n ${ramdisk_last_line} ${install_temp} > ramdisk_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800675 mkdir ramdisk
wanwei.jiangf73b2202022-07-23 16:00:44 +0800676 cat ramdisk_install.sh | cut -d ' ' -f 2 > ramdisk/ramdisk_modules.order
wanwei.jiang50759e12022-03-24 12:36:17 +0800677 cat ramdisk_install.sh | cut -d ' ' -f 2 | xargs mv -t ramdisk/
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800678
qinglin.lie5b951e2022-06-07 16:13:44 +0800679 sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' ramdisk_install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800680 echo "echo Install ramdisk modules success!" >> ramdisk_install.sh
681 chmod 755 ramdisk_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800682 mv ramdisk_install.sh ramdisk/
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800683
684 file_last_line=`sed -n "$=" ${install_temp}`
685 let line=${file_last_line}-${ramdisk_last_line}
686 tail -n ${line} ${install_temp} > vendor_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800687 mkdir vendor
wanwei.jiangf73b2202022-07-23 16:00:44 +0800688 cat vendor_install.sh | cut -d ' ' -f 2 > vendor/vendor_modules.order
wanwei.jiang50759e12022-03-24 12:36:17 +0800689 cat vendor_install.sh | cut -d ' ' -f 2 | xargs mv -t vendor/
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800690
qinglin.lie5b951e2022-06-07 16:13:44 +0800691 sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' vendor_install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800692 echo "echo Install vendor modules success!" >> vendor_install.sh
693 chmod 755 vendor_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800694 mv vendor_install.sh vendor/
wanwei.jiangb12abc82021-12-25 22:17:10 +0800695}
696
wanwei.jiang612a8882021-11-23 17:12:23 +0800697function modules_install() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800698 arg1=$1
699
Wanwei Jiang2218b892023-03-17 17:31:21 +0800700 export OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR:-$(readlink -m ${COMMON_OUT_DIR}/amlogic)}
701 echo $OUT_AMLOGIC_DIR
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800702 rm -rf ${OUT_AMLOGIC_DIR}
703 mkdir -p ${OUT_AMLOGIC_DIR}
704 mkdir -p ${OUT_AMLOGIC_DIR}/modules
705 mkdir -p ${OUT_AMLOGIC_DIR}/ext_modules
Wanwei Jiangae4d7c12023-02-17 19:22:04 +0800706 mkdir -p ${OUT_AMLOGIC_DIR}/symbols
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800707
Wanwei Jiang2218b892023-03-17 17:31:21 +0800708 if [[ ${BAZEL} == "1" ]]; then
709 local output="out/bazel/output_user_root"
710 for dir in `ls ${output}`; do
711 if [[ ${dir} =~ ^[0-9A-Fa-f]*$ ]]; then
712 digit_output=${output}/${dir}
713 break
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800714 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800715 done
716
Wanwei Jiang0df84602023-05-05 14:40:42 +0800717 while read module
718 do
Wanwei Jiang475245b2023-05-10 21:06:52 +0800719 module_name=${module##*/}
Wanwei Jiang0df84602023-05-05 14:40:42 +0800720 if [[ `echo ${module} | grep "^kernel\/"` ]]; then
721 if [[ -f ${DIST_DIR}/${module_name} ]]; then
722 cp ${DIST_DIR}/${module_name} ${OUT_AMLOGIC_DIR}/modules
723 else
724 module=`find ${digit_output}/execroot/ -name ${module_name} | grep "amlogic"`
725 cp ${module} ${OUT_AMLOGIC_DIR}/modules
726 fi
727 elif [[ `echo ${module} | grep "^extra\/"` ]]; then
728 cp ${DIST_DIR}/${module_name} ${OUT_AMLOGIC_DIR}/ext_modules
Wanwei Jiang2218b892023-03-17 17:31:21 +0800729 else
Wanwei Jiang0df84602023-05-05 14:40:42 +0800730 echo "warning unrecognized module: ${module}"
Wanwei Jiang2218b892023-03-17 17:31:21 +0800731 fi
Wanwei Jiang0df84602023-05-05 14:40:42 +0800732 done < ${DIST_DIR}/modules.load
Wanwei Jiang2218b892023-03-17 17:31:21 +0800733
734 dep_file=`find ${digit_output}/execroot/ -name *.dep | grep "amlogic"`
735 cp ${dep_file} ${OUT_AMLOGIC_DIR}/modules/full_modules.dep
Wanwei Jiang0df84602023-05-05 14:40:42 +0800736 grep -E "^kernel\/" ${dep_file} > ${OUT_AMLOGIC_DIR}/modules/modules.dep
Wanwei Jiang2218b892023-03-17 17:31:21 +0800737 touch ${module} ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
738 for order_file in `find ${digit_output}/execroot/ -name "modules.order.*" | grep "amlogic"`; do
739 echo "# ${order_file}" >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
740 cat ${order_file} >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
741 echo >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
742 done
743 else
744 local MODULES_ROOT_DIR=$(echo ${MODULES_STAGING_DIR}/lib/modules/*)
745 pushd ${MODULES_ROOT_DIR}
746 local common_drivers=${COMMON_DRIVERS_DIR##*/}
747 local modules_list=$(find -type f -name "*.ko")
748 for module in ${modules_list}; do
749 if [[ -n ${ANDROID_PROJECT} ]]; then # copy internal build modules
750 if [[ `echo ${module} | grep -E "\.\/kernel\/|\/${common_drivers}\/"` ]]; then
751 cp ${module} ${OUT_AMLOGIC_DIR}/modules/
752 else
753 cp ${module} ${OUT_AMLOGIC_DIR}/ext_modules/
754 fi
755 else # copy all modules, include external modules
756 cp ${module} ${OUT_AMLOGIC_DIR}/modules/
757 fi
758 done
759
760 if [[ -n ${ANDROID_PROJECT} ]]; then # internal build modules
761 grep -E "^kernel\/|^${common_drivers}\/" modules.dep > ${OUT_AMLOGIC_DIR}/modules/modules.dep
762 else # all modules, include external modules
763 cp modules.dep ${OUT_AMLOGIC_DIR}/modules
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800764 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800765 popd
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800766 fi
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800767 pushd ${OUT_AMLOGIC_DIR}/modules
wanwei.jiang612a8882021-11-23 17:12:23 +0800768 sed -i 's#[^ ]*/##g' modules.dep
769
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800770 adjust_sequence_modules_loading "${arg1[*]}"
wanwei.jiangb12abc82021-12-25 22:17:10 +0800771
wanwei.jiang5c8d2b62021-11-26 20:36:33 +0800772 touch __install.sh
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800773 touch modules.order
wanwei.jiang612a8882021-11-23 17:12:23 +0800774 for loop in `cat modules.dep | sed 's/:.*//'`; do
775 mod_probe $loop
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800776 echo $loop >> modules.order
wanwei.jiang612a8882021-11-23 17:12:23 +0800777 echo insmod $loop >> __install.sh
778 done
779
780 cat __install.sh | awk ' {
781 if (!cnt[$2]) {
782 print $0;
783 cnt[$2]++;
784 }
785 }' > __install.sh.tmp
786
Wanwei Jiangbf119d22022-10-27 09:49:49 +0800787 cp modules.order modules.order.back
788 cut -d ' ' -f 2 __install.sh.tmp > modules.order
Wanwei Jiang571dde62022-11-17 14:37:41 +0800789
790 if [[ -n ${ANDROID_PROJECT} ]]; then
791 touch __install_recovery.sh
792 touch modules_recovery.order
793 for loop in `cat modules_recovery.dep | sed 's/:.*//'`; do
794 mod_probe_recovery $loop
795 echo $loop >> modules_recovery.order
796 echo insmod $loop >> __install_recovery.sh
797 done
798
799 cat __install_recovery.sh | awk ' {
800 if (!cnt[$2]) {
801 print $0;
802 cnt[$2]++;
803 }
804 }' > __install_recovery.sh.tmp
805
806 cut -d ' ' -f 2 __install_recovery.sh.tmp > modules_recovery.order
807 fi
808 create_ramdisk_vendor_recovery __install.sh.tmp __install_recovery.sh.tmp
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800809
Dezhen Wang124ad7d2023-02-06 15:35:14 +0800810 if [[ -n ${MANUAL_INSMOD_MODULE} ]]; then
811 install_file=manual_install.sh
812 else
813 install_file=install.sh
814 fi
815 echo "#!/bin/sh" > ${install_file}
816 echo "cd ramdisk" >> ${install_file}
817 echo "./ramdisk_install.sh" >> ${install_file}
818 echo "cd ../vendor" >> ${install_file}
819 echo "./vendor_install.sh" >> ${install_file}
820 echo "cd ../" >> ${install_file}
821 chmod 755 ${install_file}
wanwei.jiang612a8882021-11-23 17:12:23 +0800822
823 echo "/modules/: all `wc -l modules.dep | awk '{print $1}'` modules."
Wanwei Jianga5977bd2022-08-24 22:43:40 +0800824 rm __install.sh __install.sh.tmp
wanwei.jiang612a8882021-11-23 17:12:23 +0800825
Wanwei Jiang571dde62022-11-17 14:37:41 +0800826 if [[ -n ${ANDROID_PROJECT} ]]; then
827 rm __install_recovery.sh __install_recovery.sh.tmp
828 fi
829
wanwei.jiang236e9a32021-12-07 16:34:14 +0800830 popd
Wanwei Jiangae4d7c12023-02-17 19:22:04 +0800831
Wanwei Jiang2218b892023-03-17 17:31:21 +0800832 if [[ ${BAZEL} == "1" ]]; then
833 cp ${DIST_DIR}/vmlinux ${OUT_AMLOGIC_DIR}/symbols
834
835 find ${digit_output}/execroot -name *.ko | grep "unstripped" | while read module; do
836 cp ${module} ${OUT_AMLOGIC_DIR}/symbols
837 chmod +w ${OUT_AMLOGIC_DIR}/symbols/$(basename ${module})
838 done
839 chmod -w ${OUT_AMLOGIC_DIR}/symbols/*.ko
840 else
841 cp ${OUT_DIR}/vmlinux ${OUT_AMLOGIC_DIR}/symbols
842 find ${OUT_DIR} -type f -name "*.ko" -exec cp {} ${OUT_AMLOGIC_DIR}/symbols \;
843 for ext_module in ${EXT_MODULES}; do
844 find ${COMMON_OUT_DIR}/${ext_module} -type f -name "*.ko" -exec cp {} ${OUT_AMLOGIC_DIR}/symbols \;
845 done
846 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800847}
wanwei.jiang236e9a32021-12-07 16:34:14 +0800848export -f modules_install
wanwei.jiang612a8882021-11-23 17:12:23 +0800849
Wanwei Jiang2218b892023-03-17 17:31:21 +0800850function rename_external_module_name() {
851 local external_coppied
852 local vendor_coppied
Wanwei Jiang92c89432023-05-15 23:57:16 +0800853 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 +0800854 target_module_name=`echo ${module_line%%:*} | sed '/^#/d;/^$/d'`
855 modules_name=`echo ${module_line##:*} | sed '/^#/d;/^$/d'`
856 [[ -f ${OUT_AMLOGIC_DIR}/ext_modules/${target_module_name} ]] && external_coppied=1
857 [[ -f ${OUT_AMLOGIC_DIR}/modules/vendor/${target_module_name} ]] && vendor_coppied=1
858 echo target_module_name=$target_module_name modules_name=$modules_name external_coppied=$external_coppied vendor_coppied=$vendor_coppied
859 for module in ${modules_name}; do
860 echo module=$module
861 if [[ -f ${OUT_AMLOGIC_DIR}/ext_modules/${module} ]]; then
862 if [[ -z ${external_coppied} ]]; then
863 cp ${OUT_AMLOGIC_DIR}/ext_modules/${module} ${OUT_AMLOGIC_DIR}/ext_modules/${target_module_name}
864 external_coppied=1
865 fi
866 rm -f ${OUT_AMLOGIC_DIR}/ext_modules/${module}
867 fi
868 if [[ -f ${OUT_AMLOGIC_DIR}/modules/vendor/${module} ]]; then
869 if [[ -z ${vendor_coppied} ]]; then
870 cp ${OUT_AMLOGIC_DIR}/modules/vendor/${module} ${OUT_AMLOGIC_DIR}/modules/vendor/${target_module_name}
871 vendor_coppied=1
872 fi
873 rm -f ${OUT_AMLOGIC_DIR}/modules/vendor/${module}
874 fi
875 done
876 external_coppied=
877 vendor_coppied=
878 done
879}
880export -f rename_external_module_name
881
Dezhen Wang5ad119c2023-05-04 15:07:49 +0800882# function rebuild_rootfs can rebuild the rootfs if rootfs_base.cpio.gz.uboot exist
wanwei.jiang612a8882021-11-23 17:12:23 +0800883function rebuild_rootfs() {
Wanwei Jiang2218b892023-03-17 17:31:21 +0800884 echo
885 echo "========================================================"
886 if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then
887 echo "Rebuild rootfs in order to install modules!"
888 else
889 echo "There's no file ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot, so don't rebuild rootfs!"
890 return
891 fi
892
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800893 pushd ${OUT_AMLOGIC_DIR}
wanwei.jiang612a8882021-11-23 17:12:23 +0800894
Lei Zhang475c17b2022-03-03 11:08:50 +0800895 local ARCH=arm64
896 if [[ -n $1 ]]; then
897 ARCH=$1
898 fi
899
wanwei.jiang612a8882021-11-23 17:12:23 +0800900 rm rootfs -rf
901 mkdir rootfs
Wanwei Jiang2218b892023-03-17 17:31:21 +0800902 cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot rootfs
wanwei.jiang612a8882021-11-23 17:12:23 +0800903 cd rootfs
904 dd if=rootfs_base.cpio.gz.uboot of=rootfs_base.cpio.gz bs=64 skip=1
905 gunzip rootfs_base.cpio.gz
906 mkdir rootfs
907 cd rootfs
908 cpio -i -F ../rootfs_base.cpio
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800909 if [ -d ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer ]; then
910 cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer . -rf
qinglin.li3c25dbb2022-01-14 11:23:10 +0800911 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800912 cp -rf ../../modules .
wanwei.jiang8abddcc2022-03-16 21:18:48 +0800913
wanwei.jiang612a8882021-11-23 17:12:23 +0800914 find . | cpio -o -H newc | gzip > ../rootfs_new.cpio.gz
915 cd ../
Lei Zhang475c17b2022-03-03 11:08:50 +0800916 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 +0800917 mv rootfs_new.cpio.gz.uboot ../
918 cd ../
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800919 cp rootfs_new.cpio.gz.uboot ${DIST_DIR}
wanwei.jiang612a8882021-11-23 17:12:23 +0800920
921 popd
922}
923export -f rebuild_rootfs
wanwei.jiang403c9942021-11-30 18:29:02 +0800924
Dezhen Wang5ad119c2023-05-04 15:07:49 +0800925# function check_undefined_symbol can check the dependence among the modules
926# parameter:
927# --modules_depend
wanwei.jiang403c9942021-11-30 18:29:02 +0800928function check_undefined_symbol() {
Wanwei Jiang2218b892023-03-17 17:31:21 +0800929 if [[ ${MODULES_DEPEND} != "1" ]]; then
930 return
931 fi
932
933 echo "========================================================"
934 echo "print modules depend"
935
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800936 pushd ${OUT_AMLOGIC_DIR}/modules
wanwei.jiang403c9942021-11-30 18:29:02 +0800937 echo
938 echo "========================================================"
939 echo "Functions or variables not defined in this module refer to which module."
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800940 if [[ -n ${LLVM} ]]; then
941 compile_tool=${ROOT_DIR}/${CLANG_PREBUILT_BIN}/llvm-
942 elif [[ -n ${CROSS_COMPILE} ]]; then
943 compile_tool=${CROSS_COMPILE}
944 else
945 echo "can't find compile tool"
946 fi
Wanwei Jiang0a74fb12022-12-09 16:27:40 +0800947 ${compile_tool}nm ${DIST_DIR}/vmlinux | grep -E " T | D | B | R | W "> vmlinux_T.txt
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800948 # cat __install.sh | grep "insmod" | cut -d ' ' -f 2 > module_list.txt
949 cat ramdisk/ramdisk_install.sh | grep "insmod" | cut -d ' ' -f 2 > module_list.txt
950 cat vendor/vendor_install.sh | grep "insmod" | cut -d ' ' -f 2 >> module_list.txt
951 cp ramdisk/*.ko .
952 cp vendor/*.ko .
wanwei.jiang403c9942021-11-30 18:29:02 +0800953 while read LINE
954 do
955 echo ${LINE}
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800956 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 +0800957 do
958 #echo ${U}
959 U_v=`grep -w ${U} vmlinux_T.txt`
960 in_vmlinux=0
961 if [ -n "${U_v}" ];
962 then
wanwei.jiangd7b29ef2021-12-01 19:59:41 +0800963 #printf "\t%-50s <== vmlinux\n" ${U}
wanwei.jiang403c9942021-11-30 18:29:02 +0800964 in_vmlinux=1
965 continue
966 fi
967 in_module=0
968 MODULE=
969 while read LINE1
970 do
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800971 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 +0800972 if [ -n "${U_m}" ];
973 then
974 in_module=1
975 MODULE=${LINE1}
976 fi
977 done < module_list.txt
978 if [ ${in_module} -eq "1" ];
979 then
980 printf "\t%-50s <== %s\n" ${U} ${MODULE}
981 continue
982 else
983 printf "\t%-50s <== none\n" ${U}
984 fi
985 done
986 echo
987 echo
988 done < module_list.txt
989 rm vmlinux_T.txt
990 rm module_list.txt
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800991 rm *.ko
wanwei.jiang403c9942021-11-30 18:29:02 +0800992 popd
993}
994export -f check_undefined_symbol
Dezhen Wangd40fa552023-04-11 16:13:27 +0800995
996function reorganized_abi_symbol_list_file() { # delete the extra information but symbol
997 cat $@ | sed '/^$/d' >> ${symbol_tmp} # remove blank lines
998 sed -i '/^\[/d' ${symbol_tmp} # remove the title
999 sed -i '/^\#/d' ${symbol_tmp} # remove the comment
1000}
1001export -f reorganized_abi_symbol_list_file
1002
1003function abi_symbol_list_detect () { # detect symbol information that should be submitted or fix
1004 symbol_file1=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic
1005 symbol_file2=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.10
1006 symbol_file3=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.debug
1007 symbol_file4=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.illegal
1008
1009 file_list=("${symbol_file1} ${symbol_file2} ${symbol_file3} ${symbol_file4}")
1010 for file in ${file_list}
1011 do
1012 local symbol_tmp=`mktemp tmp.XXXXXXXXXXXX`
1013 reorganized_abi_symbol_list_file "${file}"
1014
1015 if [[ -s ${symbol_tmp} ]]; then
1016 if [[ ${file} =~ abi_gki_aarch64_amlogic.illegal ]]; then
1017 echo "WARNING: The symbols in ${file} are illegal, please deal with them as soon as possible!!!"
1018 else
1019 echo "WARNING: The symbols in ${file} should be submit to google!!!"
1020 fi
1021 cat ${symbol_tmp}
1022 echo -e "\n------------------------------------------------------------"
1023 fi
1024 rm ${symbol_tmp}
1025 done
1026}
1027export -f abi_symbol_list_detect
1028
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001029# adjust_config_action concerns three types of cmd:
1030# parameters:
1031# --menuconfig: make menuconfig manually based on different gki standard
1032# --basicconfig: only config kernel with google original gki_defconfig as base
1033# --check_defconfig: contrast the defconfig generated in out directory with gki_defconfig and show the difference
1034function adjust_config_action () {
1035 if [[ -n ${MENUCONFIG} ]] || [[ -n ${BASICCONFIG} ]] || [[ ${CHECK_DEFCONFIG} -eq "1" ]]; then
1036 # ${ROOT_DIR}/${BUILD_DIR}/config.sh menuconfig
1037 HERMETIC_TOOLCHAIN=0
1038 source "${ROOT_DIR}/${BUILD_DIR}/build_utils.sh"
1039 source "${ROOT_DIR}/${BUILD_DIR}/_setup_env.sh"
1040
1041 orig_config=$(mktemp)
1042 orig_defconfig=$(mktemp)
1043 out_config="${OUT_DIR}/.config"
1044 out_defconfig="${OUT_DIR}/defconfig"
1045 changed_config=$(mktemp)
1046 changed_defconfig=$(mktemp)
1047
1048 if [[ -n ${BASICCONFIG} ]]; then # config kernel with gki_defconfig or make menuconfig based on it
1049 set -x
1050 defconfig_name=`basename ${GKI_BASE_CONFIG}`
1051 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${defconfig_name})
1052 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1053 cp ${out_config} ${orig_config}
1054 cp ${out_defconfig} ${orig_defconfig}
1055 if [ "${BASICCONFIG}" = "m" ]; then # make menuconfig based on gki_defconfig
1056 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" menuconfig)
1057 fi
1058 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1059 ${KERNEL_DIR}/scripts/diffconfig ${orig_config} ${out_config} > ${changed_config}
1060 ${KERNEL_DIR}/scripts/diffconfig ${orig_defconfig} ${out_defconfig} > ${changed_defconfig}
1061 if [ "${ARCH}" = "arm" ]; then
1062 cp ${out_defconfig} ${GKI_BASE_CONFIG}
1063 fi
1064 set +x # show the difference between the gki_defconfig and the config after make menuconfig
1065 echo
1066 echo "========================================================"
1067 echo "==================== .config diff ===================="
1068 cat ${changed_config}
1069 echo "==================== defconfig diff ===================="
1070 cat ${changed_defconfig}
1071 echo "========================================================"
1072 echo
1073 elif [[ ${CHECK_DEFCONFIG} -eq "1" ]]; then # compare the defconfig generated in out directory with gki_defconfig
1074 set -x
1075 pre_defconfig_cmds
1076 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
1077 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig) # export the defconfig to out directory
1078 diff -u ${ROOT_DIR}/${GKI_BASE_CONFIG} ${OUT_DIR}/defconfig
1079 post_defconfig_cmds
1080 set +x
1081 else # make menuconfig based on config with different gki standard
1082 set -x
1083 pre_defconfig_cmds
1084 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
1085 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1086 cp ${out_config} ${orig_config}
1087 cp ${out_defconfig} ${orig_defconfig}
1088 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" menuconfig)
1089 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1090 ${KERNEL_DIR}/scripts/diffconfig ${orig_config} ${out_config} > ${changed_config}
1091 ${KERNEL_DIR}/scripts/diffconfig ${orig_defconfig} ${out_defconfig} > ${changed_defconfig}
1092 post_defconfig_cmds
1093 set +x
1094 echo
1095 echo "========================================================"
1096 echo "if the config follows GKI2.0, please add it to the file amlogic_gki.fragment manually"
1097 echo "if the config follows GKI1.0 optimize, please add it to the file amlogic_gki.10 manually"
1098 echo "if the config follows GKI1.0 debug, please add it to the file amlogic_gki.debug manually"
1099 echo "==================== .config diff ===================="
1100 cat ${changed_config}
1101 echo "==================== defconfig diff ===================="
1102 cat ${changed_defconfig}
1103 echo "========================================================"
1104 echo
1105 fi
1106 rm -f ${orig_config} ${changed_config} ${orig_defconfig} ${changed_defconfig}
1107 exit
1108 fi
1109}
1110export -f adjust_config_action
1111
1112# function build_part_of_kernel can only build part of kernel such as image modules or dtbs
1113# parameter:
1114# --image: only build image
1115# --modules: only build kernel modules
1116# --dtbs: only build dtbs
1117function build_part_of_kernel () {
1118 if [[ -n ${IMAGE} ]] || [[ -n ${MODULES} ]] || [[ -n ${DTB_BUILD} ]]; then
1119 old_path=${PATH}
1120 source "${ROOT_DIR}/${BUILD_DIR}/build_utils.sh"
1121 source "${ROOT_DIR}/${BUILD_DIR}/_setup_env.sh"
1122
1123 if [[ ! -f ${OUT_DIR}/.config ]]; then
1124 pre_defconfig_cmds
1125 set -x
1126 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
1127 set +x
1128 post_defconfig_cmds
1129 fi
1130
1131 if [[ -n ${IMAGE} ]]; then
1132 set -x
1133 if [ "${ARCH}" = "arm64" ]; then
1134 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) Image)
1135 elif [ "${ARCH}" = "arm" ]; then
1136 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) LOADADDR=0x108000 uImage)
1137 fi
1138 set +x
1139 fi
1140 mkdir -p ${DIST_DIR}
1141 if [[ -n ${DTB_BUILD} ]]; then
1142 set -x
1143 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) dtbs)
1144 set +x
1145 fi
1146 if [[ -n ${MODULES} ]]; then
1147 export MODULES_STAGING_DIR=$(readlink -m ${COMMON_OUT_DIR}/staging)
1148 rm -rf ${MODULES_STAGING_DIR}
1149 mkdir -p ${MODULES_STAGING_DIR}
1150 if [ "${DO_NOT_STRIP_MODULES}" != "1" ]; then
1151 MODULE_STRIP_FLAG="INSTALL_MOD_STRIP=1"
1152 fi
1153 if [[ `grep "CONFIG_AMLOGIC_IN_KERNEL_MODULES=y" ${ROOT_DIR}/${FRAGMENT_CONFIG}` ]]; then
1154 set -x
1155 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) modules)
1156 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} INSTALL_MOD_PATH=${MODULES_STAGING_DIR} "${MAKE_ARGS[@]}" modules_install)
1157 set +x
1158 fi
1159 echo EXT_MODULES=$EXT_MODULES
1160 prepare_module_build
1161 if [[ -z "${SKIP_EXT_MODULES}" ]] && [[ -n "${EXT_MODULES}" ]]; then
1162 echo "========================================================"
1163 echo " Building external modules and installing them into staging directory"
1164 KERNEL_UAPI_HEADERS_DIR=$(readlink -m ${COMMON_OUT_DIR}/kernel_uapi_headers)
1165 for EXT_MOD in ${EXT_MODULES}; do
1166 EXT_MOD_REL=$(rel_path ${ROOT_DIR}/${EXT_MOD} ${KERNEL_DIR})
1167 mkdir -p ${OUT_DIR}/${EXT_MOD_REL}
1168 set -x
1169 make -C ${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1170 O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}"
1171 make -C ${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1172 O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} \
1173 INSTALL_MOD_PATH=${MODULES_STAGING_DIR} \
1174 INSTALL_MOD_DIR="extra/${EXT_MOD}" \
1175 INSTALL_HDR_PATH="${KERNEL_UAPI_HEADERS_DIR}/usr" \
1176 "${MAKE_ARGS[@]}" modules_install
1177 set +x
1178 done
1179 fi
1180 export OUT_AMLOGIC_DIR=$(readlink -m ${COMMON_OUT_DIR}/amlogic)
1181 set -x
1182 extra_cmds
1183 set +x
1184 MODULES=$(find ${MODULES_STAGING_DIR} -type f -name "*.ko")
1185 cp -p ${MODULES} ${DIST_DIR}
1186
1187 new_path=${PATH}
1188 PATH=${old_path}
1189 echo "========================================================"
1190 if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then
1191 echo "Rebuild rootfs in order to install modules!"
1192 rebuild_rootfs ${ARCH}
1193 else
1194 echo "There's no file ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot, so don't rebuild rootfs!"
1195 fi
1196 PATH=${new_path}
1197 fi
1198 if [ -n "${DTS_EXT_DIR}" ]; then
1199 if [ -d "${ROOT_DIR}/${DTS_EXT_DIR}" ]; then
1200 DTS_EXT_DIR=$(rel_path ${ROOT_DIR}/${DTS_EXT_DIR} ${KERNEL_DIR})
1201 if [ -d ${OUT_DIR}/${DTS_EXT_DIR} ]; then
1202 FILES="$FILES `ls ${OUT_DIR}/${DTS_EXT_DIR}`"
1203 fi
1204 fi
1205 fi
1206 for FILE in ${FILES}; do
1207 if [ -f ${OUT_DIR}/${FILE} ]; then
1208 echo " $FILE"
1209 cp -p ${OUT_DIR}/${FILE} ${DIST_DIR}/
1210 elif [[ "${FILE}" =~ \.dtb|\.dtbo ]] && \
1211 [ -n "${DTS_EXT_DIR}" ] && [ -f "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" ] ; then
1212 # DTS_EXT_DIR is recalculated before to be relative to KERNEL_DIR
1213 echo " $FILE"
1214 cp -p "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" "${DIST_DIR}/"
1215 else
1216 echo " $FILE is not a file, skipping"
1217 fi
1218 done
1219 exit
1220 fi
1221}
1222
1223export -f build_part_of_kernel
1224
1225function export_env_variable () {
1226 export ABI BUILD_CONFIG LTO KMI_SYMBOL_LIST_STRICT_MODE CHECK_DEFCONFIG MANUAL_INSMOD_MODULE ARCH
qinglin.libce54712023-05-08 13:56:31 +08001227 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 +08001228 export FULL_KERNEL_VERSION BAZEL
1229
1230 echo ROOT_DIR=$ROOT_DIR
1231 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 +08001232 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 +08001233 echo FULL_KERNEL_VERSION=${FULL_KERNEL_VERSION} BAZEL=${BAZEL}
1234 echo MENUCONFIG=${MENUCONFIG} BASICCONFIG=${BASICCONFIG} IMAGE=${IMAGE} MODULES=${MODULES} DTB_BUILD=${DTB_BUILD}
1235}
1236
1237export -f export_env_variable
Dezhen Wang850c0d22023-05-31 19:26:20 +08001238
1239function handle_input_parameters () {
1240 VA=
1241 ARGS=()
1242 for i in "$@"
1243 do
1244 case $i in
1245 --arch)
1246 ARCH=$2
1247 VA=1
1248 shift
1249 ;;
1250 --abi)
1251 ABI=1
1252 shift
1253 ;;
1254 --build_config)
1255 BUILD_CONFIG=$2
1256 VA=1
1257 shift
1258 ;;
1259 --lto)
1260 LTO=$2
1261 VA=1
1262 shift
1263 ;;
1264 --symbol_strict)
1265 KMI_SYMBOL_LIST_STRICT_MODE=$2
1266 VA=1
1267 shift
1268 ;;
1269 --menuconfig)
1270 MENUCONFIG=1
1271 shift
1272 ;;
1273 --basicconfig)
1274 if [ "$2" = "m" ] || [ "$2" = "n" ]; then
1275 BASICCONFIG=$2
1276 else
1277 BASICCONFIG="m"
1278 fi
1279 VA=1
1280 shift
1281 ;;
1282 --image)
1283 IMAGE=1
1284 shift
1285 ;;
1286 --modules)
1287 MODULES=1
1288 shift
1289 break
1290 ;;
1291 --dtbs)
1292 DTB_BUILD=1
1293 shift
1294 ;;
1295 --build_dir)
1296 BUILD_DIR=$2
1297 VA=1
1298 shift
1299 ;;
1300 --check_defconfig)
1301 CHECK_DEFCONFIG=1
1302 shift
1303 ;;
1304 --modules_depend)
1305 MODULES_DEPEND=1
1306 shift
1307 ;;
1308 --android_project)
1309 ANDROID_PROJECT=$2
1310 VA=1
1311 shift
1312 ;;
1313 --gki_20)
1314 GKI_CONFIG=gki_20
1315 shift
1316 ;;
1317 --gki_10)
1318 GKI_CONFIG=gki_10
1319 shift
1320 ;;
1321 --gki_debug)
1322 GKI_CONFIG=gki_debug
1323 shift
1324 ;;
1325 --fast_build)
1326 FAST_BUILD=1
1327 shift
1328 ;;
1329 --upgrade)
1330 UPGRADE_PROJECT=1
1331 ANDROID_VERSION=$2
1332 VA=1
1333 shift
1334 ;;
1335 --manual_insmod_module)
1336 MANUAL_INSMOD_MODULE=1
1337 shift
1338 ;;
Dezhen Wang850c0d22023-05-31 19:26:20 +08001339 --check_gki_20)
1340 CHECK_GKI_20=1
1341 GKI_CONFIG=gki_20
1342 LTO=none
1343 shift
1344 ;;
1345 --dev_config)
1346 DEV_CONFIGS=$2
1347 VA=1
1348 shift
1349 ;;
1350 --bazel)
1351 BAZEL=1
1352 shift
1353 ;;
1354 -h|--help)
1355 show_help
1356 exit 0
1357 ;;
1358 *)
1359 if [[ -n $1 ]];
1360 then
1361 if [[ -z ${VA} ]];
1362 then
1363 ARGS+=("$1")
1364 fi
1365 fi
1366 VA=
1367 shift
1368 ;;
1369 esac
1370 done
1371}
1372
1373export -f handle_input_parameters
1374
1375function set_default_parameters () {
1376 if [ "${ARCH}" = "arm" ]; then
1377 ARGS+=("LOADADDR=0x108000")
1378 else
1379 ARCH=arm64
1380 fi
1381
1382 if [[ -z "${ABI}" ]]; then
1383 ABI=0
1384 fi
1385 if [[ -z "${LTO}" ]]; then
1386 LTO=thin
1387 fi
1388 if [[ -n ${CHECK_GKI_20} && -z ${ANDROID_PROJECT} ]]; then
1389 ANDROID_PROJECT=ohm
1390 fi
1391
1392 if [[ -z "${BUILD_CONFIG}" ]]; then
1393 if [ "${ARCH}" = "arm64" ]; then
1394 BUILD_CONFIG=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic
1395 elif [ "${ARCH}" = "arm" ]; then
1396 BUILD_CONFIG=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic32
1397 fi
1398 fi
1399 if [[ -z "${BUILD_DIR}" ]]; then
1400 BUILD_DIR=build
1401 fi
1402
1403 version_message=$(grep -rn BRANCH= ${KERNEL_DIR}/build.config.constants)
1404 version_message="common${version_message##*android}"
1405 if [[ -n ${FULL_KERNEL_VERSION} ]]; then
1406 if [[ "${FULL_KERNEL_VERSION}" != "${version_message}" ]]; then
1407 echo "kernel version is not match!!"
1408 exit
1409 fi
1410 else
1411 FULL_KERNEL_VERSION=${version_message}
1412 fi
1413
1414 if [[ -z ${BAZEL} ]]; then
Dezhen Wang20069292023-06-20 14:51:21 +08001415 [[ "${FULL_KERNEL_VERSION}" != "common13-5.15" && "${ARCH}" == "arm64" && -z ${UPGRADE_PROJECT} ]] && BAZEL=1
Dezhen Wang850c0d22023-05-31 19:26:20 +08001416 fi
1417
1418 auto_patch_to_common_dir
1419
1420 if [[ ! -f ${BUILD_DIR}/build_abi.sh ]]; then
1421 echo "The directory of build does not exist";
1422 exit
1423 fi
1424
1425 ROOT_DIR=$(readlink -f $(dirname $0))
1426 if [[ ! -f ${ROOT_DIR}/${KERNEL_DIR}/init/main.c ]]; then
1427 ROOT_DIR=`pwd`
1428 if [[ ! -f ${ROOT_DIR}/${KERNEL_DIR}/init/main.c ]]; then
1429 echo "the file path of $0 is incorrect"
1430 exit
1431 fi
1432 fi
1433 export ROOT_DIR
1434
1435 CHECK_DEFCONFIG=${CHECK_DEFCONFIG:-0}
1436 MODULES_DEPEND=${MODULES_DEPEND:-0}
1437 if [[ ! -f ${KERNEL_BUILD_VAR_FILE} ]]; then
1438 export KERNEL_BUILD_VAR_FILE=`mktemp /tmp/kernel.XXXXXXXXXXXX`
1439 RM_KERNEL_BUILD_VAR_FILE=1
1440 fi
1441
1442 GKI_CONFIG=${GKI_CONFIG:-gki_debug}
1443
1444 export CROSS_COMPILE=
1445
1446 if [ "${ABI}" -eq "1" ]; then
1447 export OUT_DIR_SUFFIX="_abi"
1448 else
1449 OUT_DIR_SUFFIX=
1450 fi
1451}
1452
1453export -f set_default_parameters
1454
1455function auto_patch_to_common_dir () {
1456 #first auto patch when param parse end
Dezhen Wang850c0d22023-05-31 19:26:20 +08001457
1458 if [[ -f ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/auto_patch/auto_patch.sh ]]; then
1459 export PATCH_PARM
1460 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/auto_patch/auto_patch.sh ${FULL_KERNEL_VERSION}
1461 fi
1462
1463 if [[ ${ONLY_PATCH} -eq "1" ]]; then
1464 cd ${CURRENT_DIR}
1465 exit
1466 fi
1467}
1468
1469export -f auto_patch_to_common_dir
1470
1471
1472# the follow functions are used for smarthome
1473function handle_input_parameters_for_smarthome () {
1474 VA=
1475 ARGS=()
1476 for i in "$@"
1477 do
1478 case $i in
1479 --savedefconfig)
1480 SAVEDEFCONFIG=1
1481 shift
1482 ;;
1483 --menuconfig)
1484 MENUCONFIG=1
1485 shift
1486 ;;
1487 --dtb)
1488 DTB=1
1489 shift
1490 ;;
1491 --manual_insmod_module)
1492 MANUAL_INSMOD_MODULE=1
1493 shift
1494 ;;
1495 --patch)
1496 ONLY_PATCH=1
1497 shift
1498 ;;
1499 -h|--help)
1500 show_help
1501 exit 0
1502 ;;
1503 *)
1504 if [[ -n $1 ]];
1505 then
1506 if [[ -z ${VA} ]];
1507 then
1508 ARGS+=("$1")
1509 fi
1510 fi
1511 VA=
1512 shift
1513 ;;
1514 esac
1515 done
1516}
1517
1518export -f handle_input_parameters_for_smarthome
1519
1520function set_default_parameters_for_smarthome () {
1521 version_message=$(grep -rn BRANCH= ${KERNEL_DIR}/build.config.constants)
1522 version_message="common${version_message##*android}"
1523 if [[ -n ${FULL_KERNEL_VERSION} ]]; then
1524 if [[ "${FULL_KERNEL_VERSION}" != "${version_message}" ]]; then
1525 echo "kernel version is not match!!"
1526 exit
1527 fi
1528 else
1529 FULL_KERNEL_VERSION=${version_message}
1530 fi
1531
1532 tool_args=()
1533 prebuilts_paths=(
1534 CLANG_PREBUILT_BIN
1535 #BUILDTOOLS_PREBUILT_BIN
1536 )
1537 echo CC_CLANG=$CC_CLANG
1538 if [[ $CC_CLANG -eq "1" ]]; then
1539 source ${ROOT_DIR}/${KERNEL_DIR}/build.config.common
1540 if [[ -n "${LLVM}" ]]; then
1541 tool_args+=("LLVM=1")
1542 fi
1543 #if [ -n "${DTC}" ]; then
1544 # tool_args+=("DTC=${DTC}")
1545 #fi
1546 for prebuilt_bin in "${prebuilts_paths[@]}"; do
1547 prebuilt_bin=\${${prebuilt_bin}}
1548 eval prebuilt_bin="${prebuilt_bin}"
1549 if [ -n "${prebuilt_bin}" ]; then
1550 PATH=${PATH//"${ROOT_DIR}\/${prebuilt_bin}:"}
1551 PATH=${ROOT_DIR}/${prebuilt_bin}:${PATH} # add the clang tool to env PATH
1552 fi
1553 done
1554 export PATH
1555 elif [[ -n $CROSS_COMPILE_TOOL ]]; then
1556 export CROSS_COMPILE=${CROSS_COMPILE_TOOL}
1557 fi
1558
1559 if [[ $ARCH == arm64 ]]; then
1560 OUTDIR=${ROOT_DIR}/out/kernel-5.15-64
1561 elif [[ $ARCH == arm ]]; then
1562 OUTDIR=${ROOT_DIR}/out/kernel-5.15-32
1563 tool_args+=("LOADADDR=0x208000")
1564 elif [[ $ARCH == riscv ]]; then
1565 OUTDIR=${ROOT_DIR}/out/riscv-kernel-5.15-64
1566 fi
1567 TOOL_ARGS="${tool_args[@]}"
1568
1569 OUT_DIR=${OUTDIR}/common
1570 mkdir -p ${OUT_DIR}
1571 if [ "${SKIP_RM_OUTDIR}" != "1" ] ; then
1572 rm -rf ${OUTDIR}
1573 fi
1574
1575 echo "========================================================"
1576 echo ""
1577 export DIST_DIR=$(readlink -m ${OUTDIR}/dist)
1578 export MODULES_STAGING_DIR=$(readlink -m ${OUTDIR}/staging)
1579 export OUT_AMLOGIC_DIR=$(readlink -m ${OUTDIR}/amlogic)
1580 echo OUTDIR=$OUTDIR DIST_DIR=$DIST_DIR MODULES_STAGING_DIR=$MODULES_STAGING_DIR KERNEL_DIR=$KERNEL_DIR
1581
1582
1583 source ${ROOT_DIR}/build/kernel/build_utils.sh
1584
1585 DTS_EXT_DIR=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/boot/dts/amlogic
1586 DTS_EXT_DIR=$(rel_path ${ROOT_DIR}/${DTS_EXT_DIR} ${KERNEL_DIR})
1587 export dtstree=${DTS_EXT_DIR}
1588 export DTC_INCLUDE=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/include
1589
1590 EXT_MODULES="
1591 ${EXT_MODULES}
1592 "
1593
1594 EXT_MODULES_CONFIG="
1595 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/ext_modules_config
1596 "
1597
1598 EXT_MODULES_PATH="
1599 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/ext_modules_path
1600 "
1601
1602 POST_KERNEL_BUILD_CMDS="prepare_module_build"
1603 EXTRA_CMDS="extra_cmds"
1604
1605 IN_KERNEL_MODULES=1
1606}
1607
1608export -f set_default_parameters_for_smarthome
1609
1610function savedefconfig_cmd_for_smarthome () {
1611 if [[ -n ${SAVEDEFCONFIG} ]]; then
1612 set -x
1613 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${DEFCONFIG}
1614 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} savedefconfig
1615 rm ${KERNEL_DIR}/arch/${ARCH}/configs/${DEFCONFIG}
1616 cp -f ${OUT_DIR}/defconfig ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/configs/${DEFCONFIG}
1617 set +x
1618 exit
1619 fi
1620}
1621
1622export -f savedefconfig_cmd_for_smarthome
1623
1624function only_build_dtb_for_smarthome () {
1625 if [[ -n ${DTB} ]]; then
1626 set -x
1627 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
1628 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs || exit
1629 set +x
1630 exit
1631 fi
1632}
1633
1634export -f only_build_dtb_for_smarthome
1635
1636function make_menuconfig_cmd_for_smarthome () {
1637 if [[ -n ${MENUCONFIG} ]]; then
1638 set -x
1639 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${DEFCONFIG}
1640 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} menuconfig
1641 set +x
1642 exit
1643 fi
1644}
1645
1646export -f make_menuconfig_cmd_for_smarthome
1647
1648function build_kernel_for_different_cpu_architecture () {
1649 set -x
1650 if [[ $ARCH == arm64 ]]; then
1651 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
1652 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} headers_install &&
1653 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} Image -j12 &&
1654 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} modules -j12 &&
1655 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 &&
1656 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs -j12 || exit
1657 rm ${ROOT_DIR}/${KERNEL_DIR}/arch/arm64/configs/${DEFCONFIG}
1658 elif [[ $ARCH == arm ]]; then
1659 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
1660 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} headers_install &&
1661 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} uImage -j12 &&
1662 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} modules -j12 &&
1663 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 &&
1664 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs -j12 || exit
1665 rm ${ROOT_DIR}/${KERNEL_DIR}/arch/arm/configs/${DEFCONFIG}
1666 elif [[ $ARCH == riscv ]]; then
1667 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
1668 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} headers_install &&
1669 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} Image -j12 &&
1670 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} modules -j12 &&
1671 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} INSTALL_MOD_PATH=${MODULES_STAGING_DIR} modules_install -j12 &&
1672 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs -j12 || exit
1673 rm ${ROOT_DIR}/${KERNEL_DIR}/arch/riscv/configs/${DEFCONFIG}
1674 fi
1675 cp ${OUT_DIR}/arch/${ARCH}/boot/Image* ${DIST_DIR}
1676 cp ${OUT_DIR}/arch/${ARCH}/boot/uImage* ${DIST_DIR}
1677 cp ${OUT_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/boot/dts/amlogic/*.dtb ${DIST_DIR}
1678 cp ${OUT_DIR}/vmlinux ${DIST_DIR}
1679 set +x
1680}
1681
1682export -f build_kernel_for_different_cpu_architecture
1683
1684function build_ext_modules() {
1685 for EXT_MOD in ${EXT_MODULES}; do
1686 EXT_MOD_REL=$(rel_path ${ROOT_DIR}/${EXT_MOD} ${KERNEL_DIR})
1687 mkdir -p ${OUT_DIR}/${EXT_MOD_REL}
1688
1689 set -x
1690 make ARCH=${ARCH} -C ${ROOT_DIR}/${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1691 O=${OUT_DIR} ${TOOL_ARGS} -j12 || exit
1692 make ARCH=${ARCH} -C ${ROOT_DIR}/${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1693 O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} \
1694 INSTALL_MOD_PATH=${MODULES_STAGING_DIR} \
1695 INSTALL_MOD_DIR="extra/${EXT_MOD}" \
1696 INSTALL_MOD_STRIP=1 \
1697 modules_install -j12 || exit
1698 set +x
1699 done
1700}
1701
1702export -f build_ext_modules
1703
1704function copy_modules_and_rebuild_rootfs_for_smarthome () {
1705 MODULES=$(find ${MODULES_STAGING_DIR} -type f -name "*.ko")
1706 if [ -n "${MODULES}" ]; then
1707 if [ -n "${IN_KERNEL_MODULES}" -o -n "${EXT_MODULES}" -o -n "${EXT_MODULES_MAKEFILE}" ]; then
1708 echo "========================================================"
1709 echo " Copying modules files"
1710 for module in ${MODULES}; do
1711 cp ${module} ${DIST_DIR}
1712 done
1713 if [ "${COMPRESS_MODULES}" = "1" ]; then
1714 echo " Archiving modules to ${MODULES_ARCHIVE}"
1715 tar --transform="s,.*/,," -czf ${DIST_DIR}/${MODULES_ARCHIVE} ${MODULES[@]}
1716 fi
1717 fi
1718
1719 if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then
1720 echo "Rebuild rootfs in order to install modules!"
1721 rebuild_rootfs ${ARCH}
1722 echo "Build success!"
1723 else
1724 echo "There's no file ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot, so don't rebuild rootfs!"
1725 fi
1726 fi
1727}
1728
1729export -f copy_modules_and_rebuild_rootfs_for_smarthome