blob: 3182723230321b09ee619a7bb43fd5c761422c1f [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}
Wanwei Jiange5426752023-07-03 00:56:39 +080018 else
Dezhen Wanga6806c52023-06-13 19:47:05 +080019 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}
20 fi
Wanwei Jiang51217812022-11-01 20:23:03 +080021 fi
22 rm ${temp_file}
23 else
Dezhen Wanga6806c52023-06-13 19:47:05 +080024 if [[ ${ARCH} == arm ]]; then
25 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}
26 else
27 if [[ ${GKI_CONFIG} == gki_20 ]]; then
28 if [[ -n ${CHECK_GKI_20} ]]; then
29 local temp_file=`mktemp /tmp/config.XXXXXXXXXXXX`
30 echo "CONFIG_STMMAC_ETH=n" > ${temp_file}
31 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}
32 rm ${temp_file}
33 else
34 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}
35 fi
Wanwei Jiange5426752023-07-03 00:56:39 +080036 else
Dezhen Wanga6806c52023-06-13 19:47:05 +080037 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 +080038 fi
Wanwei Jiang51217812022-11-01 20:23:03 +080039 fi
wanwei.jiang6fdd3152022-08-01 20:35:05 +080040 fi
qinglin.li7a994a02022-12-05 15:04:40 +080041
qinglin.li62b23332023-06-25 10:37:41 +080042 if [[ ${UPGRADE_PROJECT} == r || ${UPGRADE_PROJECT} == R ]]; then
43 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}
44 fi
45 if [[ ${UPGRADE_PROJECT} == p || ${UPGRADE_PROJECT} == P ]]; then
46 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}
47 fi
48 if [[ ${UPGRADE_PROJECT} == s || ${UPGRADE_PROJECT} == S ]]; then
49 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}
50 fi
51 if [[ ${UPGRADE_PROJECT} == u || ${UPGRADE_PROJECT} == U ]]; then
52 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}
qinglin.li7a994a02022-12-05 15:04:40 +080053 fi
Dezhen Wangab7ba642023-03-15 14:10:44 +080054
Wanwei Jiangc65e4d32023-03-21 16:24:41 +080055 if [[ ${IN_BUILD_GKI_10} == 1 ]]; then
56 local temp_file=`mktemp /tmp/config.XXXXXXXXXXXX`
57 echo "CONFIG_MODULE_SIG_ALL=y" >> ${temp_file}
58 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${temp_file}
59 rm ${temp_file}
60 fi
Dezhen Wanga5f456a2023-05-05 17:40:31 +080061
62 if [[ -n ${DEV_CONFIGS} ]]; then
Wanwei Jiang7c582c02023-07-21 18:34:50 +080063 local config_list=$(echo ${DEV_CONFIGS}|sed 's/+/ /g')
Dezhen Wanga5f456a2023-05-05 17:40:31 +080064 for config_name in ${config_list[@]}
65 do
Wanwei Jiang7c582c02023-07-21 18:34:50 +080066 if [[ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/configs/${config_name} ]]; then
67 config_file=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/configs/${config_name}
68 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${config_file}
Dezhen Wanga5f456a2023-05-05 17:40:31 +080069 elif [[ -f ${config_name} ]]; then
70 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${config_name}
71 else
72 echo "ERROR: config file ${config_name} is not in the right path!!"
73 exit
74 fi
75 done
76 fi
wanwei.jiang91776952021-11-19 13:10:32 +080077}
78export -f pre_defconfig_cmds
79
80function post_defconfig_cmds() {
Wanwei Jiang2d4f9742022-09-13 11:22:17 +080081 rm ${ROOT_DIR}/${KCONFIG_DEFCONFIG}
wanwei.jiang91776952021-11-19 13:10:32 +080082}
83export -f post_defconfig_cmds
84
85function read_ext_module_config() {
86 ALL_LINE=""
87 while read LINE
88 do
89 if [[ $LINE != \#* && $LINE != "" ]]; then
90 ALL_LINE="$ALL_LINE"" ""$LINE"
91 fi
92 done < $1
wanwei.jiang5c861ae2022-04-21 00:51:50 +080093
94 echo "${ALL_LINE}"
wanwei.jiang91776952021-11-19 13:10:32 +080095}
96
pengzhao.liua923dea2023-06-25 09:58:20 +080097function autotest(){
98 if [[ -d ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/ ]]; then
99 if [[ ! -f ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/pre-commit ]]; then
100 cp ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/pre-commit ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/pre-commit
101 cp ${KERNEL_DIR}/scripts/amlogic/pre-commit ${KERNEL_DIR}/.git/hooks/pre-commit
102 chmod +x ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/pre-commit
103 chmod +x ${KERNEL_DIR}/.git/hooks/pre-commit
104 fi
105 fi
106}
107
wanwei.jiang91776952021-11-19 13:10:32 +0800108function read_ext_module_predefine() {
109 PRE_DEFINE=""
110
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800111 for y_config in `cat $1 | grep "^CONFIG_.*=y" | sed 's/=y//'`; do
wanwei.jiang91776952021-11-19 13:10:32 +0800112 PRE_DEFINE="$PRE_DEFINE"" -D"${y_config}
113 done
114
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800115 for m_config in `cat $1 | grep "^CONFIG_.*=m" | sed 's/=m//'`; do
wanwei.jiang91776952021-11-19 13:10:32 +0800116 PRE_DEFINE="$PRE_DEFINE"" -D"${m_config}_MODULE
117 done
118
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800119 echo "${PRE_DEFINE}"
wanwei.jiang91776952021-11-19 13:10:32 +0800120}
121
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800122top_ext_drivers=top_ext_drivers
wanwei.jiang91776952021-11-19 13:10:32 +0800123function prepare_module_build() {
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800124 local temp_file=`mktemp /tmp/kernel.XXXXXXXXXXXX`
Wanwei Jiang0a74fb12022-12-09 16:27:40 +0800125 if [[ ! `grep "CONFIG_AMLOGIC_IN_KERNEL_MODULES=y" ${ROOT_DIR}/${FRAGMENT_CONFIG}` ]]; then
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800126 sed 's:#.*$::g' ${ROOT_DIR}/${FRAGMENT_CONFIG} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
127 GKI_EXT_KERNEL_MODULE_CONFIG=$(read_ext_module_config ${temp_file})
128 GKI_EXT_KERNEL_MODULE_PREDEFINE=$(read_ext_module_predefine ${temp_file})
129 export GKI_EXT_KERNEL_MODULE_CONFIG GKI_EXT_KERNEL_MODULE_PREDEFINE
wanwei.jiang91776952021-11-19 13:10:32 +0800130 fi
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800131
132 for ext_module_config in ${EXT_MODULES_CONFIG}; do
133 sed 's:#.*$::g' ${ROOT_DIR}/${ext_module_config} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
134 GKI_EXT_MODULE_CONFIG=$(read_ext_module_config ${temp_file})
135 GKI_EXT_MODULE_PREDEFINE=$(read_ext_module_predefine ${temp_file})
136 done
137 export GKI_EXT_MODULE_CONFIG GKI_EXT_MODULE_PREDEFINE
138 echo GKI_EXT_MODULE_CONFIG=${GKI_EXT_MODULE_CONFIG}
139 echo GKI_EXT_MODULE_PREDEFINE=${GKI_EXT_MODULE_PREDEFINE}
140
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800141 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
142 if [[ -d ${top_ext_drivers} ]]; then
143 rm -rf ${top_ext_drivers}
144 fi
145 mkdir -p ${top_ext_drivers}
146 fi
147
148 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
149 extra_symbols="KBUILD_EXTRA_SYMBOLS +="
150 fi
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800151 ext_modules=
152 for ext_module in ${EXT_MODULES}; do
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800153 module_abs_path=`readlink -e ${ext_module}`
154 module_rel_path=$(rel_path ${module_abs_path} ${ROOT_DIR})
155 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
156 if [[ `echo ${module_rel_path} | grep "\.\.\/"` ]]; then
157 cp -rf ${module_abs_path} ${top_ext_drivers}
158 module_rel_path=${top_ext_drivers}/${module_abs_path##*/}
159 fi
160 fi
161 ext_modules="${ext_modules} ${module_rel_path}"
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800162 done
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800163
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800164 for ext_module_path in ${EXT_MODULES_PATH}; do
165 sed 's:#.*$::g' ${ROOT_DIR}/${ext_module_path} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800166 while read LINE
167 do
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800168 module_abs_path=`readlink -e ${LINE}`
169 module_rel_path=$(rel_path ${module_abs_path} ${ROOT_DIR})
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800170 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
171 if [[ `echo ${module_rel_path} | grep "\.\.\/"` ]]; then
172 cp -rf ${module_abs_path} ${top_ext_drivers}
173 module_rel_path=${top_ext_drivers}/${module_abs_path##*/}
174 fi
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800175 fi
176 ext_modules="${ext_modules} ${module_rel_path}"
177
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800178 done < ${temp_file}
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800179 done
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800180 EXT_MODULES=${ext_modules}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800181
182 local flag=0
183 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
184 for ext_module in ${EXT_MODULES}; do
185 ext_mod_rel=$(rel_path ${ext_module} ${KERNEL_DIR})
186 if [[ ${flag} -eq "1" ]]; then
187 sed -i "/# auto add KBUILD_EXTRA_SYMBOLS start/,/# auto add KBUILD_EXTRA_SYMBOLS end/d" ${ext_module}/Makefile
188 sed -i "2 i # auto add KBUILD_EXTRA_SYMBOLS end" ${ext_module}/Makefile
189 sed -i "2 i ${extra_symbols}" ${ext_module}/Makefile
190 sed -i "2 i # auto add KBUILD_EXTRA_SYMBOLS start" ${ext_module}/Makefile
191 echo "${ext_module}/Makefile add: ${extra_symbols}"
192 fi
193 extra_symbols="${extra_symbols} ${ext_mod_rel}/Module.symvers"
194 flag=1
195 done
196 fi
197
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800198 export EXT_MODULES
199 echo EXT_MODULES=${EXT_MODULES}
200
201 rm ${temp_file}
wanwei.jiang91776952021-11-19 13:10:32 +0800202}
wanwei.jiang91776952021-11-19 13:10:32 +0800203export -f prepare_module_build
wanwei.jiang612a8882021-11-23 17:12:23 +0800204
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800205function extra_cmds() {
Dezhen Wang1176fad2023-06-09 11:22:17 +0800206 echo "========================================================"
207 echo " Running extra build command(s):"
208
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800209 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
210 for ext_module in ${EXT_MODULES}; do
211 sed -i "/# auto add KBUILD_EXTRA_SYMBOLS start/,/# auto add KBUILD_EXTRA_SYMBOLS end/d" ${ext_module}/Makefile
212 done
213 fi
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800214
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800215 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
216 if [[ -d ${top_ext_drivers} ]]; then
217 rm -rf ${top_ext_drivers}
218 fi
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800219 fi
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800220
221 for FILE in ${FILES}; do
222 if [[ "${FILE}" =~ \.dtbo ]] && \
223 [ -n "${DTS_EXT_DIR}" ] && [ -f "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" ] ; then
224 MKDTIMG_DTBOS="${MKDTIMG_DTBOS} ${DIST_DIR}/${FILE}"
225 fi
226 done
227 export MKDTIMG_DTBOS
228
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800229 set +x
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800230 modules_install
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800231 set -x
232
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800233 local src_dir=$(echo ${MODULES_STAGING_DIR}/lib/modules/*)
234 pushd ${src_dir}
wanwei.jiangf73b2202022-07-23 16:00:44 +0800235 cp modules.order modules_order.back
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800236 : > modules.order
Wanwei Jiang571dde62022-11-17 14:37:41 +0800237 set +x
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800238 while read LINE
239 do
240 find -name ${LINE} >> modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800241 done < ${OUT_AMLOGIC_DIR}/modules/modules.order
Wanwei Jiang571dde62022-11-17 14:37:41 +0800242 set -x
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800243 sed -i "s/^\.\///" modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800244 : > ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800245 ext_modules=
246 for ext_module in ${EXT_MODULES}; do
247 if [[ ${ext_module} =~ "../" ]]; then
248 ext_module_old=${ext_module}
249 ext_module=${ext_module//\.\.\//}
250 ext_dir=$(dirname ${ext_module})
251 [[ -d extra/${ext_module} ]] && rm -rf extra/${ext_dir}
252 mkdir -p extra/${ext_dir}
253 cp -rf extra/${ext_module_old} extra/${ext_dir}
254
255 ext_modules_order_file=$(ls extra/${ext_module}/modules.order.*)
256 ext_dir_top=${ext_module%/*}
wanwei.jiangf73b2202022-07-23 16:00:44 +0800257 sed -i "s/\.\.\///g" ${ext_modules_order_file}
258 cat ${ext_modules_order_file} >> modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800259 cat ${ext_modules_order_file} | awk -F/ '{print $NF}' >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
wanwei.jiangf73b2202022-07-23 16:00:44 +0800260 : > ${ext_modules_order_file}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800261 else
262 ext_modules_order_file=$(ls extra/${ext_module}/modules.order.*)
wanwei.jiangf73b2202022-07-23 16:00:44 +0800263 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 fi
267 ext_modules="${ext_modules} ${ext_module}"
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800268 done
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800269 EXT_MODULES=${ext_modules}
270 echo EXT_MODULES=${EXT_MODULES}
271 export EXT_MODULES
wanwei.jiangf73b2202022-07-23 16:00:44 +0800272
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800273 head -n ${ramdisk_last_line} modules.order > vendor_boot_modules
wanwei.jiangf73b2202022-07-23 16:00:44 +0800274 file_last_line=`sed -n "$=" modules.order`
275 let line=${file_last_line}-${ramdisk_last_line}
276 tail -n ${line} modules.order > vendor_dlkm_modules
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800277 export MODULES_LIST=${src_dir}/vendor_boot_modules
278 if [[ "${ARCH}" = "arm64" && -z ${FAST_BUILD} ]]; then
Lei Zhang96efea62022-09-02 14:55:06 +0800279 export VENDOR_DLKM_MODULES_LIST=${src_dir}/vendor_dlkm_modules
280 fi
wanwei.jiangf73b2202022-07-23 16:00:44 +0800281
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800282 popd
wanwei.jiang1d154992022-05-30 14:56:26 +0800283
Wanwei Jiang0a74fb12022-12-09 16:27:40 +0800284 if [[ -z ${ANDROID_PROJECT} ]] && [[ -d ${OUT_DIR}/${DTS_EXT_DIR} ]]; then
wanwei.jiang1d154992022-05-30 14:56:26 +0800285 FILES="$FILES `ls ${OUT_DIR}/${DTS_EXT_DIR}`"
286 fi
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800287
288 if [[ -f ${KERNEL_BUILD_VAR_FILE} ]]; then
289 : > ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiangb2ed83c2022-09-09 14:01:20 +0800290 echo "KERNEL_DIR=${KERNEL_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800291 echo "COMMON_OUT_DIR=${COMMON_OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
292 echo "OUT_DIR=${OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
293 echo "DIST_DIR=${DIST_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800294 echo "OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800295 echo "MODULES_STAGING_DIR=${MODULES_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
296 echo "MODULES_PRIVATE_DIR=${MODULES_PRIVATE_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
297 echo "INITRAMFS_STAGING_DIR=${INITRAMFS_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
298 echo "SYSTEM_DLKM_STAGING_DIR=${SYSTEM_DLKM_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
299 echo "VENDOR_DLKM_STAGING_DIR=${VENDOR_DLKM_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
300 echo "MKBOOTIMG_STAGING_DIR=${MKBOOTIMG_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800301 echo "DIST_GKI_DIR=${DIST_GKI_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
302 echo "FULL_KERNEL_VERSION=${FULL_KERNEL_VERSION}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8fe00342023-05-16 22:53:14 +0800303 echo "GKI_MODULES_LOAD_WHITE_LIST=\"${GKI_MODULES_LOAD_WHITE_LIST[*]}\"" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8042e472023-06-06 14:12:32 +0800304 echo "BAZEL=${BAZEL}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800305 fi
Wanwei Jianga07f9a52022-09-30 18:40:40 +0800306
307 for module_path in ${PREBUILT_MODULES_PATH}; do
308 find ${module_path} -type f -name "*.ko" -exec cp {} ${DIST_DIR} \;
309 done
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800310}
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800311export -f extra_cmds
312
Wanwei Jiang2218b892023-03-17 17:31:21 +0800313function bazel_extra_cmds() {
314 modules_install
315
316 if [[ -f ${KERNEL_BUILD_VAR_FILE} ]]; then
317 : > ${KERNEL_BUILD_VAR_FILE}
318 echo "KERNEL_DIR=${KERNEL_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
319 echo "COMMON_OUT_DIR=${COMMON_OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
320 echo "DIST_DIR=${DIST_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
321 echo "OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8fe00342023-05-16 22:53:14 +0800322 echo "GKI_MODULES_LOAD_WHITE_LIST=\"${GKI_MODULES_LOAD_WHITE_LIST[*]}\"" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8042e472023-06-06 14:12:32 +0800323 echo "BAZEL=${BAZEL}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang2218b892023-03-17 17:31:21 +0800324 fi
325
326 if [[ ${GKI_CONFIG} != gki_20 ]]; then
327 [[ -f ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz ]] && rm -f ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz
328 mv ${DIST_DIR}/system_dlkm_staging_archive.tar.gz ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz
329 [[ -d ${DIST_DIR}/system_dlkm_gki10 ]] && rm -rf ${DIST_DIR}/system_dlkm_gki10
330 mkdir ${DIST_DIR}/system_dlkm_gki10
331 pushd ${DIST_DIR}/system_dlkm_gki10
332 tar zxf ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz
333 find -name "*.ko" | while read module; do
Wanwei Jiang475245b2023-05-10 21:06:52 +0800334 module_name=${module##*/}
Wanwei Jiang2218b892023-03-17 17:31:21 +0800335 if [[ ! `grep "/${module_name}" ${DIST_DIR}/system_dlkm.modules.load` ]]; then
336 rm -f ${module}
337 fi
338 done
339 tar czf ${DIST_DIR}/system_dlkm_staging_archive.tar.gz lib
340 popd
341 rm -rf ${DIST_DIR}/system_dlkm_gki10
342 fi
343}
344
345export -f bazel_extra_cmds
346
wanwei.jiang612a8882021-11-23 17:12:23 +0800347function mod_probe() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800348 local ko=$1
349 local loop
qinglin.lia284a932022-09-21 18:07:38 +0800350 for loop in `grep "^$ko:" modules.dep | sed 's/.*://'`; do
Wanwei Jiang16554d02023-07-14 17:01:00 +0800351 [[ `grep $loop __install.sh` ]] && continue
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800352 mod_probe $loop
353 echo insmod $loop >> __install.sh
354 done
wanwei.jiang612a8882021-11-23 17:12:23 +0800355}
356
Wanwei Jiang571dde62022-11-17 14:37:41 +0800357function mod_probe_recovery() {
358 local ko=$1
359 local loop
360 for loop in `grep "^$ko:" modules_recovery.dep | sed 's/.*://'`; do
Wanwei Jiang16554d02023-07-14 17:01:00 +0800361 [[ `grep $loop __install_recovery.sh` ]] && continue
Wanwei Jiang571dde62022-11-17 14:37:41 +0800362 mod_probe_recovery $loop
363 echo insmod $loop >> __install_recovery.sh
364 done
365}
366
wanwei.jiangb12abc82021-12-25 22:17:10 +0800367function adjust_sequence_modules_loading() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800368 if [[ -n $1 ]]; then
369 chips=$1
wanwei.jiangb12abc82021-12-25 22:17:10 +0800370 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800371
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800372 cp modules.dep modules.dep.temp
373
374 soc_module=()
375 for chip in ${chips[@]}; do
376 chip_module=`ls amlogic-*-soc-${chip}.ko`
377 soc_module=(${soc_module[@]} ${chip_module[@]})
378 done
379 echo soc_module=${soc_module[*]}
380
381 delete_soc_module=()
382 if [[ ${#soc_module[@]} == 0 ]]; then
383 echo "Use all soc module"
384 else
385 for module in `ls amlogic-*-soc-*`; do
386 if [[ ! "${soc_module[@]}" =~ "${module}" ]] ; then
387 echo Delete soc module: ${module}
388 sed -n "/${module}:/p" modules.dep.temp
389 sed -i "/${module}:/d" modules.dep.temp
390 delete_soc_module=(${delete_soc_module[@]} ${module})
391 fi
392 done
393 echo delete_soc_module=${delete_soc_module[*]}
394 fi
395
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800396 if [[ -n ${CLK_SOC_MODULE} ]]; then
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800397 delete_clk_soc_modules=()
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800398 for module in `ls amlogic-clk-soc-*`; do
399 if [[ "${CLK_SOC_MODULE}" != "${module}" ]] ; then
400 echo Delete clk soc module: ${module}
401 sed -n "/${module}:/p" modules.dep.temp
402 sed -i "/${module}:/d" modules.dep.temp
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800403 delete_clk_soc_modules=(${delete_clk_soc_modules[@]} ${module})
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800404 fi
405 done
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800406 echo delete_clk_soc_modules=${delete_clk_soc_modules[*]}
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800407 fi
408
409 if [[ -n ${PINCTRL_SOC_MODULE} ]]; then
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800410 delete_pinctrl_soc_modules=()
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800411 for module in `ls amlogic-pinctrl-soc-*`; do
412 if [[ "${PINCTRL_SOC_MODULE}" != "${module}" ]] ; then
413 echo Delete pinctrl soc module: ${module}
414 sed -n "/${module}:/p" modules.dep.temp
415 sed -i "/${module}:/d" modules.dep.temp
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800416 delete_pinctrl_soc_modules=(${delete_pinctrl_soc_modules[@]} ${module})
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800417 fi
418 done
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800419 echo delete_pinctrl_soc_modules=${delete_pinctrl_soc_modules[*]}
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800420 fi
421
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800422 in_line_i=a
423 delete_type_modules=()
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800424 [[ -z ${TYPE_MODULE_SELECT_MODULE} ]] && TYPE_MODULE_SELECT_MODULE=${TYPE_MODULE_SELECT_MODULE_ANDROID}
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800425 echo "TYPE_MODULE_SELECT_MODULE=${TYPE_MODULE_SELECT_MODULE}"
426 mkdir temp_dir
427 cd temp_dir
428 in_temp_dir=y
429 for element in ${TYPE_MODULE_SELECT_MODULE}; do
430 if [[ ${in_temp_dir} = y ]]; then
431 cd ../
432 rm -r temp_dir
433 in_temp_dir=
434 fi
435 if [[ ${in_line_i} = a ]]; then
436 in_line_i=b
437 type_module=${element}
438 select_modules_i=0
439 select_modules_count=
440 select_modules=
441 elif [[ ${in_line_i} = b ]]; then
442 in_line_i=c
443 select_modules_count=${element}
444 else
445 let select_modules_i+=1
446 select_modules="${select_modules} ${element}"
447 if [[ ${select_modules_i} -eq ${select_modules_count} ]]; then
448 in_line_i=a
449 echo type_module=$type_module select_modules=$select_modules
450 for module in `ls ${type_module}`; do
451 dont_delete_module=0
452 for select_module in ${select_modules}; do
453 if [[ "${select_module}" == "${module}" ]] ; then
454 dont_delete_module=1
455 break;
456 fi
457 done
458 if [[ ${dont_delete_module} != 1 ]]; then
459 echo Delete module: ${module}
460 sed -n "/${module}:/p" modules.dep.temp
461 sed -i "/${module}:/d" modules.dep.temp
462 delete_type_modules=(${delete_type_modules[@]} ${module})
463 fi
464 done
465 echo delete_type_modules=${delete_type_modules[*]}
466 fi
467 fi
468 done
469 if [[ -n ${in_temp_dir} ]]; then
470 cd ../
471 rm -r temp_dir
472 fi
473
474 black_modules=()
Dezhen Wang45dfcb02023-02-13 17:41:44 +0800475 mkdir service_module
476 echo MODULES_SERVICE_LOAD_LIST=${MODULES_SERVICE_LOAD_LIST[@]}
477 BLACK_AND_SERVICE_LIST=(${MODULES_LOAD_BLACK_LIST[@]} ${MODULES_SERVICE_LOAD_LIST[@]})
478 echo ${BLACK_AND_SERVICE_LIST[@]}
479 for module in ${BLACK_AND_SERVICE_LIST[@]}; do
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800480 modules=`ls ${module}*`
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800481 black_modules=(${black_modules[@]} ${modules[@]})
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800482 done
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800483 if [[ ${#black_modules[@]} == 0 ]]; then
484 echo "black_modules is null, don't delete modules, MODULES_LOAD_BLACK_LIST=${MODULES_LOAD_BLACK_LIST[*]}"
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800485 else
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800486 echo black_modules=${black_modules[*]}
487 for module in ${black_modules[@]}; do
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800488 echo Delete module: ${module}
489 sed -n "/${module}:/p" modules.dep.temp
490 sed -i "/${module}:/d" modules.dep.temp
491 done
492 fi
493
Wanwei Jiang475245b2023-05-10 21:06:52 +0800494 GKI_MODULES_LOAD_BLACK_LIST=()
Wanwei Jiang16554d02023-07-14 17:01:00 +0800495 if [[ "${FULL_KERNEL_VERSION}" != "common13-5.15" && "${ARCH}" == "arm64" ]]; then
496 #if [[ "${FULL_KERNEL_VERSION}" != "common13-5.15" ]]; then
Wanwei Jiang475245b2023-05-10 21:06:52 +0800497 gki_modules_temp_file=`mktemp /tmp/config.XXXXXXXXXXXX`
qinglin.lieafebcf2023-06-27 12:48:22 +0800498 if [[ ${BAZEL} == "1" ]]; then
499 cp $DIST_DIR/system_dlkm.modules.load ${gki_modules_temp_file}
500 else
501 rm -f ${gki_modules_temp_file}
502 cat ${ROOT_DIR}/${KERNEL_DIR}/modules.bzl |grep ko | while read LINE
503 do
504 echo $LINE | sed 's/^[^"]*"//' | sed 's/".*$//' >> ${gki_modules_temp_file}
505 done
506 fi
Wanwei Jiang475245b2023-05-10 21:06:52 +0800507
508 for module in ${GKI_MODULES_LOAD_WHITE_LIST[@]}; do
509 sed -i "/\/${module}/d" ${gki_modules_temp_file}
510 done
511
512 for module in `cat ${gki_modules_temp_file}`; do
513 module=${module##*/}
514 GKI_MODULES_LOAD_BLACK_LIST[${#GKI_MODULES_LOAD_BLACK_LIST[*]}]=${module}
515 done
516 rm -f ${gki_modules_temp_file}
517
518 for module in ${GKI_MODULES_LOAD_BLACK_LIST[@]}; do
519 echo Delete module: ${module}
520 sed -n "/${module}:/p" modules.dep.temp
521 sed -i "/${module}:/d" modules.dep.temp
522 done
523 fi
524
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800525 cat modules.dep.temp | cut -d ':' -f 2 > modules.dep.temp1
Wanwei Jiang475245b2023-05-10 21:06:52 +0800526 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 +0800527 for module in ${delete_modules[@]}; do
Wanwei Jiang16554d02023-07-14 17:01:00 +0800528 if [[ ! -f $module ]]; then
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800529 continue
530 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800531 match=`sed -n "/${module}/=" modules.dep.temp1`
532 for match in ${match[@]}; do
533 match_count=(${match_count[@]} $match)
534 done
535 if [[ ${#match_count[@]} != 0 ]]; then
536 echo "Error ${#match_count[@]} modules depend on ${module}, please modify:"
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800537 echo ${MODULES_SEQUENCE_LIST}:MODULES_LOAD_BLACK_LIST
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800538 exit
539 fi
Dezhen Wang45dfcb02023-02-13 17:41:44 +0800540 if [[ -n ${ANDROID_PROJECT} ]]; then
541 for service_module_temp in ${MODULES_SERVICE_LOAD_LIST[@]}; do
542 if [[ ${module} = ${service_module_temp} ]]; then
543 mv ${module} service_module
544 fi
545 done
546 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800547 rm -f ${module}
548 done
549 rm -f modules.dep.temp1
wanwei.jiangb12abc82021-12-25 22:17:10 +0800550 touch modules.dep.temp1
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800551
552 for module in ${RAMDISK_MODULES_LOAD_LIST[@]}; do
553 echo RAMDISK_MODULES_LOAD_LIST: $module
wanwei.jiangb12abc82021-12-25 22:17:10 +0800554 sed -n "/${module}:/p" modules.dep.temp
555 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1
556 sed -i "/${module}:/d" modules.dep.temp
557 sed -n "/${module}.*\.ko:/p" modules.dep.temp
558 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1
559 sed -i "/${module}.*\.ko:/d" modules.dep.temp
560 done
561
Wanwei Jiang571dde62022-11-17 14:37:41 +0800562 if [[ -n ${ANDROID_PROJECT} ]]; then
563 cp modules.dep.temp modules_recovery.dep.temp
564 cp modules.dep.temp1 modules_recovery.dep.temp1
565 fi
566
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800567 for module in ${VENDOR_MODULES_LOAD_FIRST_LIST[@]}; do
568 echo VENDOR_MODULES_LOAD_FIRST_LIST: $module
569 sed -n "/${module}:/p" modules.dep.temp
570 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1
571 sed -i "/${module}:/d" modules.dep.temp
572 sed -n "/${module}.*\.ko:/p" modules.dep.temp
573 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1
574 sed -i "/${module}.*\.ko:/d" modules.dep.temp
wanwei.jiangb12abc82021-12-25 22:17:10 +0800575 done
576
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800577 if [ -f modules.dep.temp2 ]; then
578 rm modules.dep.temp2
579 fi
580 touch modules.dep.temp2
581 for module in ${VENDOR_MODULES_LOAD_LAST_LIST[@]}; do
582 echo VENDOR_MODULES_LOAD_FIRST_LIST: $module
583 sed -n "/${module}:/p" modules.dep.temp
584 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp2
585 sed -i "/${module}:/d" modules.dep.temp
586 sed -n "/${module}.*\.ko:/p" modules.dep.temp
587 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp2
588 sed -i "/${module}.*\.ko:/d" modules.dep.temp
589 done
590
591 cat modules.dep.temp >> modules.dep.temp1
592 cat modules.dep.temp2 >> modules.dep.temp1
593
wanwei.jiangb12abc82021-12-25 22:17:10 +0800594 cp modules.dep.temp1 modules.dep
595 rm modules.dep.temp
596 rm modules.dep.temp1
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800597 rm modules.dep.temp2
Wanwei Jiang571dde62022-11-17 14:37:41 +0800598
599 if [[ -n ${ANDROID_PROJECT} ]]; then
600 for module in ${RECOVERY_MODULES_LOAD_LIST[@]}; do
601 echo RECOVERY_MODULES_LOAD_LIST: $module
602 sed -n "/${module}:/p" modules_recovery.dep.temp
603 sed -n "/${module}:/p" modules_recovery.dep.temp >> modules_recovery.dep.temp1
604 sed -i "/${module}:/d" modules_recovery.dep.temp
605 sed -n "/${module}.*\.ko:/p" modules_recovery.dep.temp
606 sed -n "/${module}.*\.ko:/p" modules_recovery.dep.temp >> modules_recovery.dep.temp1
607 sed -i "/${module}.*\.ko:/d" modules_recovery.dep.temp
608 done
609
610 cat modules_recovery.dep.temp >> modules_recovery.dep.temp1
611
612 cp modules_recovery.dep.temp1 modules_recovery.dep
613 rm modules_recovery.dep.temp
614 rm modules_recovery.dep.temp1
615 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800616}
617
Wanwei Jiang571dde62022-11-17 14:37:41 +0800618create_ramdisk_vendor_recovery() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800619 install_temp=$1
Wanwei Jiang571dde62022-11-17 14:37:41 +0800620 if [[ -n ${ANDROID_PROJECT} ]]; then
621 recovery_install_temp=$2
622 fi
Wanwei Jiang9173e462022-09-29 00:58:33 +0800623 ramdisk_module_i=${#RAMDISK_MODULES_LOAD_LIST[@]}
624 while [ ${ramdisk_module_i} -gt 0 ]; do
625 let ramdisk_module_i--
626 echo ramdisk_module_i=$ramdisk_module_i ${RAMDISK_MODULES_LOAD_LIST[${ramdisk_module_i}]}
627 if [[ `grep "${RAMDISK_MODULES_LOAD_LIST[${ramdisk_module_i}]}" ${install_temp}` ]]; then
628 last_ramdisk_module=${RAMDISK_MODULES_LOAD_LIST[${ramdisk_module_i}]}
629 break;
630 fi
631 done
632 # last_ramdisk_module=${RAMDISK_MODULES_LOAD_LIST[${#RAMDISK_MODULES_LOAD_LIST[@]}-1]}
qinglin.libce54712023-05-08 13:56:31 +0800633 if [[ -n ${last_ramdisk_module} ]]; then
634 last_ramdisk_module_line=`sed -n "/${last_ramdisk_module}/=" ${install_temp}`
635 for line in ${last_ramdisk_module_line}; do
636 ramdisk_last_line=${line}
637 done
638 else
639 ramdisk_last_line=1
640 fi
wanwei.jiangf73b2202022-07-23 16:00:44 +0800641 export ramdisk_last_line
Wanwei Jiang571dde62022-11-17 14:37:41 +0800642
643 if [[ -n ${ANDROID_PROJECT} ]]; then
644 recovery_module_i=${#RECOVERY_MODULES_LOAD_LIST[@]}
qinglin.lidba324f2023-03-02 19:56:21 +0800645 #when RECOVERY_MODULES_LOAD_LIST is NULL
646 if [ ${#RECOVERY_MODULES_LOAD_LIST[@]} -eq 0 ]; then
647 last_recovery_module=${last_ramdisk_module}
648 fi
Wanwei Jiang571dde62022-11-17 14:37:41 +0800649 while [ ${recovery_module_i} -gt 0 ]; do
650 let recovery_module_i--
651 echo recovery_module_i=$recovery_module_i ${RECOVERY_MODULES_LOAD_LIST[${recovery_module_i}]}
652 if [[ `grep "${RECOVERY_MODULES_LOAD_LIST[${recovery_module_i}]}" ${recovery_install_temp}` ]]; then
653 last_recovery_module=${RECOVERY_MODULES_LOAD_LIST[${recovery_module_i}]}
654 break;
655 fi
656 done
657 # last_recovery_module=${RECOVERY_MODULES_LOAD_LIST[${#RECOVERY_MODULES_LOAD_LIST[@]}-1]}
qinglin.libce54712023-05-08 13:56:31 +0800658 if [[ -n ${last_recovery_module} ]]; then
659 last_recovery_module_line=`sed -n "/${last_recovery_module}/=" ${recovery_install_temp}`
660 for line in ${last_recovery_module_line}; do
661 recovery_last_line=${line}
662 done
663 else
664 recovery_last_line=1
665 fi
Wanwei Jiang571dde62022-11-17 14:37:41 +0800666 sed -n "${ramdisk_last_line},${recovery_last_line}p" ${recovery_install_temp} > recovery_install.sh
qinglin.libce54712023-05-08 13:56:31 +0800667 if [[ -n ${last_ramdisk_module} ]]; then
668 sed -i "1d" recovery_install.sh
669 fi
Wanwei Jiang571dde62022-11-17 14:37:41 +0800670 mkdir recovery
671 cat recovery_install.sh | cut -d ' ' -f 2 > recovery/recovery_modules.order
qinglin.lidba324f2023-03-02 19:56:21 +0800672 if [ ${#RECOVERY_MODULES_LOAD_LIST[@]} -ne 0 ]; then
673 cat recovery_install.sh | cut -d ' ' -f 2 | xargs cp -t recovery/
674 fi
Wanwei Jiang571dde62022-11-17 14:37:41 +0800675 sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' recovery_install.sh
676 echo "echo Install recovery modules success!" >> recovery_install.sh
677 chmod 755 recovery_install.sh
678 mv recovery_install.sh recovery/
679 fi
680
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800681 head -n ${ramdisk_last_line} ${install_temp} > ramdisk_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800682 mkdir ramdisk
wanwei.jiangf73b2202022-07-23 16:00:44 +0800683 cat ramdisk_install.sh | cut -d ' ' -f 2 > ramdisk/ramdisk_modules.order
wanwei.jiang50759e12022-03-24 12:36:17 +0800684 cat ramdisk_install.sh | cut -d ' ' -f 2 | xargs mv -t ramdisk/
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800685
qinglin.lie5b951e2022-06-07 16:13:44 +0800686 sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' ramdisk_install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800687 echo "echo Install ramdisk modules success!" >> ramdisk_install.sh
688 chmod 755 ramdisk_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800689 mv ramdisk_install.sh ramdisk/
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800690
691 file_last_line=`sed -n "$=" ${install_temp}`
692 let line=${file_last_line}-${ramdisk_last_line}
693 tail -n ${line} ${install_temp} > vendor_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800694 mkdir vendor
wanwei.jiangf73b2202022-07-23 16:00:44 +0800695 cat vendor_install.sh | cut -d ' ' -f 2 > vendor/vendor_modules.order
wanwei.jiang50759e12022-03-24 12:36:17 +0800696 cat vendor_install.sh | cut -d ' ' -f 2 | xargs mv -t vendor/
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800697
qinglin.lie5b951e2022-06-07 16:13:44 +0800698 sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' vendor_install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800699 echo "echo Install vendor modules success!" >> vendor_install.sh
700 chmod 755 vendor_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800701 mv vendor_install.sh vendor/
wanwei.jiangb12abc82021-12-25 22:17:10 +0800702}
703
wanwei.jiang612a8882021-11-23 17:12:23 +0800704function modules_install() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800705 arg1=$1
706
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800707 if [[ ! -f ${MODULES_SEQUENCE_LIST} ]]; then
708 MODULES_SEQUENCE_LIST=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list
709 fi
710 source ${MODULES_SEQUENCE_LIST}
711
Wanwei Jiang2218b892023-03-17 17:31:21 +0800712 export OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR:-$(readlink -m ${COMMON_OUT_DIR}/amlogic)}
713 echo $OUT_AMLOGIC_DIR
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800714 rm -rf ${OUT_AMLOGIC_DIR}
715 mkdir -p ${OUT_AMLOGIC_DIR}
716 mkdir -p ${OUT_AMLOGIC_DIR}/modules
717 mkdir -p ${OUT_AMLOGIC_DIR}/ext_modules
Wanwei Jiangae4d7c12023-02-17 19:22:04 +0800718 mkdir -p ${OUT_AMLOGIC_DIR}/symbols
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800719
Wanwei Jiang2218b892023-03-17 17:31:21 +0800720 if [[ ${BAZEL} == "1" ]]; then
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800721 BAZEL_OUT=bazel-out/
Wanwei Jiang0df84602023-05-05 14:40:42 +0800722 while read module
723 do
Wanwei Jiang475245b2023-05-10 21:06:52 +0800724 module_name=${module##*/}
Wanwei Jiang16554d02023-07-14 17:01:00 +0800725 if [[ -z ${ANDROID_PROJECT} || `echo ${module} | grep "^kernel\/"` ]]; then
Wanwei Jiang0df84602023-05-05 14:40:42 +0800726 if [[ -f ${DIST_DIR}/${module_name} ]]; then
727 cp ${DIST_DIR}/${module_name} ${OUT_AMLOGIC_DIR}/modules
728 else
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800729 module=`find ${BAZEL_OUT} -name ${module_name} | grep "amlogic_modules_install"`
Wanwei Jiang0df84602023-05-05 14:40:42 +0800730 cp ${module} ${OUT_AMLOGIC_DIR}/modules
731 fi
732 elif [[ `echo ${module} | grep "^extra\/"` ]]; then
Wanwei Jiang16554d02023-07-14 17:01:00 +0800733 module=${module#*/}
734 local match=
735 for ext_module in ${EXT_MODULES_ANDROID_AUTO_LOAD}; do
736 if [[ "${module}" =~ "${ext_module}" ]]; then
737 match=1
738 break
739 fi
740 done
741 if [[ ${match} == 1 ]]; then
742 cp ${DIST_DIR}/${module_name} ${OUT_AMLOGIC_DIR}/modules
743 else
744 cp ${DIST_DIR}/${module_name} ${OUT_AMLOGIC_DIR}/ext_modules
745 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800746 else
Wanwei Jiang0df84602023-05-05 14:40:42 +0800747 echo "warning unrecognized module: ${module}"
Wanwei Jiang2218b892023-03-17 17:31:21 +0800748 fi
Wanwei Jiang0df84602023-05-05 14:40:42 +0800749 done < ${DIST_DIR}/modules.load
Wanwei Jiang2218b892023-03-17 17:31:21 +0800750
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800751 dep_file=`find ${BAZEL_OUT} -name *.dep | grep "amlogic"`
Wanwei Jiang2218b892023-03-17 17:31:21 +0800752 cp ${dep_file} ${OUT_AMLOGIC_DIR}/modules/full_modules.dep
Wanwei Jiang16554d02023-07-14 17:01:00 +0800753 if [[ -n ${ANDROID_PROJECT} ]]; then
754 grep -E "^kernel\/" ${dep_file} > ${OUT_AMLOGIC_DIR}/modules/modules.dep
755 for ext_module in ${EXT_MODULES_ANDROID_AUTO_LOAD}; do
756 cat ${dep_file} | cut -d ':' -f 1 | grep -n "${ext_module}" | cut -d ':' -f 1 | while read line; do
757 sed -n ${line}p ${dep_file} >> ${OUT_AMLOGIC_DIR}/modules/modules.dep
758 done
759 done
760
761 touch ${module} ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800762 for order_file in `find ${BAZEL_OUT} -name "modules.order.*" | grep "amlogic"`; do
Wanwei Jiang16554d02023-07-14 17:01:00 +0800763 order_file_dir=${order_file#*/extra/}
764 order_file_dir=${order_file_dir%/modules.order.*}
765 if [[ ! "${EXT_MODULES_ANDROID_AUTO_LOAD}" =~ "${order_file_dir}" ]]; then
766 echo "# ${order_file}" >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
767 cat ${order_file} >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
768 echo >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
769 fi
770 done
771 else
772 cp ${dep_file} ${OUT_AMLOGIC_DIR}/modules/modules.dep
773 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800774 else
775 local MODULES_ROOT_DIR=$(echo ${MODULES_STAGING_DIR}/lib/modules/*)
776 pushd ${MODULES_ROOT_DIR}
777 local common_drivers=${COMMON_DRIVERS_DIR##*/}
778 local modules_list=$(find -type f -name "*.ko")
779 for module in ${modules_list}; do
780 if [[ -n ${ANDROID_PROJECT} ]]; then # copy internal build modules
781 if [[ `echo ${module} | grep -E "\.\/kernel\/|\/${common_drivers}\/"` ]]; then
782 cp ${module} ${OUT_AMLOGIC_DIR}/modules/
783 else
Wanwei Jiang16554d02023-07-14 17:01:00 +0800784 local match=
785 for ext_module in ${EXT_MODULES_ANDROID_AUTO_LOAD}; do
786 if [[ "${module}" =~ "${ext_module}" ]]; then
787 match=1
788 break
789 fi
790 done
791 if [[ ${match} == 1 ]]; then
792 cp ${module} ${OUT_AMLOGIC_DIR}/modules/
793 else
794 cp ${module} ${OUT_AMLOGIC_DIR}/ext_modules/
795 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800796 fi
Wanwei Jiang16554d02023-07-14 17:01:00 +0800797 else
Wanwei Jiang2218b892023-03-17 17:31:21 +0800798 cp ${module} ${OUT_AMLOGIC_DIR}/modules/
799 fi
800 done
801
802 if [[ -n ${ANDROID_PROJECT} ]]; then # internal build modules
803 grep -E "^kernel\/|^${common_drivers}\/" modules.dep > ${OUT_AMLOGIC_DIR}/modules/modules.dep
Wanwei Jiang16554d02023-07-14 17:01:00 +0800804 dep_file=modules.dep
805 for ext_module in ${EXT_MODULES_ANDROID_AUTO_LOAD}; do
806 cat ${dep_file} | cut -d ':' -f 1 | grep -n "${ext_module}" | cut -d ':' -f 1 | while read line; do
807 sed -n ${line}p ${dep_file} >> ${OUT_AMLOGIC_DIR}/modules/modules.dep
808 done
809 done
Wanwei Jiang2218b892023-03-17 17:31:21 +0800810 else # all modules, include external modules
811 cp modules.dep ${OUT_AMLOGIC_DIR}/modules
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800812 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800813 popd
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800814 fi
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800815 pushd ${OUT_AMLOGIC_DIR}/modules
wanwei.jiang612a8882021-11-23 17:12:23 +0800816 sed -i 's#[^ ]*/##g' modules.dep
817
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800818 adjust_sequence_modules_loading "${arg1[*]}"
wanwei.jiangb12abc82021-12-25 22:17:10 +0800819
wanwei.jiang5c8d2b62021-11-26 20:36:33 +0800820 touch __install.sh
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800821 touch modules.order
wanwei.jiang612a8882021-11-23 17:12:23 +0800822 for loop in `cat modules.dep | sed 's/:.*//'`; do
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800823 echo $loop >> modules.order
Wanwei Jiang16554d02023-07-14 17:01:00 +0800824 [[ `grep $loop __install.sh` ]] && continue
825 mod_probe $loop
wanwei.jiang612a8882021-11-23 17:12:23 +0800826 echo insmod $loop >> __install.sh
827 done
828
829 cat __install.sh | awk ' {
830 if (!cnt[$2]) {
831 print $0;
832 cnt[$2]++;
833 }
834 }' > __install.sh.tmp
835
Wanwei Jiangbf119d22022-10-27 09:49:49 +0800836 cp modules.order modules.order.back
837 cut -d ' ' -f 2 __install.sh.tmp > modules.order
Wanwei Jiang571dde62022-11-17 14:37:41 +0800838
839 if [[ -n ${ANDROID_PROJECT} ]]; then
840 touch __install_recovery.sh
841 touch modules_recovery.order
842 for loop in `cat modules_recovery.dep | sed 's/:.*//'`; do
Wanwei Jiang571dde62022-11-17 14:37:41 +0800843 echo $loop >> modules_recovery.order
Wanwei Jiang16554d02023-07-14 17:01:00 +0800844 [[ `grep $loop __install_recovery.sh` ]] && continue
845 mod_probe_recovery $loop
Wanwei Jiang571dde62022-11-17 14:37:41 +0800846 echo insmod $loop >> __install_recovery.sh
847 done
848
849 cat __install_recovery.sh | awk ' {
850 if (!cnt[$2]) {
851 print $0;
852 cnt[$2]++;
853 }
854 }' > __install_recovery.sh.tmp
855
Wanwei Jiang16554d02023-07-14 17:01:00 +0800856 cp modules_recovery.order modules_recovery.order.back
Wanwei Jiang571dde62022-11-17 14:37:41 +0800857 cut -d ' ' -f 2 __install_recovery.sh.tmp > modules_recovery.order
858 fi
859 create_ramdisk_vendor_recovery __install.sh.tmp __install_recovery.sh.tmp
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800860
Dezhen Wang124ad7d2023-02-06 15:35:14 +0800861 if [[ -n ${MANUAL_INSMOD_MODULE} ]]; then
862 install_file=manual_install.sh
863 else
864 install_file=install.sh
865 fi
866 echo "#!/bin/sh" > ${install_file}
867 echo "cd ramdisk" >> ${install_file}
868 echo "./ramdisk_install.sh" >> ${install_file}
869 echo "cd ../vendor" >> ${install_file}
870 echo "./vendor_install.sh" >> ${install_file}
871 echo "cd ../" >> ${install_file}
872 chmod 755 ${install_file}
wanwei.jiang612a8882021-11-23 17:12:23 +0800873
874 echo "/modules/: all `wc -l modules.dep | awk '{print $1}'` modules."
Wanwei Jianga5977bd2022-08-24 22:43:40 +0800875 rm __install.sh __install.sh.tmp
wanwei.jiang612a8882021-11-23 17:12:23 +0800876
Wanwei Jiang571dde62022-11-17 14:37:41 +0800877 if [[ -n ${ANDROID_PROJECT} ]]; then
878 rm __install_recovery.sh __install_recovery.sh.tmp
879 fi
880
wanwei.jiang236e9a32021-12-07 16:34:14 +0800881 popd
Wanwei Jiangae4d7c12023-02-17 19:22:04 +0800882
Wanwei Jiang2218b892023-03-17 17:31:21 +0800883 if [[ ${BAZEL} == "1" ]]; then
884 cp ${DIST_DIR}/vmlinux ${OUT_AMLOGIC_DIR}/symbols
885
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800886 find ${BAZEL_OUT} -name *.ko | grep "unstripped" | while read module; do
Wanwei Jiang2218b892023-03-17 17:31:21 +0800887 cp ${module} ${OUT_AMLOGIC_DIR}/symbols
888 chmod +w ${OUT_AMLOGIC_DIR}/symbols/$(basename ${module})
889 done
890 chmod -w ${OUT_AMLOGIC_DIR}/symbols/*.ko
891 else
892 cp ${OUT_DIR}/vmlinux ${OUT_AMLOGIC_DIR}/symbols
893 find ${OUT_DIR} -type f -name "*.ko" -exec cp {} ${OUT_AMLOGIC_DIR}/symbols \;
894 for ext_module in ${EXT_MODULES}; do
895 find ${COMMON_OUT_DIR}/${ext_module} -type f -name "*.ko" -exec cp {} ${OUT_AMLOGIC_DIR}/symbols \;
896 done
897 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800898}
wanwei.jiang236e9a32021-12-07 16:34:14 +0800899export -f modules_install
wanwei.jiang612a8882021-11-23 17:12:23 +0800900
Wanwei Jiang2218b892023-03-17 17:31:21 +0800901function rename_external_module_name() {
902 local external_coppied
Wanwei Jiang92c89432023-05-15 23:57:16 +0800903 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 +0800904 target_module_name=`echo ${module_line%%:*} | sed '/^#/d;/^$/d'`
905 modules_name=`echo ${module_line##:*} | sed '/^#/d;/^$/d'`
906 [[ -f ${OUT_AMLOGIC_DIR}/ext_modules/${target_module_name} ]] && external_coppied=1
Wanwei Jiang16554d02023-07-14 17:01:00 +0800907 echo target_module_name=$target_module_name modules_name=$modules_name external_coppied=$external_coppied
Wanwei Jiang2218b892023-03-17 17:31:21 +0800908 for module in ${modules_name}; do
909 echo module=$module
910 if [[ -f ${OUT_AMLOGIC_DIR}/ext_modules/${module} ]]; then
911 if [[ -z ${external_coppied} ]]; then
912 cp ${OUT_AMLOGIC_DIR}/ext_modules/${module} ${OUT_AMLOGIC_DIR}/ext_modules/${target_module_name}
913 external_coppied=1
914 fi
915 rm -f ${OUT_AMLOGIC_DIR}/ext_modules/${module}
916 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800917 done
918 external_coppied=
Wanwei Jiang2218b892023-03-17 17:31:21 +0800919 done
920}
921export -f rename_external_module_name
922
Dezhen Wang5ad119c2023-05-04 15:07:49 +0800923# function rebuild_rootfs can rebuild the rootfs if rootfs_base.cpio.gz.uboot exist
wanwei.jiang612a8882021-11-23 17:12:23 +0800924function rebuild_rootfs() {
Wanwei Jiang2218b892023-03-17 17:31:21 +0800925 echo
926 echo "========================================================"
927 if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then
928 echo "Rebuild rootfs in order to install modules!"
929 else
930 echo "There's no file ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot, so don't rebuild rootfs!"
931 return
932 fi
933
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800934 pushd ${OUT_AMLOGIC_DIR}
wanwei.jiang612a8882021-11-23 17:12:23 +0800935
Lei Zhang475c17b2022-03-03 11:08:50 +0800936 local ARCH=arm64
937 if [[ -n $1 ]]; then
938 ARCH=$1
939 fi
940
wanwei.jiang612a8882021-11-23 17:12:23 +0800941 rm rootfs -rf
942 mkdir rootfs
Wanwei Jiang2218b892023-03-17 17:31:21 +0800943 cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot rootfs
wanwei.jiang612a8882021-11-23 17:12:23 +0800944 cd rootfs
945 dd if=rootfs_base.cpio.gz.uboot of=rootfs_base.cpio.gz bs=64 skip=1
946 gunzip rootfs_base.cpio.gz
947 mkdir rootfs
948 cd rootfs
dongqing.li6fd83502023-06-15 09:59:40 +0800949 fakeroot cpio -i -F ../rootfs_base.cpio
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800950 if [ -d ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer ]; then
951 cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer . -rf
qinglin.li3c25dbb2022-01-14 11:23:10 +0800952 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800953 cp -rf ../../modules .
wanwei.jiang8abddcc2022-03-16 21:18:48 +0800954
dongqing.li6fd83502023-06-15 09:59:40 +0800955 find . | fakeroot cpio -o -H newc | gzip > ../rootfs_new.cpio.gz
wanwei.jiang612a8882021-11-23 17:12:23 +0800956 cd ../
Lei Zhang475c17b2022-03-03 11:08:50 +0800957 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 +0800958 mv rootfs_new.cpio.gz.uboot ../
959 cd ../
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800960 cp rootfs_new.cpio.gz.uboot ${DIST_DIR}
wanwei.jiang612a8882021-11-23 17:12:23 +0800961
962 popd
963}
964export -f rebuild_rootfs
wanwei.jiang403c9942021-11-30 18:29:02 +0800965
Dezhen Wang5ad119c2023-05-04 15:07:49 +0800966# function check_undefined_symbol can check the dependence among the modules
967# parameter:
968# --modules_depend
wanwei.jiang403c9942021-11-30 18:29:02 +0800969function check_undefined_symbol() {
Wanwei Jiang2218b892023-03-17 17:31:21 +0800970 if [[ ${MODULES_DEPEND} != "1" ]]; then
971 return
972 fi
973
974 echo "========================================================"
975 echo "print modules depend"
976
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800977 pushd ${OUT_AMLOGIC_DIR}/modules
wanwei.jiang403c9942021-11-30 18:29:02 +0800978 echo
979 echo "========================================================"
980 echo "Functions or variables not defined in this module refer to which module."
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800981 if [[ -n ${LLVM} ]]; then
982 compile_tool=${ROOT_DIR}/${CLANG_PREBUILT_BIN}/llvm-
983 elif [[ -n ${CROSS_COMPILE} ]]; then
984 compile_tool=${CROSS_COMPILE}
985 else
986 echo "can't find compile tool"
987 fi
Wanwei Jiang0a74fb12022-12-09 16:27:40 +0800988 ${compile_tool}nm ${DIST_DIR}/vmlinux | grep -E " T | D | B | R | W "> vmlinux_T.txt
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800989 # cat __install.sh | grep "insmod" | cut -d ' ' -f 2 > module_list.txt
990 cat ramdisk/ramdisk_install.sh | grep "insmod" | cut -d ' ' -f 2 > module_list.txt
991 cat vendor/vendor_install.sh | grep "insmod" | cut -d ' ' -f 2 >> module_list.txt
992 cp ramdisk/*.ko .
993 cp vendor/*.ko .
wanwei.jiang403c9942021-11-30 18:29:02 +0800994 while read LINE
995 do
996 echo ${LINE}
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800997 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 +0800998 do
999 #echo ${U}
1000 U_v=`grep -w ${U} vmlinux_T.txt`
1001 in_vmlinux=0
1002 if [ -n "${U_v}" ];
1003 then
wanwei.jiangd7b29ef2021-12-01 19:59:41 +08001004 #printf "\t%-50s <== vmlinux\n" ${U}
wanwei.jiang403c9942021-11-30 18:29:02 +08001005 in_vmlinux=1
1006 continue
1007 fi
1008 in_module=0
1009 MODULE=
1010 while read LINE1
1011 do
wanwei.jiang2c818dc2022-03-24 17:48:00 +08001012 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 +08001013 if [ -n "${U_m}" ];
1014 then
1015 in_module=1
1016 MODULE=${LINE1}
1017 fi
1018 done < module_list.txt
1019 if [ ${in_module} -eq "1" ];
1020 then
1021 printf "\t%-50s <== %s\n" ${U} ${MODULE}
1022 continue
1023 else
1024 printf "\t%-50s <== none\n" ${U}
1025 fi
1026 done
1027 echo
1028 echo
1029 done < module_list.txt
1030 rm vmlinux_T.txt
1031 rm module_list.txt
wanwei.jiang2c818dc2022-03-24 17:48:00 +08001032 rm *.ko
wanwei.jiang403c9942021-11-30 18:29:02 +08001033 popd
1034}
1035export -f check_undefined_symbol
Dezhen Wangd40fa552023-04-11 16:13:27 +08001036
1037function reorganized_abi_symbol_list_file() { # delete the extra information but symbol
1038 cat $@ | sed '/^$/d' >> ${symbol_tmp} # remove blank lines
1039 sed -i '/^\[/d' ${symbol_tmp} # remove the title
1040 sed -i '/^\#/d' ${symbol_tmp} # remove the comment
1041}
1042export -f reorganized_abi_symbol_list_file
1043
1044function abi_symbol_list_detect () { # detect symbol information that should be submitted or fix
Dezhen Wang3e94b292023-07-10 20:14:57 +08001045 if [[ "${FULL_KERNEL_VERSION}" = "common13-5.15" ]]; then
1046 symbol_file1=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic
1047 symbol_file2=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.10
1048 symbol_file3=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.debug
1049 symbol_file4=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.illegal
1050 else
1051 symbol_file1=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic
1052 symbol_file2=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic.10
1053 symbol_file3=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic.debug
1054 symbol_file4=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic.illegal
1055 fi
Dezhen Wangd40fa552023-04-11 16:13:27 +08001056
1057 file_list=("${symbol_file1} ${symbol_file2} ${symbol_file3} ${symbol_file4}")
1058 for file in ${file_list}
1059 do
1060 local symbol_tmp=`mktemp tmp.XXXXXXXXXXXX`
1061 reorganized_abi_symbol_list_file "${file}"
1062
1063 if [[ -s ${symbol_tmp} ]]; then
1064 if [[ ${file} =~ abi_gki_aarch64_amlogic.illegal ]]; then
1065 echo "WARNING: The symbols in ${file} are illegal, please deal with them as soon as possible!!!"
1066 else
1067 echo "WARNING: The symbols in ${file} should be submit to google!!!"
1068 fi
1069 cat ${symbol_tmp}
1070 echo -e "\n------------------------------------------------------------"
1071 fi
1072 rm ${symbol_tmp}
1073 done
1074}
1075export -f abi_symbol_list_detect
1076
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001077# adjust_config_action concerns three types of cmd:
1078# parameters:
1079# --menuconfig: make menuconfig manually based on different gki standard
1080# --basicconfig: only config kernel with google original gki_defconfig as base
1081# --check_defconfig: contrast the defconfig generated in out directory with gki_defconfig and show the difference
1082function adjust_config_action () {
1083 if [[ -n ${MENUCONFIG} ]] || [[ -n ${BASICCONFIG} ]] || [[ ${CHECK_DEFCONFIG} -eq "1" ]]; then
1084 # ${ROOT_DIR}/${BUILD_DIR}/config.sh menuconfig
1085 HERMETIC_TOOLCHAIN=0
Dezhen Wang2edb5232023-07-06 14:15:33 +08001086
1087 if [[ "${FULL_KERNEL_VERSION}" = "common13-5.15" ]]; then
1088 source "${ROOT_DIR}/${BUILD_DIR}/build_utils.sh"
1089 source "${ROOT_DIR}/${BUILD_DIR}/_setup_env.sh"
1090 else
1091 source ${ROOT_DIR}/${BUILD_CONFIG}
1092 export COMMON_OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out${OUT_DIR_SUFFIX}/${BRANCH}})
1093 export OUT_DIR=$(readlink -m ${COMMON_OUT_DIR}/${KERNEL_DIR})
1094 fi
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001095
1096 orig_config=$(mktemp)
1097 orig_defconfig=$(mktemp)
1098 out_config="${OUT_DIR}/.config"
1099 out_defconfig="${OUT_DIR}/defconfig"
1100 changed_config=$(mktemp)
1101 changed_defconfig=$(mktemp)
1102
1103 if [[ -n ${BASICCONFIG} ]]; then # config kernel with gki_defconfig or make menuconfig based on it
1104 set -x
1105 defconfig_name=`basename ${GKI_BASE_CONFIG}`
1106 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${defconfig_name})
1107 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1108 cp ${out_config} ${orig_config}
1109 cp ${out_defconfig} ${orig_defconfig}
1110 if [ "${BASICCONFIG}" = "m" ]; then # make menuconfig based on gki_defconfig
1111 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" menuconfig)
1112 fi
1113 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1114 ${KERNEL_DIR}/scripts/diffconfig ${orig_config} ${out_config} > ${changed_config}
1115 ${KERNEL_DIR}/scripts/diffconfig ${orig_defconfig} ${out_defconfig} > ${changed_defconfig}
1116 if [ "${ARCH}" = "arm" ]; then
1117 cp ${out_defconfig} ${GKI_BASE_CONFIG}
1118 fi
1119 set +x # show the difference between the gki_defconfig and the config after make menuconfig
1120 echo
1121 echo "========================================================"
1122 echo "==================== .config diff ===================="
1123 cat ${changed_config}
1124 echo "==================== defconfig diff ===================="
1125 cat ${changed_defconfig}
1126 echo "========================================================"
1127 echo
1128 elif [[ ${CHECK_DEFCONFIG} -eq "1" ]]; then # compare the defconfig generated in out directory with gki_defconfig
1129 set -x
1130 pre_defconfig_cmds
1131 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
1132 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig) # export the defconfig to out directory
1133 diff -u ${ROOT_DIR}/${GKI_BASE_CONFIG} ${OUT_DIR}/defconfig
1134 post_defconfig_cmds
1135 set +x
1136 else # make menuconfig based on config with different gki standard
1137 set -x
1138 pre_defconfig_cmds
1139 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
1140 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1141 cp ${out_config} ${orig_config}
1142 cp ${out_defconfig} ${orig_defconfig}
1143 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" menuconfig)
1144 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1145 ${KERNEL_DIR}/scripts/diffconfig ${orig_config} ${out_config} > ${changed_config}
1146 ${KERNEL_DIR}/scripts/diffconfig ${orig_defconfig} ${out_defconfig} > ${changed_defconfig}
1147 post_defconfig_cmds
1148 set +x
1149 echo
1150 echo "========================================================"
1151 echo "if the config follows GKI2.0, please add it to the file amlogic_gki.fragment manually"
1152 echo "if the config follows GKI1.0 optimize, please add it to the file amlogic_gki.10 manually"
1153 echo "if the config follows GKI1.0 debug, please add it to the file amlogic_gki.debug manually"
1154 echo "==================== .config diff ===================="
1155 cat ${changed_config}
1156 echo "==================== defconfig diff ===================="
1157 cat ${changed_defconfig}
1158 echo "========================================================"
1159 echo
1160 fi
1161 rm -f ${orig_config} ${changed_config} ${orig_defconfig} ${changed_defconfig}
1162 exit
1163 fi
1164}
1165export -f adjust_config_action
1166
Dezhen Wangc5c95c32023-07-09 23:14:12 +08001167if [[ "${FULL_KERNEL_VERSION}" != "common13-5.15" ]]; then
1168 function rel_path() {
1169 echo "WARNING: rel_path is deprecated. For Kleaf builds, use 'realpath $1 --relative-to $2' instead." >&2
1170 ${ROOT_DIR}/build/kernel/build-tools/path/linux-x86/realpath "$1" --relative-to="$2"
1171 }
1172fi
1173
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001174# function build_part_of_kernel can only build part of kernel such as image modules or dtbs
1175# parameter:
1176# --image: only build image
1177# --modules: only build kernel modules
1178# --dtbs: only build dtbs
1179function build_part_of_kernel () {
1180 if [[ -n ${IMAGE} ]] || [[ -n ${MODULES} ]] || [[ -n ${DTB_BUILD} ]]; then
1181 old_path=${PATH}
Dezhen Wangc5c95c32023-07-09 23:14:12 +08001182 if [[ "${FULL_KERNEL_VERSION}" = "common13-5.15" ]]; then
1183 source "${ROOT_DIR}/${BUILD_DIR}/build_utils.sh"
1184 source "${ROOT_DIR}/${BUILD_DIR}/_setup_env.sh"
1185 else
1186 source ${ROOT_DIR}/${BUILD_CONFIG}
1187 export COMMON_OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out${OUT_DIR_SUFFIX}/${BRANCH}})
1188 export OUT_DIR=$(readlink -m ${COMMON_OUT_DIR}/${KERNEL_DIR})
1189 export DIST_DIR=$(readlink -m ${DIST_DIR:-${COMMON_OUT_DIR}/dist})
1190 tool_args+=("LLVM=1")
1191 tool_args+=("DEPMOD=${DEPMOD}")
1192 fi
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001193
1194 if [[ ! -f ${OUT_DIR}/.config ]]; then
1195 pre_defconfig_cmds
1196 set -x
1197 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
1198 set +x
1199 post_defconfig_cmds
1200 fi
1201
1202 if [[ -n ${IMAGE} ]]; then
1203 set -x
1204 if [ "${ARCH}" = "arm64" ]; then
1205 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) Image)
1206 elif [ "${ARCH}" = "arm" ]; then
1207 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) LOADADDR=0x108000 uImage)
1208 fi
1209 set +x
1210 fi
1211 mkdir -p ${DIST_DIR}
1212 if [[ -n ${DTB_BUILD} ]]; then
1213 set -x
1214 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) dtbs)
1215 set +x
1216 fi
1217 if [[ -n ${MODULES} ]]; then
1218 export MODULES_STAGING_DIR=$(readlink -m ${COMMON_OUT_DIR}/staging)
1219 rm -rf ${MODULES_STAGING_DIR}
1220 mkdir -p ${MODULES_STAGING_DIR}
1221 if [ "${DO_NOT_STRIP_MODULES}" != "1" ]; then
1222 MODULE_STRIP_FLAG="INSTALL_MOD_STRIP=1"
1223 fi
1224 if [[ `grep "CONFIG_AMLOGIC_IN_KERNEL_MODULES=y" ${ROOT_DIR}/${FRAGMENT_CONFIG}` ]]; then
1225 set -x
1226 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) modules)
1227 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} INSTALL_MOD_PATH=${MODULES_STAGING_DIR} "${MAKE_ARGS[@]}" modules_install)
1228 set +x
1229 fi
1230 echo EXT_MODULES=$EXT_MODULES
1231 prepare_module_build
1232 if [[ -z "${SKIP_EXT_MODULES}" ]] && [[ -n "${EXT_MODULES}" ]]; then
1233 echo "========================================================"
1234 echo " Building external modules and installing them into staging directory"
1235 KERNEL_UAPI_HEADERS_DIR=$(readlink -m ${COMMON_OUT_DIR}/kernel_uapi_headers)
1236 for EXT_MOD in ${EXT_MODULES}; do
1237 EXT_MOD_REL=$(rel_path ${ROOT_DIR}/${EXT_MOD} ${KERNEL_DIR})
1238 mkdir -p ${OUT_DIR}/${EXT_MOD_REL}
1239 set -x
1240 make -C ${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1241 O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}"
1242 make -C ${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1243 O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} \
1244 INSTALL_MOD_PATH=${MODULES_STAGING_DIR} \
1245 INSTALL_MOD_DIR="extra/${EXT_MOD}" \
1246 INSTALL_HDR_PATH="${KERNEL_UAPI_HEADERS_DIR}/usr" \
1247 "${MAKE_ARGS[@]}" modules_install
1248 set +x
1249 done
1250 fi
1251 export OUT_AMLOGIC_DIR=$(readlink -m ${COMMON_OUT_DIR}/amlogic)
1252 set -x
1253 extra_cmds
1254 set +x
1255 MODULES=$(find ${MODULES_STAGING_DIR} -type f -name "*.ko")
1256 cp -p ${MODULES} ${DIST_DIR}
1257
1258 new_path=${PATH}
1259 PATH=${old_path}
1260 echo "========================================================"
1261 if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then
1262 echo "Rebuild rootfs in order to install modules!"
1263 rebuild_rootfs ${ARCH}
1264 else
1265 echo "There's no file ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot, so don't rebuild rootfs!"
1266 fi
1267 PATH=${new_path}
1268 fi
1269 if [ -n "${DTS_EXT_DIR}" ]; then
1270 if [ -d "${ROOT_DIR}/${DTS_EXT_DIR}" ]; then
1271 DTS_EXT_DIR=$(rel_path ${ROOT_DIR}/${DTS_EXT_DIR} ${KERNEL_DIR})
1272 if [ -d ${OUT_DIR}/${DTS_EXT_DIR} ]; then
1273 FILES="$FILES `ls ${OUT_DIR}/${DTS_EXT_DIR}`"
1274 fi
1275 fi
1276 fi
1277 for FILE in ${FILES}; do
1278 if [ -f ${OUT_DIR}/${FILE} ]; then
1279 echo " $FILE"
1280 cp -p ${OUT_DIR}/${FILE} ${DIST_DIR}/
1281 elif [[ "${FILE}" =~ \.dtb|\.dtbo ]] && \
1282 [ -n "${DTS_EXT_DIR}" ] && [ -f "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" ] ; then
1283 # DTS_EXT_DIR is recalculated before to be relative to KERNEL_DIR
1284 echo " $FILE"
1285 cp -p "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" "${DIST_DIR}/"
1286 else
1287 echo " $FILE is not a file, skipping"
1288 fi
1289 done
1290 exit
1291 fi
1292}
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001293export -f build_part_of_kernel
1294
1295function export_env_variable () {
1296 export ABI BUILD_CONFIG LTO KMI_SYMBOL_LIST_STRICT_MODE CHECK_DEFCONFIG MANUAL_INSMOD_MODULE ARCH
qinglin.libce54712023-05-08 13:56:31 +08001297 export KERNEL_DIR COMMON_DRIVERS_DIR BUILD_DIR ANDROID_PROJECT GKI_CONFIG UPGRADE_PROJECT ANDROID_VERSION FAST_BUILD CHECK_GKI_20 DEV_CONFIGS
qinglin.li7cf37c02023-07-04 16:06:04 +08001298 export FULL_KERNEL_VERSION BAZEL PREBUILT_GKI KASAN
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001299
1300 echo ROOT_DIR=$ROOT_DIR
1301 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 +08001302 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}
qinglin.li7cf37c02023-07-04 16:06:04 +08001303 echo FULL_KERNEL_VERSION=${FULL_KERNEL_VERSION} BAZEL=${BAZEL} PREBUILT_GKI=${PREBUILT_GKI} KASAN=${KASAN}
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001304 echo MENUCONFIG=${MENUCONFIG} BASICCONFIG=${BASICCONFIG} IMAGE=${IMAGE} MODULES=${MODULES} DTB_BUILD=${DTB_BUILD}
1305}
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001306export -f export_env_variable
Dezhen Wang850c0d22023-05-31 19:26:20 +08001307
1308function handle_input_parameters () {
1309 VA=
1310 ARGS=()
1311 for i in "$@"
1312 do
1313 case $i in
1314 --arch)
1315 ARCH=$2
1316 VA=1
1317 shift
1318 ;;
1319 --abi)
1320 ABI=1
1321 shift
1322 ;;
1323 --build_config)
1324 BUILD_CONFIG=$2
1325 VA=1
1326 shift
1327 ;;
1328 --lto)
1329 LTO=$2
1330 VA=1
1331 shift
1332 ;;
1333 --symbol_strict)
1334 KMI_SYMBOL_LIST_STRICT_MODE=$2
1335 VA=1
1336 shift
1337 ;;
1338 --menuconfig)
1339 MENUCONFIG=1
1340 shift
1341 ;;
1342 --basicconfig)
1343 if [ "$2" = "m" ] || [ "$2" = "n" ]; then
1344 BASICCONFIG=$2
1345 else
1346 BASICCONFIG="m"
1347 fi
1348 VA=1
1349 shift
1350 ;;
1351 --image)
1352 IMAGE=1
1353 shift
1354 ;;
1355 --modules)
1356 MODULES=1
1357 shift
1358 break
1359 ;;
1360 --dtbs)
1361 DTB_BUILD=1
1362 shift
1363 ;;
1364 --build_dir)
1365 BUILD_DIR=$2
1366 VA=1
1367 shift
1368 ;;
1369 --check_defconfig)
1370 CHECK_DEFCONFIG=1
1371 shift
1372 ;;
1373 --modules_depend)
1374 MODULES_DEPEND=1
1375 shift
1376 ;;
1377 --android_project)
1378 ANDROID_PROJECT=$2
1379 VA=1
1380 shift
1381 ;;
1382 --gki_20)
1383 GKI_CONFIG=gki_20
1384 shift
1385 ;;
1386 --gki_10)
1387 GKI_CONFIG=gki_10
1388 shift
1389 ;;
Dezhen Wang850c0d22023-05-31 19:26:20 +08001390 --fast_build)
1391 FAST_BUILD=1
1392 shift
1393 ;;
1394 --upgrade)
qinglin.li62b23332023-06-25 10:37:41 +08001395 UPGRADE_PROJECT=$2
Dezhen Wang850c0d22023-05-31 19:26:20 +08001396 ANDROID_VERSION=$2
qinglin.li62b23332023-06-25 10:37:41 +08001397 GKI_CONFIG=
Dezhen Wang850c0d22023-05-31 19:26:20 +08001398 VA=1
1399 shift
1400 ;;
1401 --manual_insmod_module)
1402 MANUAL_INSMOD_MODULE=1
1403 shift
1404 ;;
Dezhen Wang850c0d22023-05-31 19:26:20 +08001405 --check_gki_20)
1406 CHECK_GKI_20=1
1407 GKI_CONFIG=gki_20
1408 LTO=none
1409 shift
1410 ;;
1411 --dev_config)
1412 DEV_CONFIGS=$2
1413 VA=1
1414 shift
1415 ;;
Wanwei Jiang0a519f62023-06-30 16:56:28 +08001416 --use_prebuilt_gki)
1417 PREBUILT_GKI=$2
1418 VA=1
Dezhen Wang850c0d22023-05-31 19:26:20 +08001419 shift
1420 ;;
qinglin.li7cf37c02023-07-04 16:06:04 +08001421 --kasan)
1422 KASAN=1
1423 LTO=none
1424 shift
1425 ;;
Dezhen Wang850c0d22023-05-31 19:26:20 +08001426 -h|--help)
1427 show_help
1428 exit 0
1429 ;;
1430 *)
1431 if [[ -n $1 ]];
1432 then
1433 if [[ -z ${VA} ]];
1434 then
1435 ARGS+=("$1")
1436 fi
1437 fi
1438 VA=
1439 shift
1440 ;;
1441 esac
1442 done
1443}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001444export -f handle_input_parameters
1445
1446function set_default_parameters () {
1447 if [ "${ARCH}" = "arm" ]; then
1448 ARGS+=("LOADADDR=0x108000")
1449 else
1450 ARCH=arm64
1451 fi
1452
1453 if [[ -z "${ABI}" ]]; then
1454 ABI=0
1455 fi
1456 if [[ -z "${LTO}" ]]; then
1457 LTO=thin
1458 fi
1459 if [[ -n ${CHECK_GKI_20} && -z ${ANDROID_PROJECT} ]]; then
1460 ANDROID_PROJECT=ohm
1461 fi
1462
1463 if [[ -z "${BUILD_CONFIG}" ]]; then
1464 if [ "${ARCH}" = "arm64" ]; then
1465 BUILD_CONFIG=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic
1466 elif [ "${ARCH}" = "arm" ]; then
1467 BUILD_CONFIG=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic32
1468 fi
1469 fi
1470 if [[ -z "${BUILD_DIR}" ]]; then
1471 BUILD_DIR=build
1472 fi
1473
1474 version_message=$(grep -rn BRANCH= ${KERNEL_DIR}/build.config.constants)
1475 version_message="common${version_message##*android}"
1476 if [[ -n ${FULL_KERNEL_VERSION} ]]; then
1477 if [[ "${FULL_KERNEL_VERSION}" != "${version_message}" ]]; then
1478 echo "kernel version is not match!!"
1479 exit
1480 fi
1481 else
1482 FULL_KERNEL_VERSION=${version_message}
1483 fi
1484
1485 if [[ -z ${BAZEL} ]]; then
qinglin.li62b23332023-06-25 10:37:41 +08001486 [[ "${FULL_KERNEL_VERSION}" != "common13-5.15" && "${ARCH}" == "arm64" ]] && BAZEL=1
Dezhen Wang850c0d22023-05-31 19:26:20 +08001487 fi
1488
1489 auto_patch_to_common_dir
1490
qinglin.lieafebcf2023-06-27 12:48:22 +08001491 if [[ ! -f ${BUILD_DIR}/build_abi.sh && ${BAZEL} == 0 ]]; then
Dezhen Wang850c0d22023-05-31 19:26:20 +08001492 echo "The directory of build does not exist";
1493 exit
1494 fi
1495
1496 ROOT_DIR=$(readlink -f $(dirname $0))
1497 if [[ ! -f ${ROOT_DIR}/${KERNEL_DIR}/init/main.c ]]; then
1498 ROOT_DIR=`pwd`
1499 if [[ ! -f ${ROOT_DIR}/${KERNEL_DIR}/init/main.c ]]; then
1500 echo "the file path of $0 is incorrect"
1501 exit
1502 fi
1503 fi
1504 export ROOT_DIR
1505
1506 CHECK_DEFCONFIG=${CHECK_DEFCONFIG:-0}
1507 MODULES_DEPEND=${MODULES_DEPEND:-0}
1508 if [[ ! -f ${KERNEL_BUILD_VAR_FILE} ]]; then
1509 export KERNEL_BUILD_VAR_FILE=`mktemp /tmp/kernel.XXXXXXXXXXXX`
1510 RM_KERNEL_BUILD_VAR_FILE=1
1511 fi
1512
Dezhen Wang850c0d22023-05-31 19:26:20 +08001513 export CROSS_COMPILE=
1514
1515 if [ "${ABI}" -eq "1" ]; then
1516 export OUT_DIR_SUFFIX="_abi"
1517 else
1518 OUT_DIR_SUFFIX=
1519 fi
1520}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001521export -f set_default_parameters
1522
1523function auto_patch_to_common_dir () {
1524 #first auto patch when param parse end
Dezhen Wang850c0d22023-05-31 19:26:20 +08001525
1526 if [[ -f ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/auto_patch/auto_patch.sh ]]; then
1527 export PATCH_PARM
1528 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/auto_patch/auto_patch.sh ${FULL_KERNEL_VERSION}
Dezhen Wang4e608102023-07-05 18:55:30 +08001529 if [[ $? -ne 0 ]]; then
1530 echo "auto patch error!"
1531 exit 1
1532 fi
Dezhen Wang850c0d22023-05-31 19:26:20 +08001533 fi
1534
1535 if [[ ${ONLY_PATCH} -eq "1" ]]; then
1536 cd ${CURRENT_DIR}
1537 exit
1538 fi
1539}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001540export -f auto_patch_to_common_dir
1541
Dezhen Wang850c0d22023-05-31 19:26:20 +08001542function handle_input_parameters_for_smarthome () {
1543 VA=
1544 ARGS=()
1545 for i in "$@"
1546 do
1547 case $i in
1548 --savedefconfig)
1549 SAVEDEFCONFIG=1
1550 shift
1551 ;;
1552 --menuconfig)
1553 MENUCONFIG=1
1554 shift
1555 ;;
1556 --dtb)
1557 DTB=1
1558 shift
1559 ;;
1560 --manual_insmod_module)
1561 MANUAL_INSMOD_MODULE=1
1562 shift
1563 ;;
1564 --patch)
1565 ONLY_PATCH=1
1566 shift
1567 ;;
1568 -h|--help)
1569 show_help
1570 exit 0
1571 ;;
1572 *)
1573 if [[ -n $1 ]];
1574 then
1575 if [[ -z ${VA} ]];
1576 then
1577 ARGS+=("$1")
1578 fi
1579 fi
1580 VA=
1581 shift
1582 ;;
1583 esac
1584 done
1585}
1586
1587export -f handle_input_parameters_for_smarthome
1588
1589function set_default_parameters_for_smarthome () {
1590 version_message=$(grep -rn BRANCH= ${KERNEL_DIR}/build.config.constants)
1591 version_message="common${version_message##*android}"
1592 if [[ -n ${FULL_KERNEL_VERSION} ]]; then
1593 if [[ "${FULL_KERNEL_VERSION}" != "${version_message}" ]]; then
1594 echo "kernel version is not match!!"
1595 exit
1596 fi
1597 else
1598 FULL_KERNEL_VERSION=${version_message}
1599 fi
1600
1601 tool_args=()
1602 prebuilts_paths=(
1603 CLANG_PREBUILT_BIN
1604 #BUILDTOOLS_PREBUILT_BIN
1605 )
1606 echo CC_CLANG=$CC_CLANG
1607 if [[ $CC_CLANG -eq "1" ]]; then
1608 source ${ROOT_DIR}/${KERNEL_DIR}/build.config.common
1609 if [[ -n "${LLVM}" ]]; then
1610 tool_args+=("LLVM=1")
1611 fi
1612 #if [ -n "${DTC}" ]; then
1613 # tool_args+=("DTC=${DTC}")
1614 #fi
1615 for prebuilt_bin in "${prebuilts_paths[@]}"; do
1616 prebuilt_bin=\${${prebuilt_bin}}
1617 eval prebuilt_bin="${prebuilt_bin}"
1618 if [ -n "${prebuilt_bin}" ]; then
1619 PATH=${PATH//"${ROOT_DIR}\/${prebuilt_bin}:"}
1620 PATH=${ROOT_DIR}/${prebuilt_bin}:${PATH} # add the clang tool to env PATH
1621 fi
1622 done
1623 export PATH
1624 elif [[ -n $CROSS_COMPILE_TOOL ]]; then
1625 export CROSS_COMPILE=${CROSS_COMPILE_TOOL}
1626 fi
1627
1628 if [[ $ARCH == arm64 ]]; then
1629 OUTDIR=${ROOT_DIR}/out/kernel-5.15-64
1630 elif [[ $ARCH == arm ]]; then
1631 OUTDIR=${ROOT_DIR}/out/kernel-5.15-32
Dezhen Wang1176fad2023-06-09 11:22:17 +08001632 tool_args+=("LOADADDR=0x108000")
Dezhen Wang850c0d22023-05-31 19:26:20 +08001633 elif [[ $ARCH == riscv ]]; then
1634 OUTDIR=${ROOT_DIR}/out/riscv-kernel-5.15-64
1635 fi
1636 TOOL_ARGS="${tool_args[@]}"
1637
1638 OUT_DIR=${OUTDIR}/common
1639 mkdir -p ${OUT_DIR}
1640 if [ "${SKIP_RM_OUTDIR}" != "1" ] ; then
1641 rm -rf ${OUTDIR}
1642 fi
1643
1644 echo "========================================================"
1645 echo ""
1646 export DIST_DIR=$(readlink -m ${OUTDIR}/dist)
1647 export MODULES_STAGING_DIR=$(readlink -m ${OUTDIR}/staging)
1648 export OUT_AMLOGIC_DIR=$(readlink -m ${OUTDIR}/amlogic)
1649 echo OUTDIR=$OUTDIR DIST_DIR=$DIST_DIR MODULES_STAGING_DIR=$MODULES_STAGING_DIR KERNEL_DIR=$KERNEL_DIR
1650
1651
1652 source ${ROOT_DIR}/build/kernel/build_utils.sh
1653
1654 DTS_EXT_DIR=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/boot/dts/amlogic
1655 DTS_EXT_DIR=$(rel_path ${ROOT_DIR}/${DTS_EXT_DIR} ${KERNEL_DIR})
1656 export dtstree=${DTS_EXT_DIR}
1657 export DTC_INCLUDE=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/include
1658
1659 EXT_MODULES="
1660 ${EXT_MODULES}
1661 "
1662
1663 EXT_MODULES_CONFIG="
1664 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/ext_modules_config
1665 "
1666
1667 EXT_MODULES_PATH="
1668 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/ext_modules_path
1669 "
1670
1671 POST_KERNEL_BUILD_CMDS="prepare_module_build"
1672 EXTRA_CMDS="extra_cmds"
1673
1674 IN_KERNEL_MODULES=1
1675}
1676
1677export -f set_default_parameters_for_smarthome
1678
1679function savedefconfig_cmd_for_smarthome () {
1680 if [[ -n ${SAVEDEFCONFIG} ]]; then
1681 set -x
1682 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${DEFCONFIG}
1683 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} savedefconfig
Dezhen Wang1176fad2023-06-09 11:22:17 +08001684 rm ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/configs/${DEFCONFIG}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001685 cp -f ${OUT_DIR}/defconfig ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/configs/${DEFCONFIG}
1686 set +x
1687 exit
1688 fi
1689}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001690export -f savedefconfig_cmd_for_smarthome
1691
1692function only_build_dtb_for_smarthome () {
1693 if [[ -n ${DTB} ]]; then
1694 set -x
1695 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
1696 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs || exit
1697 set +x
1698 exit
1699 fi
1700}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001701export -f only_build_dtb_for_smarthome
1702
1703function make_menuconfig_cmd_for_smarthome () {
1704 if [[ -n ${MENUCONFIG} ]]; then
1705 set -x
1706 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${DEFCONFIG}
1707 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} menuconfig
1708 set +x
1709 exit
1710 fi
1711}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001712export -f make_menuconfig_cmd_for_smarthome
1713
1714function build_kernel_for_different_cpu_architecture () {
1715 set -x
1716 if [[ $ARCH == arm64 ]]; then
1717 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
1718 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} headers_install &&
1719 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} Image -j12 &&
1720 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} modules -j12 &&
1721 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 &&
1722 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs -j12 || exit
Dezhen Wang850c0d22023-05-31 19:26:20 +08001723 elif [[ $ARCH == arm ]]; then
1724 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
1725 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} headers_install &&
1726 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} uImage -j12 &&
1727 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} modules -j12 &&
1728 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 &&
1729 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs -j12 || exit
Dezhen Wang850c0d22023-05-31 19:26:20 +08001730 elif [[ $ARCH == riscv ]]; then
1731 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
1732 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} headers_install &&
1733 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} Image -j12 &&
1734 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} modules -j12 &&
1735 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} INSTALL_MOD_PATH=${MODULES_STAGING_DIR} modules_install -j12 &&
1736 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs -j12 || exit
Dezhen Wang850c0d22023-05-31 19:26:20 +08001737 fi
1738 cp ${OUT_DIR}/arch/${ARCH}/boot/Image* ${DIST_DIR}
1739 cp ${OUT_DIR}/arch/${ARCH}/boot/uImage* ${DIST_DIR}
1740 cp ${OUT_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/boot/dts/amlogic/*.dtb ${DIST_DIR}
1741 cp ${OUT_DIR}/vmlinux ${DIST_DIR}
1742 set +x
1743}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001744export -f build_kernel_for_different_cpu_architecture
1745
1746function build_ext_modules() {
1747 for EXT_MOD in ${EXT_MODULES}; do
1748 EXT_MOD_REL=$(rel_path ${ROOT_DIR}/${EXT_MOD} ${KERNEL_DIR})
1749 mkdir -p ${OUT_DIR}/${EXT_MOD_REL}
1750
1751 set -x
1752 make ARCH=${ARCH} -C ${ROOT_DIR}/${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1753 O=${OUT_DIR} ${TOOL_ARGS} -j12 || exit
1754 make ARCH=${ARCH} -C ${ROOT_DIR}/${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1755 O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} \
1756 INSTALL_MOD_PATH=${MODULES_STAGING_DIR} \
1757 INSTALL_MOD_DIR="extra/${EXT_MOD}" \
1758 INSTALL_MOD_STRIP=1 \
1759 modules_install -j12 || exit
1760 set +x
1761 done
1762}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001763export -f build_ext_modules
1764
1765function copy_modules_and_rebuild_rootfs_for_smarthome () {
Dezhen Wang1176fad2023-06-09 11:22:17 +08001766
1767 copy_modules_files_to_dist_dir
1768
1769 if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then
1770 echo "========================================================"
1771 echo "Rebuild rootfs in order to install modules!"
1772 rebuild_rootfs ${ARCH}
1773 echo "Build success!"
1774 else
1775 echo "There's no file ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot, so don't rebuild rootfs!"
1776 fi
1777}
1778export -f copy_modules_and_rebuild_rootfs_for_smarthome
1779
1780function copy_modules_files_to_dist_dir () {
Dezhen Wang850c0d22023-05-31 19:26:20 +08001781 MODULES=$(find ${MODULES_STAGING_DIR} -type f -name "*.ko")
1782 if [ -n "${MODULES}" ]; then
1783 if [ -n "${IN_KERNEL_MODULES}" -o -n "${EXT_MODULES}" -o -n "${EXT_MODULES_MAKEFILE}" ]; then
1784 echo "========================================================"
1785 echo " Copying modules files"
1786 for module in ${MODULES}; do
1787 cp ${module} ${DIST_DIR}
1788 done
1789 if [ "${COMPRESS_MODULES}" = "1" ]; then
1790 echo " Archiving modules to ${MODULES_ARCHIVE}"
1791 tar --transform="s,.*/,," -czf ${DIST_DIR}/${MODULES_ARCHIVE} ${MODULES[@]}
1792 fi
1793 fi
Dezhen Wang850c0d22023-05-31 19:26:20 +08001794 fi
1795}
Dezhen Wang1176fad2023-06-09 11:22:17 +08001796export -f copy_modules_files_to_dist_dir
Dezhen Wang850c0d22023-05-31 19:26:20 +08001797
Dezhen Wang1176fad2023-06-09 11:22:17 +08001798function copy_files_to_dist_dir () {
1799 echo "========================================================"
1800 echo " Copying files"
1801 for FILE in ${FILES}; do
1802 if [ -f ${OUT_DIR}/${FILE} ]; then
1803 echo " $FILE"
1804 cp -p ${OUT_DIR}/${FILE} ${DIST_DIR}/
1805 elif [[ "${FILE}" =~ \.dtb|\.dtbo ]] && \
1806 [ -n "${DTS_EXT_DIR}" ] && [ -f "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" ] ; then
1807 # DTS_EXT_DIR is recalculated before to be relative to KERNEL_DIR
1808 echo " $FILE"
1809 cp -p "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" "${DIST_DIR}/"
1810 else
1811 echo " $FILE is not a file, skipping"
1812 fi
1813 done
1814}
1815export -f copy_files_to_dist_dir
1816
1817function make_dtbo() {
1818 if [[ -n "${BUILD_DTBO_IMG}" ]]; then
1819 echo "========================================================"
1820 echo " Creating dtbo image at ${DIST_DIR}/dtbo.img"
1821 (
1822 cd ${OUT_DIR}
1823 mkdtimg create "${DIST_DIR}"/dtbo.img ${MKDTIMG_FLAGS} ${MKDTIMG_DTBOS}
1824 )
1825 fi
1826}
1827export -f make_dtbo
1828
1829function installing_UAPI_kernel_headers () {
1830 if [ -z "${SKIP_CP_KERNEL_HDR}" ]; then
1831 echo "========================================================"
1832 echo " Installing UAPI kernel headers:"
1833 mkdir -p "${KERNEL_UAPI_HEADERS_DIR}/usr"
1834 make -C ${OUT_DIR} O=${OUT_DIR} ${TOOL_ARGS} \
1835 INSTALL_HDR_PATH="${KERNEL_UAPI_HEADERS_DIR}/usr" "${MAKE_ARGS[@]}" \
1836 headers_install
1837 # The kernel makefiles create files named ..install.cmd and .install which
1838 # are only side products. We don't want those. Let's delete them.
1839 find ${KERNEL_UAPI_HEADERS_DIR} \( -name ..install.cmd -o -name .install \) -exec rm '{}' +
1840 KERNEL_UAPI_HEADERS_TAR=${DIST_DIR}/kernel-uapi-headers.tar.gz
1841 echo " Copying kernel UAPI headers to ${KERNEL_UAPI_HEADERS_TAR}"
1842 tar -czf ${KERNEL_UAPI_HEADERS_TAR} --directory=${KERNEL_UAPI_HEADERS_DIR} usr/
1843 fi
1844}
1845export -f installing_UAPI_kernel_headers
1846
1847function copy_kernel_headers_to_compress () {
1848 if [ -z "${SKIP_CP_KERNEL_HDR}" ] ; then
1849 echo "========================================================"
1850 KERNEL_HEADERS_TAR=${DIST_DIR}/kernel-headers.tar.gz
1851 echo " Copying kernel headers to ${KERNEL_HEADERS_TAR}"
1852 pushd $ROOT_DIR/$KERNEL_DIR
1853 find arch include $OUT_DIR -name *.h -print0 \
1854 | tar -czf $KERNEL_HEADERS_TAR \
1855 --absolute-names \
1856 --dereference \
1857 --transform "s,.*$OUT_DIR,," \
1858 --transform "s,^,kernel-headers/," \
1859 --null -T -
1860 popd
1861 fi
1862}
1863export -f copy_kernel_headers_to_compress
1864
1865function set_default_parameters_for_32bit () {
1866 tool_args=()
1867 prebuilts_paths=(
1868 CLANG_PREBUILT_BIN
1869 CLANGTOOLS_PREBUILT_BIN
1870 RUST_PREBUILT_BIN
1871 LZ4_PREBUILTS_BIN
1872 DTC_PREBUILTS_BIN
1873 LIBUFDT_PREBUILTS_BIN
1874 BUILDTOOLS_PREBUILT_BIN
1875 )
1876 echo CC_CLANG=$CC_CLANG
1877 if [[ $CC_CLANG -eq "1" ]]; then
1878 source ${ROOT_DIR}/${KERNEL_DIR}/build.config.common
1879 if [[ -n "${LLVM}" ]]; then
1880 tool_args+=("LLVM=1")
1881 # Reset a bunch of variables that the kernel's top level Makefile does, just
1882 # in case someone tries to use these binaries in this script such as in
1883 # initramfs generation below.
1884 HOSTCC=clang
1885 HOSTCXX=clang++
1886 CC=clang
1887 LD=ld.lld
1888 AR=llvm-ar
1889 NM=llvm-nm
1890 OBJCOPY=llvm-objcopy
1891 OBJDUMP=llvm-objdump
1892 OBJSIZE=llvm-size
1893 READELF=llvm-readelf
1894 STRIP=llvm-strip
1895 else
1896 if [ -n "${HOSTCC}" ]; then
1897 tool_args+=("HOSTCC=${HOSTCC}")
1898 fi
1899
1900 if [ -n "${CC}" ]; then
1901 tool_args+=("CC=${CC}")
1902 if [ -z "${HOSTCC}" ]; then
1903 tool_args+=("HOSTCC=${CC}")
1904 fi
1905 fi
1906
1907 if [ -n "${LD}" ]; then
1908 tool_args+=("LD=${LD}" "HOSTLD=${LD}")
1909 fi
1910
1911 if [ -n "${NM}" ]; then
1912 tool_args+=("NM=${NM}")
1913 fi
1914
1915 if [ -n "${OBJCOPY}" ]; then
1916 tool_args+=("OBJCOPY=${OBJCOPY}")
1917 fi
1918 fi
1919
1920 if [ -n "${DTC}" ]; then
1921 tool_args+=("DTC=${DTC}")
1922 fi
1923 for prebuilt_bin in "${prebuilts_paths[@]}"; do
1924 prebuilt_bin=\${${prebuilt_bin}}
1925 eval prebuilt_bin="${prebuilt_bin}"
1926 if [ -n "${prebuilt_bin}" ]; then
1927 PATH=${PATH//"${ROOT_DIR}\/${prebuilt_bin}:"}
1928 PATH=${ROOT_DIR}/${prebuilt_bin}:${PATH} # add the clang tool to env PATH
1929 fi
1930 done
1931 export PATH
1932 elif [[ -n $CROSS_COMPILE_TOOL ]]; then
1933 export CROSS_COMPILE=${CROSS_COMPILE_TOOL}
1934 fi
1935
1936 # Have host compiler use LLD and compiler-rt.
1937 LLD_COMPILER_RT="-fuse-ld=lld --rtlib=compiler-rt"
1938 if [[ -n "${NDK_TRIPLE}" ]]; then
1939 NDK_DIR=${ROOT_DIR}/prebuilts/ndk-r23
1940
1941 if [[ ! -d "${NDK_DIR}" ]]; then
1942 # Kleaf/Bazel will checkout the ndk to a different directory than
1943 # build.sh.
1944 NDK_DIR=${ROOT_DIR}/external/prebuilt_ndk
1945 if [[ ! -d "${NDK_DIR}" ]]; then
1946 echo "ERROR: NDK_TRIPLE set, but unable to find prebuilts/ndk." 1>&2
1947 echo "Did you forget to checkout prebuilts/ndk?" 1>&2
1948 exit 1
1949 fi
1950 fi
1951 USERCFLAGS="--target=${NDK_TRIPLE} "
1952 USERCFLAGS+="--sysroot=${NDK_DIR}/toolchains/llvm/prebuilt/linux-x86_64/sysroot "
1953 # Some kernel headers trigger -Wunused-function for unused static functions
1954 # with clang; GCC does not warn about unused static inline functions. The
1955 # kernel sets __attribute__((maybe_unused)) on such functions when W=1 is
1956 # not set.
1957 USERCFLAGS+="-Wno-unused-function "
1958 # To help debug these flags, consider commenting back in the following, and
1959 # add `echo $@ > /tmp/log.txt` and `2>>/tmp/log.txt` to the invocation of $@
1960 # in scripts/cc-can-link.sh.
1961 #USERCFLAGS+=" -Wl,--verbose -v"
1962 # We need to set -fuse-ld=lld for Android's build env since AOSP LLVM's
1963 # clang is not configured to use LLD by default, and BFD has been
1964 # intentionally removed. This way CC_CAN_LINK can properly link the test in
1965 # scripts/cc-can-link.sh.
1966 USERLDFLAGS="${LLD_COMPILER_RT} "
1967 USERLDFLAGS+="--target=${NDK_TRIPLE} "
1968 else
1969 USERCFLAGS="--sysroot=/dev/null"
1970 fi
1971
1972 #setting_the_default_output_dir
1973 export COMMON_OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out${OUT_DIR_SUFFIX}/${BRANCH}})
1974 export OUT_DIR=$(readlink -m ${COMMON_OUT_DIR}/${KERNEL_DIR})
1975 export DIST_DIR=$(readlink -m ${DIST_DIR:-${COMMON_OUT_DIR}/dist})
1976 export UNSTRIPPED_DIR=${DIST_DIR}/unstripped
1977 export UNSTRIPPED_MODULES_ARCHIVE=unstripped_modules.tar.gz
1978 export MODULES_ARCHIVE=modules.tar.gz
1979 export MODULES_STAGING_DIR=$(readlink -m ${COMMON_OUT_DIR}/staging)
1980 export MODULES_PRIVATE_DIR=$(readlink -m ${COMMON_OUT_DIR}/private)
1981 export KERNEL_UAPI_HEADERS_DIR=$(readlink -m ${COMMON_OUT_DIR}/kernel_uapi_headers)
1982 export INITRAMFS_STAGING_DIR=${MODULES_STAGING_DIR}/initramfs_staging
1983 export SYSTEM_DLKM_STAGING_DIR=${MODULES_STAGING_DIR}/system_dlkm_staging
1984 export VENDOR_DLKM_STAGING_DIR=${MODULES_STAGING_DIR}/vendor_dlkm_staging
1985 export MKBOOTIMG_STAGING_DIR="${MODULES_STAGING_DIR}/mkbootimg_staging"
1986 export OUT_AMLOGIC_DIR=$(readlink -m ${COMMON_OUT_DIR}/amlogic)
1987
1988 tool_args+=("LOADADDR=0x108000")
1989 tool_args+=("DEPMOD=depmod")
Wanwei Jiang0bde3122023-07-20 10:24:07 +08001990 tool_args+=("KCONFIG_EXT_MODULES_PREFIX=${KCONFIG_EXT_MODULES_PREFIX}")
1991 tool_args+=("KCONFIG_EXT_PREFIX=${KCONFIG_EXT_PREFIX}")
Dezhen Wang1176fad2023-06-09 11:22:17 +08001992 TOOL_ARGS="${tool_args[@]}"
1993
1994 mkdir -p ${OUT_DIR}
1995 if [ "${SKIP_RM_OUTDIR}" != "1" ] ; then
1996 rm -rf ${COMMON_OUT_DIR}
1997 fi
1998
1999 source ${ROOT_DIR}/build/kernel/build_utils.sh
2000
2001 DTS_EXT_DIR=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/boot/dts/amlogic
2002 DTS_EXT_DIR=$(rel_path ${ROOT_DIR}/${DTS_EXT_DIR} ${KERNEL_DIR})
2003 export dtstree=${DTS_EXT_DIR}
2004 export DTC_INCLUDE=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/include
2005
2006 EXT_MODULES="
2007 ${EXT_MODULES}
2008 "
2009
2010 EXT_MODULES_CONFIG="
2011 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/ext_modules_config
2012 "
2013
2014 EXT_MODULES_PATH="
2015 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/ext_modules_path
2016 "
2017
2018 POST_KERNEL_BUILD_CMDS="prepare_module_build"
2019 EXTRA_CMDS="extra_cmds"
2020
2021 IN_KERNEL_MODULES=1
2022}
2023export -f set_default_parameters_for_32bit
2024
2025function generating_test_mappings_zip () {
2026 echo "========================================================"
2027 echo " Generating test_mappings.zip"
2028 TEST_MAPPING_FILES=${OUT_DIR}/test_mapping_files.txt
2029 find ${ROOT_DIR} -name TEST_MAPPING \
2030 -not -path "${ROOT_DIR}/\.git*" \
2031 -not -path "${ROOT_DIR}/\.repo*" \
2032 -not -path "${ROOT_DIR}/out*" \
2033 > ${TEST_MAPPING_FILES}
2034 soong_zip -o ${DIST_DIR}/test_mappings.zip -C ${ROOT_DIR} -l ${TEST_MAPPING_FILES}
2035}
2036export -f generating_test_mappings_zip
2037