blob: a35e059db4f6a759768d39026b6c4a469fffd7dc [file] [log] [blame]
wanwei.jiang91776952021-11-19 13:10:32 +08001#!/bin/bash
2
qinglin.lia40f7b62023-07-26 18:52:35 +08003function real_path() {
4if [[ "${FULL_KERNEL_VERSION}" == "common13-5.15" ]]; then
5 rel_path $@
6else
7 realpath $1 --relative-to $2
8fi
9}
10
wanwei.jiang91776952021-11-19 13:10:32 +080011function pre_defconfig_cmds() {
wanwei.jiangff4dccd2022-08-14 01:14:51 +080012 export OUT_AMLOGIC_DIR=$(readlink -m ${COMMON_OUT_DIR}/amlogic)
Lei Zhang2853aa52022-08-23 09:40:06 +080013 if [ "${ARCH}" = "arm" ]; then
14 export PATH=${PATH}:/usr/bin/
15 fi
wanwei.jiangff4dccd2022-08-14 01:14:51 +080016
Wanwei Jiang51217812022-11-01 20:23:03 +080017 if [[ -z ${ANDROID_PROJECT} ]]; then
18 local temp_file=`mktemp /tmp/config.XXXXXXXXXXXX`
19 echo "CONFIG_AMLOGIC_SERIAL_MESON=y" > ${temp_file}
qinglin.li931a53f2022-11-23 11:09:03 +080020 echo "CONFIG_DEVTMPFS=y" >> ${temp_file}
Dezhen Wanga6806c52023-06-13 19:47:05 +080021 if [[ ${ARCH} == arm ]]; then
Wanwei Jiang51217812022-11-01 20:23:03 +080022 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 +080023 else
24 if [[ ${GKI_CONFIG} == gki_20 ]]; 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} ${temp_file}
Wanwei Jiange5426752023-07-03 00:56:39 +080026 else
Dezhen Wanga6806c52023-06-13 19:47:05 +080027 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}
28 fi
Wanwei Jiang51217812022-11-01 20:23:03 +080029 fi
30 rm ${temp_file}
31 else
Dezhen Wanga6806c52023-06-13 19:47:05 +080032 if [[ ${ARCH} == arm ]]; then
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}
34 else
35 if [[ ${GKI_CONFIG} == gki_20 ]]; then
36 if [[ -n ${CHECK_GKI_20} ]]; then
37 local temp_file=`mktemp /tmp/config.XXXXXXXXXXXX`
38 echo "CONFIG_STMMAC_ETH=n" > ${temp_file}
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} ${temp_file}
40 rm ${temp_file}
41 else
42 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}
43 fi
Wanwei Jiange5426752023-07-03 00:56:39 +080044 else
Dezhen Wanga6806c52023-06-13 19:47:05 +080045 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 +080046 fi
Wanwei Jiang51217812022-11-01 20:23:03 +080047 fi
wanwei.jiang6fdd3152022-08-01 20:35:05 +080048 fi
qinglin.li7a994a02022-12-05 15:04:40 +080049
qinglin.li62b23332023-06-25 10:37:41 +080050 if [[ ${UPGRADE_PROJECT} == r || ${UPGRADE_PROJECT} == R ]]; 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_R}
52 fi
53 if [[ ${UPGRADE_PROJECT} == p || ${UPGRADE_PROJECT} == P ]]; 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_P}
55 fi
56 if [[ ${UPGRADE_PROJECT} == s || ${UPGRADE_PROJECT} == S ]]; then
57 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG_UPGRADE_S}
58 fi
59 if [[ ${UPGRADE_PROJECT} == u || ${UPGRADE_PROJECT} == U ]]; then
60 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 +080061 fi
Dezhen Wangab7ba642023-03-15 14:10:44 +080062
Wanwei Jiangc65e4d32023-03-21 16:24:41 +080063 if [[ ${IN_BUILD_GKI_10} == 1 ]]; then
64 local temp_file=`mktemp /tmp/config.XXXXXXXXXXXX`
65 echo "CONFIG_MODULE_SIG_ALL=y" >> ${temp_file}
66 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${temp_file}
67 rm ${temp_file}
68 fi
Dezhen Wanga5f456a2023-05-05 17:40:31 +080069
70 if [[ -n ${DEV_CONFIGS} ]]; then
Wanwei Jiang7c582c02023-07-21 18:34:50 +080071 local config_list=$(echo ${DEV_CONFIGS}|sed 's/+/ /g')
Dezhen Wanga5f456a2023-05-05 17:40:31 +080072 for config_name in ${config_list[@]}
73 do
Wanwei Jiang7c582c02023-07-21 18:34:50 +080074 if [[ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/configs/${config_name} ]]; then
75 config_file=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/configs/${config_name}
76 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 +080077 elif [[ -f ${config_name} ]]; then
78 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${config_name}
79 else
80 echo "ERROR: config file ${config_name} is not in the right path!!"
81 exit
82 fi
83 done
84 fi
qinglin.lib71c3202023-08-01 10:29:53 +080085
86 if [[ ${UPGRADE_PROJECT} == r || ${UPGRADE_PROJECT} == R ]] && [[ "${CONFIG_BOOTIMAGE}" == "user" ]]; then
87 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${AMLOGIC_R_USER_DIFFCONFIG}
88 fi
wanwei.jiang91776952021-11-19 13:10:32 +080089}
90export -f pre_defconfig_cmds
91
92function post_defconfig_cmds() {
Wanwei Jiang2d4f9742022-09-13 11:22:17 +080093 rm ${ROOT_DIR}/${KCONFIG_DEFCONFIG}
wanwei.jiang91776952021-11-19 13:10:32 +080094}
95export -f post_defconfig_cmds
96
97function read_ext_module_config() {
98 ALL_LINE=""
99 while read LINE
100 do
101 if [[ $LINE != \#* && $LINE != "" ]]; then
102 ALL_LINE="$ALL_LINE"" ""$LINE"
103 fi
104 done < $1
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800105
106 echo "${ALL_LINE}"
wanwei.jiang91776952021-11-19 13:10:32 +0800107}
108
pengzhao.liua923dea2023-06-25 09:58:20 +0800109function autotest(){
110 if [[ -d ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/ ]]; then
111 if [[ ! -f ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/pre-commit ]]; then
112 cp ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/pre-commit ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/pre-commit
113 cp ${KERNEL_DIR}/scripts/amlogic/pre-commit ${KERNEL_DIR}/.git/hooks/pre-commit
114 chmod +x ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/pre-commit
115 chmod +x ${KERNEL_DIR}/.git/hooks/pre-commit
116 fi
117 fi
118}
119
wanwei.jiang91776952021-11-19 13:10:32 +0800120function read_ext_module_predefine() {
121 PRE_DEFINE=""
122
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800123 for y_config in `cat $1 | grep "^CONFIG_.*=y" | sed 's/=y//'`; do
wanwei.jiang91776952021-11-19 13:10:32 +0800124 PRE_DEFINE="$PRE_DEFINE"" -D"${y_config}
125 done
126
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800127 for m_config in `cat $1 | grep "^CONFIG_.*=m" | sed 's/=m//'`; do
wanwei.jiang91776952021-11-19 13:10:32 +0800128 PRE_DEFINE="$PRE_DEFINE"" -D"${m_config}_MODULE
129 done
130
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800131 echo "${PRE_DEFINE}"
wanwei.jiang91776952021-11-19 13:10:32 +0800132}
133
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800134top_ext_drivers=top_ext_drivers
wanwei.jiang91776952021-11-19 13:10:32 +0800135function prepare_module_build() {
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800136 local temp_file=`mktemp /tmp/kernel.XXXXXXXXXXXX`
Wanwei Jiang0a74fb12022-12-09 16:27:40 +0800137 if [[ ! `grep "CONFIG_AMLOGIC_IN_KERNEL_MODULES=y" ${ROOT_DIR}/${FRAGMENT_CONFIG}` ]]; then
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800138 sed 's:#.*$::g' ${ROOT_DIR}/${FRAGMENT_CONFIG} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
139 GKI_EXT_KERNEL_MODULE_CONFIG=$(read_ext_module_config ${temp_file})
140 GKI_EXT_KERNEL_MODULE_PREDEFINE=$(read_ext_module_predefine ${temp_file})
141 export GKI_EXT_KERNEL_MODULE_CONFIG GKI_EXT_KERNEL_MODULE_PREDEFINE
wanwei.jiang91776952021-11-19 13:10:32 +0800142 fi
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800143
144 for ext_module_config in ${EXT_MODULES_CONFIG}; do
145 sed 's:#.*$::g' ${ROOT_DIR}/${ext_module_config} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
146 GKI_EXT_MODULE_CONFIG=$(read_ext_module_config ${temp_file})
147 GKI_EXT_MODULE_PREDEFINE=$(read_ext_module_predefine ${temp_file})
148 done
149 export GKI_EXT_MODULE_CONFIG GKI_EXT_MODULE_PREDEFINE
150 echo GKI_EXT_MODULE_CONFIG=${GKI_EXT_MODULE_CONFIG}
151 echo GKI_EXT_MODULE_PREDEFINE=${GKI_EXT_MODULE_PREDEFINE}
152
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800153 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
154 if [[ -d ${top_ext_drivers} ]]; then
155 rm -rf ${top_ext_drivers}
156 fi
157 mkdir -p ${top_ext_drivers}
158 fi
159
160 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
161 extra_symbols="KBUILD_EXTRA_SYMBOLS +="
162 fi
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800163 ext_modules=
164 for ext_module in ${EXT_MODULES}; do
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800165 module_abs_path=`readlink -e ${ext_module}`
qinglin.lia40f7b62023-07-26 18:52:35 +0800166 module_rel_path=$(real_path ${module_abs_path} ${ROOT_DIR})
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800167 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
168 if [[ `echo ${module_rel_path} | grep "\.\.\/"` ]]; then
169 cp -rf ${module_abs_path} ${top_ext_drivers}
170 module_rel_path=${top_ext_drivers}/${module_abs_path##*/}
171 fi
172 fi
173 ext_modules="${ext_modules} ${module_rel_path}"
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800174 done
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800175
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800176 for ext_module_path in ${EXT_MODULES_PATH}; do
177 sed 's:#.*$::g' ${ROOT_DIR}/${ext_module_path} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800178 while read LINE
179 do
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800180 module_abs_path=`readlink -e ${LINE}`
qinglin.lia40f7b62023-07-26 18:52:35 +0800181 module_rel_path=$(real_path ${module_abs_path} ${ROOT_DIR})
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800182 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
183 if [[ `echo ${module_rel_path} | grep "\.\.\/"` ]]; then
184 cp -rf ${module_abs_path} ${top_ext_drivers}
185 module_rel_path=${top_ext_drivers}/${module_abs_path##*/}
186 fi
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800187 fi
188 ext_modules="${ext_modules} ${module_rel_path}"
189
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800190 done < ${temp_file}
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800191 done
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800192 EXT_MODULES=${ext_modules}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800193
194 local flag=0
195 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
196 for ext_module in ${EXT_MODULES}; do
qinglin.lia40f7b62023-07-26 18:52:35 +0800197 ext_mod_rel=$(real_path ${ext_module} ${KERNEL_DIR})
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800198 if [[ ${flag} -eq "1" ]]; then
199 sed -i "/# auto add KBUILD_EXTRA_SYMBOLS start/,/# auto add KBUILD_EXTRA_SYMBOLS end/d" ${ext_module}/Makefile
200 sed -i "2 i # auto add KBUILD_EXTRA_SYMBOLS end" ${ext_module}/Makefile
201 sed -i "2 i ${extra_symbols}" ${ext_module}/Makefile
202 sed -i "2 i # auto add KBUILD_EXTRA_SYMBOLS start" ${ext_module}/Makefile
203 echo "${ext_module}/Makefile add: ${extra_symbols}"
204 fi
205 extra_symbols="${extra_symbols} ${ext_mod_rel}/Module.symvers"
206 flag=1
207 done
208 fi
209
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800210 export EXT_MODULES
211 echo EXT_MODULES=${EXT_MODULES}
212
213 rm ${temp_file}
wanwei.jiang91776952021-11-19 13:10:32 +0800214}
wanwei.jiang91776952021-11-19 13:10:32 +0800215export -f prepare_module_build
wanwei.jiang612a8882021-11-23 17:12:23 +0800216
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800217function extra_cmds() {
Dezhen Wang1176fad2023-06-09 11:22:17 +0800218 echo "========================================================"
219 echo " Running extra build command(s):"
220
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800221 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
222 for ext_module in ${EXT_MODULES}; do
223 sed -i "/# auto add KBUILD_EXTRA_SYMBOLS start/,/# auto add KBUILD_EXTRA_SYMBOLS end/d" ${ext_module}/Makefile
224 done
225 fi
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800226
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800227 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
228 if [[ -d ${top_ext_drivers} ]]; then
229 rm -rf ${top_ext_drivers}
230 fi
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800231 fi
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800232
233 for FILE in ${FILES}; do
234 if [[ "${FILE}" =~ \.dtbo ]] && \
235 [ -n "${DTS_EXT_DIR}" ] && [ -f "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" ] ; then
236 MKDTIMG_DTBOS="${MKDTIMG_DTBOS} ${DIST_DIR}/${FILE}"
237 fi
238 done
239 export MKDTIMG_DTBOS
240
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800241 set +x
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800242 modules_install
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800243 set -x
244
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800245 local src_dir=$(echo ${MODULES_STAGING_DIR}/lib/modules/*)
246 pushd ${src_dir}
wanwei.jiangf73b2202022-07-23 16:00:44 +0800247 cp modules.order modules_order.back
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800248 : > modules.order
Wanwei Jiang571dde62022-11-17 14:37:41 +0800249 set +x
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800250 while read LINE
251 do
252 find -name ${LINE} >> modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800253 done < ${OUT_AMLOGIC_DIR}/modules/modules.order
Wanwei Jiang571dde62022-11-17 14:37:41 +0800254 set -x
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800255 sed -i "s/^\.\///" modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800256 : > ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800257 ext_modules=
258 for ext_module in ${EXT_MODULES}; do
259 if [[ ${ext_module} =~ "../" ]]; then
260 ext_module_old=${ext_module}
261 ext_module=${ext_module//\.\.\//}
262 ext_dir=$(dirname ${ext_module})
263 [[ -d extra/${ext_module} ]] && rm -rf extra/${ext_dir}
264 mkdir -p extra/${ext_dir}
265 cp -rf extra/${ext_module_old} extra/${ext_dir}
266
267 ext_modules_order_file=$(ls extra/${ext_module}/modules.order.*)
268 ext_dir_top=${ext_module%/*}
wanwei.jiangf73b2202022-07-23 16:00:44 +0800269 sed -i "s/\.\.\///g" ${ext_modules_order_file}
270 cat ${ext_modules_order_file} >> modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800271 cat ${ext_modules_order_file} | awk -F/ '{print $NF}' >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
wanwei.jiangf73b2202022-07-23 16:00:44 +0800272 : > ${ext_modules_order_file}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800273 else
274 ext_modules_order_file=$(ls extra/${ext_module}/modules.order.*)
wanwei.jiangf73b2202022-07-23 16:00:44 +0800275 cat ${ext_modules_order_file} >> modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800276 cat ${ext_modules_order_file} | awk -F/ '{print $NF}' >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
wanwei.jiangf73b2202022-07-23 16:00:44 +0800277 : > ${ext_modules_order_file}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800278 fi
279 ext_modules="${ext_modules} ${ext_module}"
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800280 done
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800281 EXT_MODULES=${ext_modules}
282 echo EXT_MODULES=${EXT_MODULES}
283 export EXT_MODULES
wanwei.jiangf73b2202022-07-23 16:00:44 +0800284
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800285 head -n ${ramdisk_last_line} modules.order > vendor_boot_modules
wanwei.jiangf73b2202022-07-23 16:00:44 +0800286 file_last_line=`sed -n "$=" modules.order`
287 let line=${file_last_line}-${ramdisk_last_line}
288 tail -n ${line} modules.order > vendor_dlkm_modules
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800289 export MODULES_LIST=${src_dir}/vendor_boot_modules
290 if [[ "${ARCH}" = "arm64" && -z ${FAST_BUILD} ]]; then
Lei Zhang96efea62022-09-02 14:55:06 +0800291 export VENDOR_DLKM_MODULES_LIST=${src_dir}/vendor_dlkm_modules
292 fi
wanwei.jiangf73b2202022-07-23 16:00:44 +0800293
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800294 popd
wanwei.jiang1d154992022-05-30 14:56:26 +0800295
Wanwei Jiang0a74fb12022-12-09 16:27:40 +0800296 if [[ -z ${ANDROID_PROJECT} ]] && [[ -d ${OUT_DIR}/${DTS_EXT_DIR} ]]; then
wanwei.jiang1d154992022-05-30 14:56:26 +0800297 FILES="$FILES `ls ${OUT_DIR}/${DTS_EXT_DIR}`"
298 fi
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800299
300 if [[ -f ${KERNEL_BUILD_VAR_FILE} ]]; then
301 : > ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiangb2ed83c2022-09-09 14:01:20 +0800302 echo "KERNEL_DIR=${KERNEL_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800303 echo "COMMON_OUT_DIR=${COMMON_OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
304 echo "OUT_DIR=${OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
305 echo "DIST_DIR=${DIST_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800306 echo "OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800307 echo "MODULES_STAGING_DIR=${MODULES_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
308 echo "MODULES_PRIVATE_DIR=${MODULES_PRIVATE_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
309 echo "INITRAMFS_STAGING_DIR=${INITRAMFS_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
310 echo "SYSTEM_DLKM_STAGING_DIR=${SYSTEM_DLKM_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
311 echo "VENDOR_DLKM_STAGING_DIR=${VENDOR_DLKM_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
312 echo "MKBOOTIMG_STAGING_DIR=${MKBOOTIMG_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800313 echo "DIST_GKI_DIR=${DIST_GKI_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
314 echo "FULL_KERNEL_VERSION=${FULL_KERNEL_VERSION}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8fe00342023-05-16 22:53:14 +0800315 echo "GKI_MODULES_LOAD_WHITE_LIST=\"${GKI_MODULES_LOAD_WHITE_LIST[*]}\"" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8042e472023-06-06 14:12:32 +0800316 echo "BAZEL=${BAZEL}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800317 fi
Wanwei Jianga07f9a52022-09-30 18:40:40 +0800318
319 for module_path in ${PREBUILT_MODULES_PATH}; do
320 find ${module_path} -type f -name "*.ko" -exec cp {} ${DIST_DIR} \;
321 done
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800322}
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800323export -f extra_cmds
324
Wanwei Jiang2218b892023-03-17 17:31:21 +0800325function bazel_extra_cmds() {
326 modules_install
327
328 if [[ -f ${KERNEL_BUILD_VAR_FILE} ]]; then
329 : > ${KERNEL_BUILD_VAR_FILE}
330 echo "KERNEL_DIR=${KERNEL_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
331 echo "COMMON_OUT_DIR=${COMMON_OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
332 echo "DIST_DIR=${DIST_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
333 echo "OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8fe00342023-05-16 22:53:14 +0800334 echo "GKI_MODULES_LOAD_WHITE_LIST=\"${GKI_MODULES_LOAD_WHITE_LIST[*]}\"" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8042e472023-06-06 14:12:32 +0800335 echo "BAZEL=${BAZEL}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang2218b892023-03-17 17:31:21 +0800336 fi
337
338 if [[ ${GKI_CONFIG} != gki_20 ]]; then
339 [[ -f ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz ]] && rm -f ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz
340 mv ${DIST_DIR}/system_dlkm_staging_archive.tar.gz ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz
341 [[ -d ${DIST_DIR}/system_dlkm_gki10 ]] && rm -rf ${DIST_DIR}/system_dlkm_gki10
342 mkdir ${DIST_DIR}/system_dlkm_gki10
343 pushd ${DIST_DIR}/system_dlkm_gki10
344 tar zxf ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz
345 find -name "*.ko" | while read module; do
Wanwei Jiang475245b2023-05-10 21:06:52 +0800346 module_name=${module##*/}
Wanwei Jiang2218b892023-03-17 17:31:21 +0800347 if [[ ! `grep "/${module_name}" ${DIST_DIR}/system_dlkm.modules.load` ]]; then
348 rm -f ${module}
349 fi
350 done
351 tar czf ${DIST_DIR}/system_dlkm_staging_archive.tar.gz lib
352 popd
353 rm -rf ${DIST_DIR}/system_dlkm_gki10
354 fi
355}
356
357export -f bazel_extra_cmds
358
wanwei.jiang612a8882021-11-23 17:12:23 +0800359function mod_probe() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800360 local ko=$1
361 local loop
qinglin.lia284a932022-09-21 18:07:38 +0800362 for loop in `grep "^$ko:" modules.dep | sed 's/.*://'`; do
Wanwei Jiang16554d02023-07-14 17:01:00 +0800363 [[ `grep $loop __install.sh` ]] && continue
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800364 mod_probe $loop
365 echo insmod $loop >> __install.sh
366 done
wanwei.jiang612a8882021-11-23 17:12:23 +0800367}
368
Wanwei Jiang571dde62022-11-17 14:37:41 +0800369function mod_probe_recovery() {
370 local ko=$1
371 local loop
372 for loop in `grep "^$ko:" modules_recovery.dep | sed 's/.*://'`; do
Wanwei Jiang16554d02023-07-14 17:01:00 +0800373 [[ `grep $loop __install_recovery.sh` ]] && continue
Wanwei Jiang571dde62022-11-17 14:37:41 +0800374 mod_probe_recovery $loop
375 echo insmod $loop >> __install_recovery.sh
376 done
377}
378
wanwei.jiangb12abc82021-12-25 22:17:10 +0800379function adjust_sequence_modules_loading() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800380 if [[ -n $1 ]]; then
381 chips=$1
wanwei.jiangb12abc82021-12-25 22:17:10 +0800382 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800383
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800384 cp modules.dep modules.dep.temp
385
386 soc_module=()
387 for chip in ${chips[@]}; do
388 chip_module=`ls amlogic-*-soc-${chip}.ko`
389 soc_module=(${soc_module[@]} ${chip_module[@]})
390 done
391 echo soc_module=${soc_module[*]}
392
393 delete_soc_module=()
394 if [[ ${#soc_module[@]} == 0 ]]; then
395 echo "Use all soc module"
396 else
397 for module in `ls amlogic-*-soc-*`; do
398 if [[ ! "${soc_module[@]}" =~ "${module}" ]] ; then
399 echo Delete soc module: ${module}
400 sed -n "/${module}:/p" modules.dep.temp
401 sed -i "/${module}:/d" modules.dep.temp
402 delete_soc_module=(${delete_soc_module[@]} ${module})
403 fi
404 done
405 echo delete_soc_module=${delete_soc_module[*]}
406 fi
407
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800408 if [[ -n ${CLK_SOC_MODULE} ]]; then
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800409 delete_clk_soc_modules=()
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800410 for module in `ls amlogic-clk-soc-*`; do
411 if [[ "${CLK_SOC_MODULE}" != "${module}" ]] ; then
412 echo Delete clk soc module: ${module}
413 sed -n "/${module}:/p" modules.dep.temp
414 sed -i "/${module}:/d" modules.dep.temp
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800415 delete_clk_soc_modules=(${delete_clk_soc_modules[@]} ${module})
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800416 fi
417 done
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800418 echo delete_clk_soc_modules=${delete_clk_soc_modules[*]}
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800419 fi
420
421 if [[ -n ${PINCTRL_SOC_MODULE} ]]; then
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800422 delete_pinctrl_soc_modules=()
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800423 for module in `ls amlogic-pinctrl-soc-*`; do
424 if [[ "${PINCTRL_SOC_MODULE}" != "${module}" ]] ; then
425 echo Delete pinctrl soc module: ${module}
426 sed -n "/${module}:/p" modules.dep.temp
427 sed -i "/${module}:/d" modules.dep.temp
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800428 delete_pinctrl_soc_modules=(${delete_pinctrl_soc_modules[@]} ${module})
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800429 fi
430 done
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800431 echo delete_pinctrl_soc_modules=${delete_pinctrl_soc_modules[*]}
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800432 fi
433
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800434 in_line_i=a
435 delete_type_modules=()
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800436 [[ -z ${TYPE_MODULE_SELECT_MODULE} ]] && TYPE_MODULE_SELECT_MODULE=${TYPE_MODULE_SELECT_MODULE_ANDROID}
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800437 echo "TYPE_MODULE_SELECT_MODULE=${TYPE_MODULE_SELECT_MODULE}"
438 mkdir temp_dir
439 cd temp_dir
440 in_temp_dir=y
441 for element in ${TYPE_MODULE_SELECT_MODULE}; do
442 if [[ ${in_temp_dir} = y ]]; then
443 cd ../
444 rm -r temp_dir
445 in_temp_dir=
446 fi
447 if [[ ${in_line_i} = a ]]; then
448 in_line_i=b
449 type_module=${element}
450 select_modules_i=0
451 select_modules_count=
452 select_modules=
453 elif [[ ${in_line_i} = b ]]; then
454 in_line_i=c
455 select_modules_count=${element}
456 else
457 let select_modules_i+=1
458 select_modules="${select_modules} ${element}"
459 if [[ ${select_modules_i} -eq ${select_modules_count} ]]; then
460 in_line_i=a
461 echo type_module=$type_module select_modules=$select_modules
462 for module in `ls ${type_module}`; do
463 dont_delete_module=0
464 for select_module in ${select_modules}; do
465 if [[ "${select_module}" == "${module}" ]] ; then
466 dont_delete_module=1
467 break;
468 fi
469 done
470 if [[ ${dont_delete_module} != 1 ]]; then
471 echo Delete module: ${module}
472 sed -n "/${module}:/p" modules.dep.temp
473 sed -i "/${module}:/d" modules.dep.temp
474 delete_type_modules=(${delete_type_modules[@]} ${module})
475 fi
476 done
477 echo delete_type_modules=${delete_type_modules[*]}
478 fi
479 fi
480 done
481 if [[ -n ${in_temp_dir} ]]; then
482 cd ../
483 rm -r temp_dir
484 fi
485
486 black_modules=()
Dezhen Wang45dfcb02023-02-13 17:41:44 +0800487 mkdir service_module
488 echo MODULES_SERVICE_LOAD_LIST=${MODULES_SERVICE_LOAD_LIST[@]}
489 BLACK_AND_SERVICE_LIST=(${MODULES_LOAD_BLACK_LIST[@]} ${MODULES_SERVICE_LOAD_LIST[@]})
490 echo ${BLACK_AND_SERVICE_LIST[@]}
491 for module in ${BLACK_AND_SERVICE_LIST[@]}; do
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800492 modules=`ls ${module}*`
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800493 black_modules=(${black_modules[@]} ${modules[@]})
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800494 done
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800495 if [[ ${#black_modules[@]} == 0 ]]; then
496 echo "black_modules is null, don't delete modules, MODULES_LOAD_BLACK_LIST=${MODULES_LOAD_BLACK_LIST[*]}"
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800497 else
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800498 echo black_modules=${black_modules[*]}
499 for module in ${black_modules[@]}; do
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800500 echo Delete module: ${module}
501 sed -n "/${module}:/p" modules.dep.temp
502 sed -i "/${module}:/d" modules.dep.temp
503 done
504 fi
505
Wanwei Jiang475245b2023-05-10 21:06:52 +0800506 GKI_MODULES_LOAD_BLACK_LIST=()
Wanwei Jiang16554d02023-07-14 17:01:00 +0800507 if [[ "${FULL_KERNEL_VERSION}" != "common13-5.15" && "${ARCH}" == "arm64" ]]; then
508 #if [[ "${FULL_KERNEL_VERSION}" != "common13-5.15" ]]; then
Wanwei Jiang475245b2023-05-10 21:06:52 +0800509 gki_modules_temp_file=`mktemp /tmp/config.XXXXXXXXXXXX`
qinglin.lieafebcf2023-06-27 12:48:22 +0800510 if [[ ${BAZEL} == "1" ]]; then
511 cp $DIST_DIR/system_dlkm.modules.load ${gki_modules_temp_file}
512 else
513 rm -f ${gki_modules_temp_file}
514 cat ${ROOT_DIR}/${KERNEL_DIR}/modules.bzl |grep ko | while read LINE
515 do
516 echo $LINE | sed 's/^[^"]*"//' | sed 's/".*$//' >> ${gki_modules_temp_file}
517 done
518 fi
Wanwei Jiang475245b2023-05-10 21:06:52 +0800519
520 for module in ${GKI_MODULES_LOAD_WHITE_LIST[@]}; do
521 sed -i "/\/${module}/d" ${gki_modules_temp_file}
522 done
523
524 for module in `cat ${gki_modules_temp_file}`; do
525 module=${module##*/}
526 GKI_MODULES_LOAD_BLACK_LIST[${#GKI_MODULES_LOAD_BLACK_LIST[*]}]=${module}
527 done
528 rm -f ${gki_modules_temp_file}
529
530 for module in ${GKI_MODULES_LOAD_BLACK_LIST[@]}; do
531 echo Delete module: ${module}
532 sed -n "/${module}:/p" modules.dep.temp
533 sed -i "/${module}:/d" modules.dep.temp
534 done
535 fi
536
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800537 cat modules.dep.temp | cut -d ':' -f 2 > modules.dep.temp1
Wanwei Jiang475245b2023-05-10 21:06:52 +0800538 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 +0800539 for module in ${delete_modules[@]}; do
Wanwei Jiang16554d02023-07-14 17:01:00 +0800540 if [[ ! -f $module ]]; then
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800541 continue
542 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800543 match=`sed -n "/${module}/=" modules.dep.temp1`
544 for match in ${match[@]}; do
545 match_count=(${match_count[@]} $match)
546 done
547 if [[ ${#match_count[@]} != 0 ]]; then
548 echo "Error ${#match_count[@]} modules depend on ${module}, please modify:"
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800549 echo ${MODULES_SEQUENCE_LIST}:MODULES_LOAD_BLACK_LIST
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800550 exit
551 fi
Dezhen Wang45dfcb02023-02-13 17:41:44 +0800552 if [[ -n ${ANDROID_PROJECT} ]]; then
553 for service_module_temp in ${MODULES_SERVICE_LOAD_LIST[@]}; do
554 if [[ ${module} = ${service_module_temp} ]]; then
555 mv ${module} service_module
556 fi
557 done
558 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800559 rm -f ${module}
560 done
561 rm -f modules.dep.temp1
wanwei.jiangb12abc82021-12-25 22:17:10 +0800562 touch modules.dep.temp1
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800563
564 for module in ${RAMDISK_MODULES_LOAD_LIST[@]}; do
565 echo RAMDISK_MODULES_LOAD_LIST: $module
wanwei.jiangb12abc82021-12-25 22:17:10 +0800566 sed -n "/${module}:/p" modules.dep.temp
567 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1
568 sed -i "/${module}:/d" modules.dep.temp
569 sed -n "/${module}.*\.ko:/p" modules.dep.temp
570 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1
571 sed -i "/${module}.*\.ko:/d" modules.dep.temp
572 done
573
Wanwei Jiang571dde62022-11-17 14:37:41 +0800574 if [[ -n ${ANDROID_PROJECT} ]]; then
575 cp modules.dep.temp modules_recovery.dep.temp
576 cp modules.dep.temp1 modules_recovery.dep.temp1
577 fi
578
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800579 for module in ${VENDOR_MODULES_LOAD_FIRST_LIST[@]}; do
580 echo VENDOR_MODULES_LOAD_FIRST_LIST: $module
581 sed -n "/${module}:/p" modules.dep.temp
582 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1
583 sed -i "/${module}:/d" modules.dep.temp
584 sed -n "/${module}.*\.ko:/p" modules.dep.temp
585 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1
586 sed -i "/${module}.*\.ko:/d" modules.dep.temp
wanwei.jiangb12abc82021-12-25 22:17:10 +0800587 done
588
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800589 if [ -f modules.dep.temp2 ]; then
590 rm modules.dep.temp2
591 fi
592 touch modules.dep.temp2
593 for module in ${VENDOR_MODULES_LOAD_LAST_LIST[@]}; do
594 echo VENDOR_MODULES_LOAD_FIRST_LIST: $module
595 sed -n "/${module}:/p" modules.dep.temp
596 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp2
597 sed -i "/${module}:/d" modules.dep.temp
598 sed -n "/${module}.*\.ko:/p" modules.dep.temp
599 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp2
600 sed -i "/${module}.*\.ko:/d" modules.dep.temp
601 done
602
603 cat modules.dep.temp >> modules.dep.temp1
604 cat modules.dep.temp2 >> modules.dep.temp1
605
wanwei.jiangb12abc82021-12-25 22:17:10 +0800606 cp modules.dep.temp1 modules.dep
607 rm modules.dep.temp
608 rm modules.dep.temp1
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800609 rm modules.dep.temp2
Wanwei Jiang571dde62022-11-17 14:37:41 +0800610
611 if [[ -n ${ANDROID_PROJECT} ]]; then
612 for module in ${RECOVERY_MODULES_LOAD_LIST[@]}; do
613 echo RECOVERY_MODULES_LOAD_LIST: $module
614 sed -n "/${module}:/p" modules_recovery.dep.temp
615 sed -n "/${module}:/p" modules_recovery.dep.temp >> modules_recovery.dep.temp1
616 sed -i "/${module}:/d" modules_recovery.dep.temp
617 sed -n "/${module}.*\.ko:/p" modules_recovery.dep.temp
618 sed -n "/${module}.*\.ko:/p" modules_recovery.dep.temp >> modules_recovery.dep.temp1
619 sed -i "/${module}.*\.ko:/d" modules_recovery.dep.temp
620 done
621
622 cat modules_recovery.dep.temp >> modules_recovery.dep.temp1
623
624 cp modules_recovery.dep.temp1 modules_recovery.dep
625 rm modules_recovery.dep.temp
626 rm modules_recovery.dep.temp1
627 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800628}
629
Wanwei Jiang571dde62022-11-17 14:37:41 +0800630create_ramdisk_vendor_recovery() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800631 install_temp=$1
Wanwei Jiang571dde62022-11-17 14:37:41 +0800632 if [[ -n ${ANDROID_PROJECT} ]]; then
633 recovery_install_temp=$2
634 fi
Wanwei Jiang9173e462022-09-29 00:58:33 +0800635 ramdisk_module_i=${#RAMDISK_MODULES_LOAD_LIST[@]}
636 while [ ${ramdisk_module_i} -gt 0 ]; do
637 let ramdisk_module_i--
638 echo ramdisk_module_i=$ramdisk_module_i ${RAMDISK_MODULES_LOAD_LIST[${ramdisk_module_i}]}
639 if [[ `grep "${RAMDISK_MODULES_LOAD_LIST[${ramdisk_module_i}]}" ${install_temp}` ]]; then
640 last_ramdisk_module=${RAMDISK_MODULES_LOAD_LIST[${ramdisk_module_i}]}
641 break;
642 fi
643 done
644 # last_ramdisk_module=${RAMDISK_MODULES_LOAD_LIST[${#RAMDISK_MODULES_LOAD_LIST[@]}-1]}
qinglin.libce54712023-05-08 13:56:31 +0800645 if [[ -n ${last_ramdisk_module} ]]; then
646 last_ramdisk_module_line=`sed -n "/${last_ramdisk_module}/=" ${install_temp}`
647 for line in ${last_ramdisk_module_line}; do
648 ramdisk_last_line=${line}
649 done
650 else
651 ramdisk_last_line=1
652 fi
wanwei.jiangf73b2202022-07-23 16:00:44 +0800653 export ramdisk_last_line
Wanwei Jiang571dde62022-11-17 14:37:41 +0800654
655 if [[ -n ${ANDROID_PROJECT} ]]; then
656 recovery_module_i=${#RECOVERY_MODULES_LOAD_LIST[@]}
qinglin.lidba324f2023-03-02 19:56:21 +0800657 #when RECOVERY_MODULES_LOAD_LIST is NULL
658 if [ ${#RECOVERY_MODULES_LOAD_LIST[@]} -eq 0 ]; then
659 last_recovery_module=${last_ramdisk_module}
660 fi
Wanwei Jiang571dde62022-11-17 14:37:41 +0800661 while [ ${recovery_module_i} -gt 0 ]; do
662 let recovery_module_i--
663 echo recovery_module_i=$recovery_module_i ${RECOVERY_MODULES_LOAD_LIST[${recovery_module_i}]}
664 if [[ `grep "${RECOVERY_MODULES_LOAD_LIST[${recovery_module_i}]}" ${recovery_install_temp}` ]]; then
665 last_recovery_module=${RECOVERY_MODULES_LOAD_LIST[${recovery_module_i}]}
666 break;
667 fi
668 done
669 # last_recovery_module=${RECOVERY_MODULES_LOAD_LIST[${#RECOVERY_MODULES_LOAD_LIST[@]}-1]}
qinglin.libce54712023-05-08 13:56:31 +0800670 if [[ -n ${last_recovery_module} ]]; then
671 last_recovery_module_line=`sed -n "/${last_recovery_module}/=" ${recovery_install_temp}`
672 for line in ${last_recovery_module_line}; do
673 recovery_last_line=${line}
674 done
675 else
676 recovery_last_line=1
677 fi
Wanwei Jiang571dde62022-11-17 14:37:41 +0800678 sed -n "${ramdisk_last_line},${recovery_last_line}p" ${recovery_install_temp} > recovery_install.sh
qinglin.libce54712023-05-08 13:56:31 +0800679 if [[ -n ${last_ramdisk_module} ]]; then
680 sed -i "1d" recovery_install.sh
681 fi
Wanwei Jiang571dde62022-11-17 14:37:41 +0800682 mkdir recovery
683 cat recovery_install.sh | cut -d ' ' -f 2 > recovery/recovery_modules.order
qinglin.lidba324f2023-03-02 19:56:21 +0800684 if [ ${#RECOVERY_MODULES_LOAD_LIST[@]} -ne 0 ]; then
685 cat recovery_install.sh | cut -d ' ' -f 2 | xargs cp -t recovery/
686 fi
Wanwei Jiang571dde62022-11-17 14:37:41 +0800687 sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' recovery_install.sh
688 echo "echo Install recovery modules success!" >> recovery_install.sh
689 chmod 755 recovery_install.sh
690 mv recovery_install.sh recovery/
691 fi
692
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800693 head -n ${ramdisk_last_line} ${install_temp} > ramdisk_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800694 mkdir ramdisk
qinglin.li6e3847d2023-08-09 15:39:05 +0800695 if [[ -n ${last_ramdisk_module} ]]; then
696 cat ramdisk_install.sh | cut -d ' ' -f 2 | xargs mv -t ramdisk/
697 else
698 sed -i "${ramdisk_last_line}d" ramdisk_install.sh
699 ramdisk_last_line=0
700 fi
wanwei.jiangf73b2202022-07-23 16:00:44 +0800701 cat ramdisk_install.sh | cut -d ' ' -f 2 > ramdisk/ramdisk_modules.order
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800702
qinglin.lie5b951e2022-06-07 16:13:44 +0800703 sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' ramdisk_install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800704 echo "echo Install ramdisk modules success!" >> ramdisk_install.sh
705 chmod 755 ramdisk_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800706 mv ramdisk_install.sh ramdisk/
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800707
708 file_last_line=`sed -n "$=" ${install_temp}`
709 let line=${file_last_line}-${ramdisk_last_line}
710 tail -n ${line} ${install_temp} > vendor_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800711 mkdir vendor
wanwei.jiangf73b2202022-07-23 16:00:44 +0800712 cat vendor_install.sh | cut -d ' ' -f 2 > vendor/vendor_modules.order
wanwei.jiang50759e12022-03-24 12:36:17 +0800713 cat vendor_install.sh | cut -d ' ' -f 2 | xargs mv -t vendor/
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800714
qinglin.lie5b951e2022-06-07 16:13:44 +0800715 sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' vendor_install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800716 echo "echo Install vendor modules success!" >> vendor_install.sh
717 chmod 755 vendor_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800718 mv vendor_install.sh vendor/
wanwei.jiangb12abc82021-12-25 22:17:10 +0800719}
720
wanwei.jiang612a8882021-11-23 17:12:23 +0800721function modules_install() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800722 arg1=$1
723
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800724 if [[ ! -f ${MODULES_SEQUENCE_LIST} ]]; then
725 MODULES_SEQUENCE_LIST=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list
726 fi
727 source ${MODULES_SEQUENCE_LIST}
728
Wanwei Jiang2218b892023-03-17 17:31:21 +0800729 export OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR:-$(readlink -m ${COMMON_OUT_DIR}/amlogic)}
730 echo $OUT_AMLOGIC_DIR
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800731 rm -rf ${OUT_AMLOGIC_DIR}
732 mkdir -p ${OUT_AMLOGIC_DIR}
733 mkdir -p ${OUT_AMLOGIC_DIR}/modules
734 mkdir -p ${OUT_AMLOGIC_DIR}/ext_modules
Wanwei Jiangae4d7c12023-02-17 19:22:04 +0800735 mkdir -p ${OUT_AMLOGIC_DIR}/symbols
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800736
Wanwei Jiang2218b892023-03-17 17:31:21 +0800737 if [[ ${BAZEL} == "1" ]]; then
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800738 BAZEL_OUT=bazel-out/
Wanwei Jiang0df84602023-05-05 14:40:42 +0800739 while read module
740 do
Wanwei Jiang475245b2023-05-10 21:06:52 +0800741 module_name=${module##*/}
Wanwei Jiang16554d02023-07-14 17:01:00 +0800742 if [[ -z ${ANDROID_PROJECT} || `echo ${module} | grep "^kernel\/"` ]]; then
Wanwei Jiang0df84602023-05-05 14:40:42 +0800743 if [[ -f ${DIST_DIR}/${module_name} ]]; then
744 cp ${DIST_DIR}/${module_name} ${OUT_AMLOGIC_DIR}/modules
745 else
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800746 module=`find ${BAZEL_OUT} -name ${module_name} | grep "amlogic_modules_install"`
Wanwei Jiang0df84602023-05-05 14:40:42 +0800747 cp ${module} ${OUT_AMLOGIC_DIR}/modules
748 fi
749 elif [[ `echo ${module} | grep "^extra\/"` ]]; then
Wanwei Jiang16554d02023-07-14 17:01:00 +0800750 module=${module#*/}
751 local match=
752 for ext_module in ${EXT_MODULES_ANDROID_AUTO_LOAD}; do
753 if [[ "${module}" =~ "${ext_module}" ]]; then
754 match=1
755 break
756 fi
757 done
758 if [[ ${match} == 1 ]]; then
759 cp ${DIST_DIR}/${module_name} ${OUT_AMLOGIC_DIR}/modules
760 else
761 cp ${DIST_DIR}/${module_name} ${OUT_AMLOGIC_DIR}/ext_modules
762 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800763 else
Wanwei Jiang0df84602023-05-05 14:40:42 +0800764 echo "warning unrecognized module: ${module}"
Wanwei Jiang2218b892023-03-17 17:31:21 +0800765 fi
Wanwei Jiang0df84602023-05-05 14:40:42 +0800766 done < ${DIST_DIR}/modules.load
Wanwei Jiang2218b892023-03-17 17:31:21 +0800767
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800768 dep_file=`find ${BAZEL_OUT} -name *.dep | grep "amlogic"`
Wanwei Jiang2218b892023-03-17 17:31:21 +0800769 cp ${dep_file} ${OUT_AMLOGIC_DIR}/modules/full_modules.dep
Wanwei Jiang16554d02023-07-14 17:01:00 +0800770 if [[ -n ${ANDROID_PROJECT} ]]; then
771 grep -E "^kernel\/" ${dep_file} > ${OUT_AMLOGIC_DIR}/modules/modules.dep
772 for ext_module in ${EXT_MODULES_ANDROID_AUTO_LOAD}; do
773 cat ${dep_file} | cut -d ':' -f 1 | grep -n "${ext_module}" | cut -d ':' -f 1 | while read line; do
774 sed -n ${line}p ${dep_file} >> ${OUT_AMLOGIC_DIR}/modules/modules.dep
775 done
776 done
777
778 touch ${module} ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800779 for order_file in `find ${BAZEL_OUT} -name "modules.order.*" | grep "amlogic"`; do
Wanwei Jiang16554d02023-07-14 17:01:00 +0800780 order_file_dir=${order_file#*/extra/}
781 order_file_dir=${order_file_dir%/modules.order.*}
782 if [[ ! "${EXT_MODULES_ANDROID_AUTO_LOAD}" =~ "${order_file_dir}" ]]; then
783 echo "# ${order_file}" >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
784 cat ${order_file} >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
785 echo >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
786 fi
787 done
788 else
789 cp ${dep_file} ${OUT_AMLOGIC_DIR}/modules/modules.dep
790 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800791 else
792 local MODULES_ROOT_DIR=$(echo ${MODULES_STAGING_DIR}/lib/modules/*)
793 pushd ${MODULES_ROOT_DIR}
794 local common_drivers=${COMMON_DRIVERS_DIR##*/}
795 local modules_list=$(find -type f -name "*.ko")
796 for module in ${modules_list}; do
797 if [[ -n ${ANDROID_PROJECT} ]]; then # copy internal build modules
798 if [[ `echo ${module} | grep -E "\.\/kernel\/|\/${common_drivers}\/"` ]]; then
799 cp ${module} ${OUT_AMLOGIC_DIR}/modules/
800 else
Wanwei Jiang16554d02023-07-14 17:01:00 +0800801 local match=
802 for ext_module in ${EXT_MODULES_ANDROID_AUTO_LOAD}; do
803 if [[ "${module}" =~ "${ext_module}" ]]; then
804 match=1
805 break
806 fi
807 done
808 if [[ ${match} == 1 ]]; then
809 cp ${module} ${OUT_AMLOGIC_DIR}/modules/
810 else
811 cp ${module} ${OUT_AMLOGIC_DIR}/ext_modules/
812 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800813 fi
Wanwei Jiang16554d02023-07-14 17:01:00 +0800814 else
Wanwei Jiang2218b892023-03-17 17:31:21 +0800815 cp ${module} ${OUT_AMLOGIC_DIR}/modules/
816 fi
817 done
818
819 if [[ -n ${ANDROID_PROJECT} ]]; then # internal build modules
820 grep -E "^kernel\/|^${common_drivers}\/" modules.dep > ${OUT_AMLOGIC_DIR}/modules/modules.dep
Wanwei Jiang16554d02023-07-14 17:01:00 +0800821 dep_file=modules.dep
822 for ext_module in ${EXT_MODULES_ANDROID_AUTO_LOAD}; do
823 cat ${dep_file} | cut -d ':' -f 1 | grep -n "${ext_module}" | cut -d ':' -f 1 | while read line; do
824 sed -n ${line}p ${dep_file} >> ${OUT_AMLOGIC_DIR}/modules/modules.dep
825 done
826 done
Wanwei Jiang2218b892023-03-17 17:31:21 +0800827 else # all modules, include external modules
828 cp modules.dep ${OUT_AMLOGIC_DIR}/modules
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800829 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800830 popd
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800831 fi
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800832 pushd ${OUT_AMLOGIC_DIR}/modules
wanwei.jiang612a8882021-11-23 17:12:23 +0800833 sed -i 's#[^ ]*/##g' modules.dep
834
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800835 adjust_sequence_modules_loading "${arg1[*]}"
wanwei.jiangb12abc82021-12-25 22:17:10 +0800836
wanwei.jiang5c8d2b62021-11-26 20:36:33 +0800837 touch __install.sh
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800838 touch modules.order
wanwei.jiang612a8882021-11-23 17:12:23 +0800839 for loop in `cat modules.dep | sed 's/:.*//'`; do
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800840 echo $loop >> modules.order
Wanwei Jiang16554d02023-07-14 17:01:00 +0800841 [[ `grep $loop __install.sh` ]] && continue
842 mod_probe $loop
wanwei.jiang612a8882021-11-23 17:12:23 +0800843 echo insmod $loop >> __install.sh
844 done
845
846 cat __install.sh | awk ' {
847 if (!cnt[$2]) {
848 print $0;
849 cnt[$2]++;
850 }
851 }' > __install.sh.tmp
852
Wanwei Jiangbf119d22022-10-27 09:49:49 +0800853 cp modules.order modules.order.back
854 cut -d ' ' -f 2 __install.sh.tmp > modules.order
Wanwei Jiang571dde62022-11-17 14:37:41 +0800855
856 if [[ -n ${ANDROID_PROJECT} ]]; then
857 touch __install_recovery.sh
858 touch modules_recovery.order
859 for loop in `cat modules_recovery.dep | sed 's/:.*//'`; do
Wanwei Jiang571dde62022-11-17 14:37:41 +0800860 echo $loop >> modules_recovery.order
Wanwei Jiang16554d02023-07-14 17:01:00 +0800861 [[ `grep $loop __install_recovery.sh` ]] && continue
862 mod_probe_recovery $loop
Wanwei Jiang571dde62022-11-17 14:37:41 +0800863 echo insmod $loop >> __install_recovery.sh
864 done
865
866 cat __install_recovery.sh | awk ' {
867 if (!cnt[$2]) {
868 print $0;
869 cnt[$2]++;
870 }
871 }' > __install_recovery.sh.tmp
872
Wanwei Jiang16554d02023-07-14 17:01:00 +0800873 cp modules_recovery.order modules_recovery.order.back
Wanwei Jiang571dde62022-11-17 14:37:41 +0800874 cut -d ' ' -f 2 __install_recovery.sh.tmp > modules_recovery.order
875 fi
876 create_ramdisk_vendor_recovery __install.sh.tmp __install_recovery.sh.tmp
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800877
Dezhen Wang124ad7d2023-02-06 15:35:14 +0800878 if [[ -n ${MANUAL_INSMOD_MODULE} ]]; then
879 install_file=manual_install.sh
880 else
881 install_file=install.sh
882 fi
883 echo "#!/bin/sh" > ${install_file}
884 echo "cd ramdisk" >> ${install_file}
885 echo "./ramdisk_install.sh" >> ${install_file}
886 echo "cd ../vendor" >> ${install_file}
887 echo "./vendor_install.sh" >> ${install_file}
888 echo "cd ../" >> ${install_file}
889 chmod 755 ${install_file}
wanwei.jiang612a8882021-11-23 17:12:23 +0800890
891 echo "/modules/: all `wc -l modules.dep | awk '{print $1}'` modules."
Wanwei Jianga5977bd2022-08-24 22:43:40 +0800892 rm __install.sh __install.sh.tmp
wanwei.jiang612a8882021-11-23 17:12:23 +0800893
Wanwei Jiang571dde62022-11-17 14:37:41 +0800894 if [[ -n ${ANDROID_PROJECT} ]]; then
895 rm __install_recovery.sh __install_recovery.sh.tmp
896 fi
897
wanwei.jiang236e9a32021-12-07 16:34:14 +0800898 popd
Wanwei Jiangae4d7c12023-02-17 19:22:04 +0800899
Wanwei Jiang2218b892023-03-17 17:31:21 +0800900 if [[ ${BAZEL} == "1" ]]; then
901 cp ${DIST_DIR}/vmlinux ${OUT_AMLOGIC_DIR}/symbols
902
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800903 find ${BAZEL_OUT} -name *.ko | grep "unstripped" | while read module; do
Wanwei Jiang2218b892023-03-17 17:31:21 +0800904 cp ${module} ${OUT_AMLOGIC_DIR}/symbols
Wanwei Jiang2218b892023-03-17 17:31:21 +0800905 done
Wanwei Jiang2218b892023-03-17 17:31:21 +0800906 else
907 cp ${OUT_DIR}/vmlinux ${OUT_AMLOGIC_DIR}/symbols
908 find ${OUT_DIR} -type f -name "*.ko" -exec cp {} ${OUT_AMLOGIC_DIR}/symbols \;
909 for ext_module in ${EXT_MODULES}; do
910 find ${COMMON_OUT_DIR}/${ext_module} -type f -name "*.ko" -exec cp {} ${OUT_AMLOGIC_DIR}/symbols \;
911 done
912 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800913}
wanwei.jiang236e9a32021-12-07 16:34:14 +0800914export -f modules_install
wanwei.jiang612a8882021-11-23 17:12:23 +0800915
Wanwei Jiang2218b892023-03-17 17:31:21 +0800916function rename_external_module_name() {
917 local external_coppied
Wanwei Jiang92c89432023-05-15 23:57:16 +0800918 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 +0800919 target_module_name=`echo ${module_line%%:*} | sed '/^#/d;/^$/d'`
920 modules_name=`echo ${module_line##:*} | sed '/^#/d;/^$/d'`
921 [[ -f ${OUT_AMLOGIC_DIR}/ext_modules/${target_module_name} ]] && external_coppied=1
Wanwei Jiang16554d02023-07-14 17:01:00 +0800922 echo target_module_name=$target_module_name modules_name=$modules_name external_coppied=$external_coppied
Wanwei Jiang2218b892023-03-17 17:31:21 +0800923 for module in ${modules_name}; do
924 echo module=$module
925 if [[ -f ${OUT_AMLOGIC_DIR}/ext_modules/${module} ]]; then
926 if [[ -z ${external_coppied} ]]; then
927 cp ${OUT_AMLOGIC_DIR}/ext_modules/${module} ${OUT_AMLOGIC_DIR}/ext_modules/${target_module_name}
928 external_coppied=1
929 fi
930 rm -f ${OUT_AMLOGIC_DIR}/ext_modules/${module}
931 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800932 done
933 external_coppied=
Wanwei Jiang2218b892023-03-17 17:31:21 +0800934 done
935}
936export -f rename_external_module_name
937
Dezhen Wang5ad119c2023-05-04 15:07:49 +0800938# function rebuild_rootfs can rebuild the rootfs if rootfs_base.cpio.gz.uboot exist
wanwei.jiang612a8882021-11-23 17:12:23 +0800939function rebuild_rootfs() {
Wanwei Jiang2218b892023-03-17 17:31:21 +0800940 echo
941 echo "========================================================"
942 if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then
943 echo "Rebuild rootfs in order to install modules!"
944 else
945 echo "There's no file ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot, so don't rebuild rootfs!"
946 return
947 fi
948
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800949 pushd ${OUT_AMLOGIC_DIR}
wanwei.jiang612a8882021-11-23 17:12:23 +0800950
Lei Zhang475c17b2022-03-03 11:08:50 +0800951 local ARCH=arm64
952 if [[ -n $1 ]]; then
953 ARCH=$1
954 fi
955
wanwei.jiang612a8882021-11-23 17:12:23 +0800956 rm rootfs -rf
957 mkdir rootfs
Wanwei Jiang2218b892023-03-17 17:31:21 +0800958 cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot rootfs
wanwei.jiang612a8882021-11-23 17:12:23 +0800959 cd rootfs
960 dd if=rootfs_base.cpio.gz.uboot of=rootfs_base.cpio.gz bs=64 skip=1
961 gunzip rootfs_base.cpio.gz
962 mkdir rootfs
963 cd rootfs
dongqing.li6fd83502023-06-15 09:59:40 +0800964 fakeroot cpio -i -F ../rootfs_base.cpio
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800965 if [ -d ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer ]; then
966 cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer . -rf
qinglin.li3c25dbb2022-01-14 11:23:10 +0800967 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800968 cp -rf ../../modules .
wanwei.jiang8abddcc2022-03-16 21:18:48 +0800969
dongqing.li6fd83502023-06-15 09:59:40 +0800970 find . | fakeroot cpio -o -H newc | gzip > ../rootfs_new.cpio.gz
wanwei.jiang612a8882021-11-23 17:12:23 +0800971 cd ../
Lei Zhang475c17b2022-03-03 11:08:50 +0800972 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 +0800973 mv rootfs_new.cpio.gz.uboot ../
974 cd ../
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800975 cp rootfs_new.cpio.gz.uboot ${DIST_DIR}
wanwei.jiang612a8882021-11-23 17:12:23 +0800976
977 popd
978}
979export -f rebuild_rootfs
wanwei.jiang403c9942021-11-30 18:29:02 +0800980
Dezhen Wang5ad119c2023-05-04 15:07:49 +0800981# function check_undefined_symbol can check the dependence among the modules
982# parameter:
983# --modules_depend
wanwei.jiang403c9942021-11-30 18:29:02 +0800984function check_undefined_symbol() {
Wanwei Jiang2218b892023-03-17 17:31:21 +0800985 if [[ ${MODULES_DEPEND} != "1" ]]; then
986 return
987 fi
988
989 echo "========================================================"
990 echo "print modules depend"
991
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800992 pushd ${OUT_AMLOGIC_DIR}/modules
wanwei.jiang403c9942021-11-30 18:29:02 +0800993 echo
994 echo "========================================================"
995 echo "Functions or variables not defined in this module refer to which module."
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800996 if [[ -n ${LLVM} ]]; then
997 compile_tool=${ROOT_DIR}/${CLANG_PREBUILT_BIN}/llvm-
998 elif [[ -n ${CROSS_COMPILE} ]]; then
999 compile_tool=${CROSS_COMPILE}
1000 else
1001 echo "can't find compile tool"
1002 fi
Wanwei Jiang0a74fb12022-12-09 16:27:40 +08001003 ${compile_tool}nm ${DIST_DIR}/vmlinux | grep -E " T | D | B | R | W "> vmlinux_T.txt
wanwei.jiang2c818dc2022-03-24 17:48:00 +08001004 # cat __install.sh | grep "insmod" | cut -d ' ' -f 2 > module_list.txt
1005 cat ramdisk/ramdisk_install.sh | grep "insmod" | cut -d ' ' -f 2 > module_list.txt
1006 cat vendor/vendor_install.sh | grep "insmod" | cut -d ' ' -f 2 >> module_list.txt
1007 cp ramdisk/*.ko .
1008 cp vendor/*.ko .
wanwei.jiang403c9942021-11-30 18:29:02 +08001009 while read LINE
1010 do
1011 echo ${LINE}
wanwei.jiang2c818dc2022-03-24 17:48:00 +08001012 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 +08001013 do
1014 #echo ${U}
1015 U_v=`grep -w ${U} vmlinux_T.txt`
1016 in_vmlinux=0
1017 if [ -n "${U_v}" ];
1018 then
wanwei.jiangd7b29ef2021-12-01 19:59:41 +08001019 #printf "\t%-50s <== vmlinux\n" ${U}
wanwei.jiang403c9942021-11-30 18:29:02 +08001020 in_vmlinux=1
1021 continue
1022 fi
1023 in_module=0
1024 MODULE=
1025 while read LINE1
1026 do
wanwei.jiang2c818dc2022-03-24 17:48:00 +08001027 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 +08001028 if [ -n "${U_m}" ];
1029 then
1030 in_module=1
1031 MODULE=${LINE1}
1032 fi
1033 done < module_list.txt
1034 if [ ${in_module} -eq "1" ];
1035 then
1036 printf "\t%-50s <== %s\n" ${U} ${MODULE}
1037 continue
1038 else
1039 printf "\t%-50s <== none\n" ${U}
1040 fi
1041 done
1042 echo
1043 echo
1044 done < module_list.txt
1045 rm vmlinux_T.txt
1046 rm module_list.txt
wanwei.jiang2c818dc2022-03-24 17:48:00 +08001047 rm *.ko
wanwei.jiang403c9942021-11-30 18:29:02 +08001048 popd
1049}
1050export -f check_undefined_symbol
Dezhen Wangd40fa552023-04-11 16:13:27 +08001051
1052function reorganized_abi_symbol_list_file() { # delete the extra information but symbol
1053 cat $@ | sed '/^$/d' >> ${symbol_tmp} # remove blank lines
1054 sed -i '/^\[/d' ${symbol_tmp} # remove the title
1055 sed -i '/^\#/d' ${symbol_tmp} # remove the comment
1056}
1057export -f reorganized_abi_symbol_list_file
1058
1059function abi_symbol_list_detect () { # detect symbol information that should be submitted or fix
Dezhen Wang3e94b292023-07-10 20:14:57 +08001060 if [[ "${FULL_KERNEL_VERSION}" = "common13-5.15" ]]; then
1061 symbol_file1=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic
1062 symbol_file2=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.10
1063 symbol_file3=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.debug
1064 symbol_file4=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.illegal
1065 else
1066 symbol_file1=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic
1067 symbol_file2=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic.10
1068 symbol_file3=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic.debug
1069 symbol_file4=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic.illegal
1070 fi
Dezhen Wangd40fa552023-04-11 16:13:27 +08001071
1072 file_list=("${symbol_file1} ${symbol_file2} ${symbol_file3} ${symbol_file4}")
1073 for file in ${file_list}
1074 do
1075 local symbol_tmp=`mktemp tmp.XXXXXXXXXXXX`
1076 reorganized_abi_symbol_list_file "${file}"
1077
1078 if [[ -s ${symbol_tmp} ]]; then
1079 if [[ ${file} =~ abi_gki_aarch64_amlogic.illegal ]]; then
1080 echo "WARNING: The symbols in ${file} are illegal, please deal with them as soon as possible!!!"
1081 else
1082 echo "WARNING: The symbols in ${file} should be submit to google!!!"
1083 fi
1084 cat ${symbol_tmp}
1085 echo -e "\n------------------------------------------------------------"
1086 fi
1087 rm ${symbol_tmp}
1088 done
1089}
1090export -f abi_symbol_list_detect
1091
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001092# adjust_config_action concerns three types of cmd:
1093# parameters:
1094# --menuconfig: make menuconfig manually based on different gki standard
1095# --basicconfig: only config kernel with google original gki_defconfig as base
1096# --check_defconfig: contrast the defconfig generated in out directory with gki_defconfig and show the difference
1097function adjust_config_action () {
1098 if [[ -n ${MENUCONFIG} ]] || [[ -n ${BASICCONFIG} ]] || [[ ${CHECK_DEFCONFIG} -eq "1" ]]; then
1099 # ${ROOT_DIR}/${BUILD_DIR}/config.sh menuconfig
1100 HERMETIC_TOOLCHAIN=0
Dezhen Wang2edb5232023-07-06 14:15:33 +08001101
1102 if [[ "${FULL_KERNEL_VERSION}" = "common13-5.15" ]]; then
1103 source "${ROOT_DIR}/${BUILD_DIR}/build_utils.sh"
1104 source "${ROOT_DIR}/${BUILD_DIR}/_setup_env.sh"
1105 else
1106 source ${ROOT_DIR}/${BUILD_CONFIG}
1107 export COMMON_OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out${OUT_DIR_SUFFIX}/${BRANCH}})
1108 export OUT_DIR=$(readlink -m ${COMMON_OUT_DIR}/${KERNEL_DIR})
1109 fi
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001110
1111 orig_config=$(mktemp)
1112 orig_defconfig=$(mktemp)
1113 out_config="${OUT_DIR}/.config"
1114 out_defconfig="${OUT_DIR}/defconfig"
1115 changed_config=$(mktemp)
1116 changed_defconfig=$(mktemp)
1117
1118 if [[ -n ${BASICCONFIG} ]]; then # config kernel with gki_defconfig or make menuconfig based on it
1119 set -x
1120 defconfig_name=`basename ${GKI_BASE_CONFIG}`
1121 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${defconfig_name})
1122 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1123 cp ${out_config} ${orig_config}
1124 cp ${out_defconfig} ${orig_defconfig}
1125 if [ "${BASICCONFIG}" = "m" ]; then # make menuconfig based on gki_defconfig
1126 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" menuconfig)
1127 fi
1128 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1129 ${KERNEL_DIR}/scripts/diffconfig ${orig_config} ${out_config} > ${changed_config}
1130 ${KERNEL_DIR}/scripts/diffconfig ${orig_defconfig} ${out_defconfig} > ${changed_defconfig}
1131 if [ "${ARCH}" = "arm" ]; then
1132 cp ${out_defconfig} ${GKI_BASE_CONFIG}
1133 fi
1134 set +x # show the difference between the gki_defconfig and the config after make menuconfig
1135 echo
1136 echo "========================================================"
1137 echo "==================== .config diff ===================="
1138 cat ${changed_config}
1139 echo "==================== defconfig diff ===================="
1140 cat ${changed_defconfig}
1141 echo "========================================================"
1142 echo
1143 elif [[ ${CHECK_DEFCONFIG} -eq "1" ]]; then # compare the defconfig generated in out directory with gki_defconfig
1144 set -x
1145 pre_defconfig_cmds
1146 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
1147 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig) # export the defconfig to out directory
1148 diff -u ${ROOT_DIR}/${GKI_BASE_CONFIG} ${OUT_DIR}/defconfig
1149 post_defconfig_cmds
1150 set +x
1151 else # make menuconfig based on config with different gki standard
1152 set -x
1153 pre_defconfig_cmds
1154 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
1155 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1156 cp ${out_config} ${orig_config}
1157 cp ${out_defconfig} ${orig_defconfig}
1158 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" menuconfig)
1159 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1160 ${KERNEL_DIR}/scripts/diffconfig ${orig_config} ${out_config} > ${changed_config}
1161 ${KERNEL_DIR}/scripts/diffconfig ${orig_defconfig} ${out_defconfig} > ${changed_defconfig}
1162 post_defconfig_cmds
1163 set +x
1164 echo
1165 echo "========================================================"
1166 echo "if the config follows GKI2.0, please add it to the file amlogic_gki.fragment manually"
1167 echo "if the config follows GKI1.0 optimize, please add it to the file amlogic_gki.10 manually"
1168 echo "if the config follows GKI1.0 debug, please add it to the file amlogic_gki.debug manually"
1169 echo "==================== .config diff ===================="
1170 cat ${changed_config}
1171 echo "==================== defconfig diff ===================="
1172 cat ${changed_defconfig}
1173 echo "========================================================"
1174 echo
1175 fi
1176 rm -f ${orig_config} ${changed_config} ${orig_defconfig} ${changed_defconfig}
1177 exit
1178 fi
1179}
1180export -f adjust_config_action
1181
1182# function build_part_of_kernel can only build part of kernel such as image modules or dtbs
1183# parameter:
1184# --image: only build image
1185# --modules: only build kernel modules
1186# --dtbs: only build dtbs
1187function build_part_of_kernel () {
1188 if [[ -n ${IMAGE} ]] || [[ -n ${MODULES} ]] || [[ -n ${DTB_BUILD} ]]; then
1189 old_path=${PATH}
Dezhen Wangc5c95c32023-07-09 23:14:12 +08001190 if [[ "${FULL_KERNEL_VERSION}" = "common13-5.15" ]]; then
1191 source "${ROOT_DIR}/${BUILD_DIR}/build_utils.sh"
1192 source "${ROOT_DIR}/${BUILD_DIR}/_setup_env.sh"
1193 else
1194 source ${ROOT_DIR}/${BUILD_CONFIG}
1195 export COMMON_OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out${OUT_DIR_SUFFIX}/${BRANCH}})
1196 export OUT_DIR=$(readlink -m ${COMMON_OUT_DIR}/${KERNEL_DIR})
1197 export DIST_DIR=$(readlink -m ${DIST_DIR:-${COMMON_OUT_DIR}/dist})
1198 tool_args+=("LLVM=1")
1199 tool_args+=("DEPMOD=${DEPMOD}")
1200 fi
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001201
1202 if [[ ! -f ${OUT_DIR}/.config ]]; then
1203 pre_defconfig_cmds
1204 set -x
1205 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
1206 set +x
1207 post_defconfig_cmds
1208 fi
1209
1210 if [[ -n ${IMAGE} ]]; then
1211 set -x
1212 if [ "${ARCH}" = "arm64" ]; then
1213 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) Image)
1214 elif [ "${ARCH}" = "arm" ]; then
1215 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) LOADADDR=0x108000 uImage)
1216 fi
1217 set +x
1218 fi
1219 mkdir -p ${DIST_DIR}
1220 if [[ -n ${DTB_BUILD} ]]; then
1221 set -x
1222 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) dtbs)
1223 set +x
1224 fi
1225 if [[ -n ${MODULES} ]]; then
1226 export MODULES_STAGING_DIR=$(readlink -m ${COMMON_OUT_DIR}/staging)
1227 rm -rf ${MODULES_STAGING_DIR}
1228 mkdir -p ${MODULES_STAGING_DIR}
1229 if [ "${DO_NOT_STRIP_MODULES}" != "1" ]; then
1230 MODULE_STRIP_FLAG="INSTALL_MOD_STRIP=1"
1231 fi
1232 if [[ `grep "CONFIG_AMLOGIC_IN_KERNEL_MODULES=y" ${ROOT_DIR}/${FRAGMENT_CONFIG}` ]]; then
1233 set -x
1234 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) modules)
1235 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} INSTALL_MOD_PATH=${MODULES_STAGING_DIR} "${MAKE_ARGS[@]}" modules_install)
1236 set +x
1237 fi
1238 echo EXT_MODULES=$EXT_MODULES
1239 prepare_module_build
1240 if [[ -z "${SKIP_EXT_MODULES}" ]] && [[ -n "${EXT_MODULES}" ]]; then
1241 echo "========================================================"
1242 echo " Building external modules and installing them into staging directory"
1243 KERNEL_UAPI_HEADERS_DIR=$(readlink -m ${COMMON_OUT_DIR}/kernel_uapi_headers)
1244 for EXT_MOD in ${EXT_MODULES}; do
qinglin.lia40f7b62023-07-26 18:52:35 +08001245 EXT_MOD_REL=$(real_path ${ROOT_DIR}/${EXT_MOD} ${KERNEL_DIR})
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001246 mkdir -p ${OUT_DIR}/${EXT_MOD_REL}
1247 set -x
1248 make -C ${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1249 O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}"
1250 make -C ${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1251 O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} \
1252 INSTALL_MOD_PATH=${MODULES_STAGING_DIR} \
1253 INSTALL_MOD_DIR="extra/${EXT_MOD}" \
1254 INSTALL_HDR_PATH="${KERNEL_UAPI_HEADERS_DIR}/usr" \
1255 "${MAKE_ARGS[@]}" modules_install
1256 set +x
1257 done
1258 fi
1259 export OUT_AMLOGIC_DIR=$(readlink -m ${COMMON_OUT_DIR}/amlogic)
1260 set -x
1261 extra_cmds
1262 set +x
1263 MODULES=$(find ${MODULES_STAGING_DIR} -type f -name "*.ko")
1264 cp -p ${MODULES} ${DIST_DIR}
1265
1266 new_path=${PATH}
1267 PATH=${old_path}
1268 echo "========================================================"
1269 if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then
1270 echo "Rebuild rootfs in order to install modules!"
1271 rebuild_rootfs ${ARCH}
1272 else
1273 echo "There's no file ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot, so don't rebuild rootfs!"
1274 fi
1275 PATH=${new_path}
1276 fi
1277 if [ -n "${DTS_EXT_DIR}" ]; then
1278 if [ -d "${ROOT_DIR}/${DTS_EXT_DIR}" ]; then
qinglin.lia40f7b62023-07-26 18:52:35 +08001279 DTS_EXT_DIR=$(real_path ${ROOT_DIR}/${DTS_EXT_DIR} ${KERNEL_DIR})
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001280 if [ -d ${OUT_DIR}/${DTS_EXT_DIR} ]; then
1281 FILES="$FILES `ls ${OUT_DIR}/${DTS_EXT_DIR}`"
1282 fi
1283 fi
1284 fi
1285 for FILE in ${FILES}; do
1286 if [ -f ${OUT_DIR}/${FILE} ]; then
1287 echo " $FILE"
1288 cp -p ${OUT_DIR}/${FILE} ${DIST_DIR}/
1289 elif [[ "${FILE}" =~ \.dtb|\.dtbo ]] && \
1290 [ -n "${DTS_EXT_DIR}" ] && [ -f "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" ] ; then
1291 # DTS_EXT_DIR is recalculated before to be relative to KERNEL_DIR
1292 echo " $FILE"
1293 cp -p "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" "${DIST_DIR}/"
1294 else
1295 echo " $FILE is not a file, skipping"
1296 fi
1297 done
1298 exit
1299 fi
1300}
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001301export -f build_part_of_kernel
1302
1303function export_env_variable () {
1304 export ABI BUILD_CONFIG LTO KMI_SYMBOL_LIST_STRICT_MODE CHECK_DEFCONFIG MANUAL_INSMOD_MODULE ARCH
qinglin.libce54712023-05-08 13:56:31 +08001305 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 +08001306 export FULL_KERNEL_VERSION BAZEL PREBUILT_GKI KASAN
qinglin.lib71c3202023-08-01 10:29:53 +08001307 export AMLOGIC_R_USER_DIFFCONFIG=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/configs/amlogic_r_user_diff.fragment
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001308
1309 echo ROOT_DIR=$ROOT_DIR
1310 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 +08001311 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 +08001312 echo FULL_KERNEL_VERSION=${FULL_KERNEL_VERSION} BAZEL=${BAZEL} PREBUILT_GKI=${PREBUILT_GKI} KASAN=${KASAN}
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001313 echo MENUCONFIG=${MENUCONFIG} BASICCONFIG=${BASICCONFIG} IMAGE=${IMAGE} MODULES=${MODULES} DTB_BUILD=${DTB_BUILD}
qinglin.lib71c3202023-08-01 10:29:53 +08001314 echo AMLOGIC_R_USER_DIFFCONFIG=${AMLOGIC_R_USER_DIFFCONFIG} CONFIG_BOOTIMAGE=${CONFIG_BOOTIMAGE}
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001315}
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001316export -f export_env_variable
Dezhen Wang850c0d22023-05-31 19:26:20 +08001317
1318function handle_input_parameters () {
1319 VA=
1320 ARGS=()
1321 for i in "$@"
1322 do
1323 case $i in
1324 --arch)
1325 ARCH=$2
1326 VA=1
1327 shift
1328 ;;
1329 --abi)
1330 ABI=1
1331 shift
1332 ;;
1333 --build_config)
1334 BUILD_CONFIG=$2
1335 VA=1
1336 shift
1337 ;;
1338 --lto)
1339 LTO=$2
1340 VA=1
1341 shift
1342 ;;
Qinglin Li8c3c5192023-08-10 20:21:36 -07001343 --symbol_strict)
1344 KMI_SYMBOL_LIST_STRICT_MODE=$2
1345 VA=1
1346 shift
1347 ;;
Dezhen Wang850c0d22023-05-31 19:26:20 +08001348 --menuconfig)
1349 MENUCONFIG=1
1350 shift
1351 ;;
1352 --basicconfig)
1353 if [ "$2" = "m" ] || [ "$2" = "n" ]; then
1354 BASICCONFIG=$2
1355 else
1356 BASICCONFIG="m"
1357 fi
1358 VA=1
1359 shift
1360 ;;
1361 --image)
1362 IMAGE=1
1363 shift
1364 ;;
1365 --modules)
1366 MODULES=1
1367 shift
1368 break
1369 ;;
1370 --dtbs)
1371 DTB_BUILD=1
1372 shift
1373 ;;
1374 --build_dir)
1375 BUILD_DIR=$2
1376 VA=1
1377 shift
1378 ;;
1379 --check_defconfig)
1380 CHECK_DEFCONFIG=1
1381 shift
1382 ;;
1383 --modules_depend)
1384 MODULES_DEPEND=1
1385 shift
1386 ;;
1387 --android_project)
1388 ANDROID_PROJECT=$2
1389 VA=1
1390 shift
1391 ;;
1392 --gki_20)
1393 GKI_CONFIG=gki_20
1394 shift
1395 ;;
1396 --gki_10)
1397 GKI_CONFIG=gki_10
1398 shift
1399 ;;
Dezhen Wang850c0d22023-05-31 19:26:20 +08001400 --fast_build)
1401 FAST_BUILD=1
1402 shift
1403 ;;
1404 --upgrade)
qinglin.li62b23332023-06-25 10:37:41 +08001405 UPGRADE_PROJECT=$2
Dezhen Wang850c0d22023-05-31 19:26:20 +08001406 ANDROID_VERSION=$2
qinglin.li62b23332023-06-25 10:37:41 +08001407 GKI_CONFIG=
Dezhen Wang850c0d22023-05-31 19:26:20 +08001408 VA=1
1409 shift
1410 ;;
1411 --manual_insmod_module)
1412 MANUAL_INSMOD_MODULE=1
1413 shift
1414 ;;
Dezhen Wang850c0d22023-05-31 19:26:20 +08001415 --check_gki_20)
1416 CHECK_GKI_20=1
1417 GKI_CONFIG=gki_20
1418 LTO=none
1419 shift
1420 ;;
1421 --dev_config)
1422 DEV_CONFIGS=$2
1423 VA=1
1424 shift
1425 ;;
Wanwei Jiang0a519f62023-06-30 16:56:28 +08001426 --use_prebuilt_gki)
1427 PREBUILT_GKI=$2
1428 VA=1
Dezhen Wang850c0d22023-05-31 19:26:20 +08001429 shift
1430 ;;
qinglin.li7cf37c02023-07-04 16:06:04 +08001431 --kasan)
1432 KASAN=1
1433 LTO=none
1434 shift
1435 ;;
Dezhen Wang850c0d22023-05-31 19:26:20 +08001436 -h|--help)
1437 show_help
1438 exit 0
1439 ;;
1440 *)
1441 if [[ -n $1 ]];
1442 then
1443 if [[ -z ${VA} ]];
1444 then
1445 ARGS+=("$1")
1446 fi
1447 fi
1448 VA=
1449 shift
1450 ;;
1451 esac
1452 done
1453}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001454export -f handle_input_parameters
1455
1456function set_default_parameters () {
1457 if [ "${ARCH}" = "arm" ]; then
1458 ARGS+=("LOADADDR=0x108000")
1459 else
1460 ARCH=arm64
1461 fi
1462
1463 if [[ -z "${ABI}" ]]; then
1464 ABI=0
1465 fi
1466 if [[ -z "${LTO}" ]]; then
1467 LTO=thin
1468 fi
1469 if [[ -n ${CHECK_GKI_20} && -z ${ANDROID_PROJECT} ]]; then
1470 ANDROID_PROJECT=ohm
1471 fi
1472
1473 if [[ -z "${BUILD_CONFIG}" ]]; then
1474 if [ "${ARCH}" = "arm64" ]; then
1475 BUILD_CONFIG=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic
1476 elif [ "${ARCH}" = "arm" ]; then
1477 BUILD_CONFIG=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic32
1478 fi
1479 fi
1480 if [[ -z "${BUILD_DIR}" ]]; then
1481 BUILD_DIR=build
1482 fi
1483
1484 version_message=$(grep -rn BRANCH= ${KERNEL_DIR}/build.config.constants)
1485 version_message="common${version_message##*android}"
1486 if [[ -n ${FULL_KERNEL_VERSION} ]]; then
1487 if [[ "${FULL_KERNEL_VERSION}" != "${version_message}" ]]; then
1488 echo "kernel version is not match!!"
1489 exit
1490 fi
1491 else
1492 FULL_KERNEL_VERSION=${version_message}
1493 fi
1494
1495 if [[ -z ${BAZEL} ]]; then
qinglin.li62b23332023-06-25 10:37:41 +08001496 [[ "${FULL_KERNEL_VERSION}" != "common13-5.15" && "${ARCH}" == "arm64" ]] && BAZEL=1
Dezhen Wang850c0d22023-05-31 19:26:20 +08001497 fi
1498
1499 auto_patch_to_common_dir
1500
qinglin.lieafebcf2023-06-27 12:48:22 +08001501 if [[ ! -f ${BUILD_DIR}/build_abi.sh && ${BAZEL} == 0 ]]; then
Dezhen Wang850c0d22023-05-31 19:26:20 +08001502 echo "The directory of build does not exist";
1503 exit
1504 fi
1505
1506 ROOT_DIR=$(readlink -f $(dirname $0))
1507 if [[ ! -f ${ROOT_DIR}/${KERNEL_DIR}/init/main.c ]]; then
1508 ROOT_DIR=`pwd`
1509 if [[ ! -f ${ROOT_DIR}/${KERNEL_DIR}/init/main.c ]]; then
1510 echo "the file path of $0 is incorrect"
1511 exit
1512 fi
1513 fi
1514 export ROOT_DIR
1515
1516 CHECK_DEFCONFIG=${CHECK_DEFCONFIG:-0}
1517 MODULES_DEPEND=${MODULES_DEPEND:-0}
1518 if [[ ! -f ${KERNEL_BUILD_VAR_FILE} ]]; then
1519 export KERNEL_BUILD_VAR_FILE=`mktemp /tmp/kernel.XXXXXXXXXXXX`
1520 RM_KERNEL_BUILD_VAR_FILE=1
1521 fi
1522
Dezhen Wang850c0d22023-05-31 19:26:20 +08001523 export CROSS_COMPILE=
1524
1525 if [ "${ABI}" -eq "1" ]; then
1526 export OUT_DIR_SUFFIX="_abi"
1527 else
1528 OUT_DIR_SUFFIX=
1529 fi
1530}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001531export -f set_default_parameters
1532
1533function auto_patch_to_common_dir () {
1534 #first auto patch when param parse end
Dezhen Wang850c0d22023-05-31 19:26:20 +08001535
1536 if [[ -f ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/auto_patch/auto_patch.sh ]]; then
1537 export PATCH_PARM
1538 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/auto_patch/auto_patch.sh ${FULL_KERNEL_VERSION}
Dezhen Wang4e608102023-07-05 18:55:30 +08001539 if [[ $? -ne 0 ]]; then
1540 echo "auto patch error!"
1541 exit 1
1542 fi
Dezhen Wang850c0d22023-05-31 19:26:20 +08001543 fi
1544
1545 if [[ ${ONLY_PATCH} -eq "1" ]]; then
1546 cd ${CURRENT_DIR}
1547 exit
1548 fi
1549}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001550export -f auto_patch_to_common_dir
1551
Dezhen Wang850c0d22023-05-31 19:26:20 +08001552function handle_input_parameters_for_smarthome () {
1553 VA=
1554 ARGS=()
1555 for i in "$@"
1556 do
1557 case $i in
1558 --savedefconfig)
1559 SAVEDEFCONFIG=1
1560 shift
1561 ;;
1562 --menuconfig)
1563 MENUCONFIG=1
1564 shift
1565 ;;
1566 --dtb)
1567 DTB=1
1568 shift
1569 ;;
1570 --manual_insmod_module)
1571 MANUAL_INSMOD_MODULE=1
1572 shift
1573 ;;
1574 --patch)
1575 ONLY_PATCH=1
1576 shift
1577 ;;
1578 -h|--help)
1579 show_help
1580 exit 0
1581 ;;
1582 *)
1583 if [[ -n $1 ]];
1584 then
1585 if [[ -z ${VA} ]];
1586 then
1587 ARGS+=("$1")
1588 fi
1589 fi
1590 VA=
1591 shift
1592 ;;
1593 esac
1594 done
1595}
1596
1597export -f handle_input_parameters_for_smarthome
1598
1599function set_default_parameters_for_smarthome () {
1600 version_message=$(grep -rn BRANCH= ${KERNEL_DIR}/build.config.constants)
1601 version_message="common${version_message##*android}"
1602 if [[ -n ${FULL_KERNEL_VERSION} ]]; then
1603 if [[ "${FULL_KERNEL_VERSION}" != "${version_message}" ]]; then
1604 echo "kernel version is not match!!"
1605 exit
1606 fi
1607 else
1608 FULL_KERNEL_VERSION=${version_message}
1609 fi
1610
1611 tool_args=()
1612 prebuilts_paths=(
1613 CLANG_PREBUILT_BIN
1614 #BUILDTOOLS_PREBUILT_BIN
1615 )
1616 echo CC_CLANG=$CC_CLANG
1617 if [[ $CC_CLANG -eq "1" ]]; then
1618 source ${ROOT_DIR}/${KERNEL_DIR}/build.config.common
1619 if [[ -n "${LLVM}" ]]; then
1620 tool_args+=("LLVM=1")
1621 fi
1622 #if [ -n "${DTC}" ]; then
1623 # tool_args+=("DTC=${DTC}")
1624 #fi
1625 for prebuilt_bin in "${prebuilts_paths[@]}"; do
1626 prebuilt_bin=\${${prebuilt_bin}}
1627 eval prebuilt_bin="${prebuilt_bin}"
1628 if [ -n "${prebuilt_bin}" ]; then
1629 PATH=${PATH//"${ROOT_DIR}\/${prebuilt_bin}:"}
1630 PATH=${ROOT_DIR}/${prebuilt_bin}:${PATH} # add the clang tool to env PATH
1631 fi
1632 done
1633 export PATH
1634 elif [[ -n $CROSS_COMPILE_TOOL ]]; then
1635 export CROSS_COMPILE=${CROSS_COMPILE_TOOL}
1636 fi
1637
1638 if [[ $ARCH == arm64 ]]; then
1639 OUTDIR=${ROOT_DIR}/out/kernel-5.15-64
1640 elif [[ $ARCH == arm ]]; then
1641 OUTDIR=${ROOT_DIR}/out/kernel-5.15-32
Dezhen Wang1176fad2023-06-09 11:22:17 +08001642 tool_args+=("LOADADDR=0x108000")
Dezhen Wang850c0d22023-05-31 19:26:20 +08001643 elif [[ $ARCH == riscv ]]; then
1644 OUTDIR=${ROOT_DIR}/out/riscv-kernel-5.15-64
1645 fi
1646 TOOL_ARGS="${tool_args[@]}"
1647
1648 OUT_DIR=${OUTDIR}/common
1649 mkdir -p ${OUT_DIR}
1650 if [ "${SKIP_RM_OUTDIR}" != "1" ] ; then
1651 rm -rf ${OUTDIR}
1652 fi
1653
1654 echo "========================================================"
1655 echo ""
1656 export DIST_DIR=$(readlink -m ${OUTDIR}/dist)
1657 export MODULES_STAGING_DIR=$(readlink -m ${OUTDIR}/staging)
1658 export OUT_AMLOGIC_DIR=$(readlink -m ${OUTDIR}/amlogic)
1659 echo OUTDIR=$OUTDIR DIST_DIR=$DIST_DIR MODULES_STAGING_DIR=$MODULES_STAGING_DIR KERNEL_DIR=$KERNEL_DIR
1660
1661
1662 source ${ROOT_DIR}/build/kernel/build_utils.sh
1663
1664 DTS_EXT_DIR=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/boot/dts/amlogic
qinglin.lia40f7b62023-07-26 18:52:35 +08001665 DTS_EXT_DIR=$(real_path ${ROOT_DIR}/${DTS_EXT_DIR} ${KERNEL_DIR})
Dezhen Wang850c0d22023-05-31 19:26:20 +08001666 export dtstree=${DTS_EXT_DIR}
1667 export DTC_INCLUDE=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/include
1668
1669 EXT_MODULES="
1670 ${EXT_MODULES}
1671 "
1672
1673 EXT_MODULES_CONFIG="
1674 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/ext_modules_config
1675 "
1676
1677 EXT_MODULES_PATH="
1678 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/ext_modules_path
1679 "
1680
1681 POST_KERNEL_BUILD_CMDS="prepare_module_build"
1682 EXTRA_CMDS="extra_cmds"
1683
1684 IN_KERNEL_MODULES=1
1685}
1686
1687export -f set_default_parameters_for_smarthome
1688
1689function savedefconfig_cmd_for_smarthome () {
1690 if [[ -n ${SAVEDEFCONFIG} ]]; then
1691 set -x
1692 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${DEFCONFIG}
1693 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} savedefconfig
Dezhen Wang1176fad2023-06-09 11:22:17 +08001694 rm ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/configs/${DEFCONFIG}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001695 cp -f ${OUT_DIR}/defconfig ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/configs/${DEFCONFIG}
1696 set +x
1697 exit
1698 fi
1699}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001700export -f savedefconfig_cmd_for_smarthome
1701
1702function only_build_dtb_for_smarthome () {
1703 if [[ -n ${DTB} ]]; then
1704 set -x
1705 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
1706 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs || exit
1707 set +x
1708 exit
1709 fi
1710}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001711export -f only_build_dtb_for_smarthome
1712
1713function make_menuconfig_cmd_for_smarthome () {
1714 if [[ -n ${MENUCONFIG} ]]; then
1715 set -x
1716 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${DEFCONFIG}
1717 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} menuconfig
1718 set +x
1719 exit
1720 fi
1721}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001722export -f make_menuconfig_cmd_for_smarthome
1723
1724function build_kernel_for_different_cpu_architecture () {
1725 set -x
1726 if [[ $ARCH == arm64 ]]; then
1727 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
1728 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} headers_install &&
1729 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} Image -j12 &&
1730 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} modules -j12 &&
1731 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 &&
1732 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs -j12 || exit
Dezhen Wang850c0d22023-05-31 19:26:20 +08001733 elif [[ $ARCH == arm ]]; then
1734 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
1735 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} headers_install &&
1736 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} uImage -j12 &&
1737 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} modules -j12 &&
1738 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 &&
1739 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs -j12 || exit
Dezhen Wang850c0d22023-05-31 19:26:20 +08001740 elif [[ $ARCH == riscv ]]; then
1741 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
1742 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} headers_install &&
1743 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} Image -j12 &&
1744 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} modules -j12 &&
1745 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} INSTALL_MOD_PATH=${MODULES_STAGING_DIR} modules_install -j12 &&
1746 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs -j12 || exit
Dezhen Wang850c0d22023-05-31 19:26:20 +08001747 fi
1748 cp ${OUT_DIR}/arch/${ARCH}/boot/Image* ${DIST_DIR}
1749 cp ${OUT_DIR}/arch/${ARCH}/boot/uImage* ${DIST_DIR}
1750 cp ${OUT_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/boot/dts/amlogic/*.dtb ${DIST_DIR}
1751 cp ${OUT_DIR}/vmlinux ${DIST_DIR}
1752 set +x
1753}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001754export -f build_kernel_for_different_cpu_architecture
1755
1756function build_ext_modules() {
1757 for EXT_MOD in ${EXT_MODULES}; do
qinglin.lia40f7b62023-07-26 18:52:35 +08001758 EXT_MOD_REL=$(real_path ${ROOT_DIR}/${EXT_MOD} ${KERNEL_DIR})
Dezhen Wang850c0d22023-05-31 19:26:20 +08001759 mkdir -p ${OUT_DIR}/${EXT_MOD_REL}
1760
1761 set -x
1762 make ARCH=${ARCH} -C ${ROOT_DIR}/${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1763 O=${OUT_DIR} ${TOOL_ARGS} -j12 || exit
1764 make ARCH=${ARCH} -C ${ROOT_DIR}/${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1765 O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} \
1766 INSTALL_MOD_PATH=${MODULES_STAGING_DIR} \
1767 INSTALL_MOD_DIR="extra/${EXT_MOD}" \
1768 INSTALL_MOD_STRIP=1 \
1769 modules_install -j12 || exit
1770 set +x
1771 done
1772}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001773export -f build_ext_modules
1774
1775function copy_modules_and_rebuild_rootfs_for_smarthome () {
Dezhen Wang1176fad2023-06-09 11:22:17 +08001776
1777 copy_modules_files_to_dist_dir
1778
1779 if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then
1780 echo "========================================================"
1781 echo "Rebuild rootfs in order to install modules!"
1782 rebuild_rootfs ${ARCH}
1783 echo "Build success!"
1784 else
1785 echo "There's no file ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot, so don't rebuild rootfs!"
1786 fi
1787}
1788export -f copy_modules_and_rebuild_rootfs_for_smarthome
1789
1790function copy_modules_files_to_dist_dir () {
Dezhen Wang850c0d22023-05-31 19:26:20 +08001791 MODULES=$(find ${MODULES_STAGING_DIR} -type f -name "*.ko")
1792 if [ -n "${MODULES}" ]; then
1793 if [ -n "${IN_KERNEL_MODULES}" -o -n "${EXT_MODULES}" -o -n "${EXT_MODULES_MAKEFILE}" ]; then
1794 echo "========================================================"
1795 echo " Copying modules files"
1796 for module in ${MODULES}; do
1797 cp ${module} ${DIST_DIR}
1798 done
1799 if [ "${COMPRESS_MODULES}" = "1" ]; then
1800 echo " Archiving modules to ${MODULES_ARCHIVE}"
1801 tar --transform="s,.*/,," -czf ${DIST_DIR}/${MODULES_ARCHIVE} ${MODULES[@]}
1802 fi
1803 fi
Dezhen Wang850c0d22023-05-31 19:26:20 +08001804 fi
1805}
Dezhen Wang1176fad2023-06-09 11:22:17 +08001806export -f copy_modules_files_to_dist_dir
Dezhen Wang850c0d22023-05-31 19:26:20 +08001807
Dezhen Wang1176fad2023-06-09 11:22:17 +08001808function copy_files_to_dist_dir () {
1809 echo "========================================================"
1810 echo " Copying files"
1811 for FILE in ${FILES}; do
1812 if [ -f ${OUT_DIR}/${FILE} ]; then
1813 echo " $FILE"
1814 cp -p ${OUT_DIR}/${FILE} ${DIST_DIR}/
1815 elif [[ "${FILE}" =~ \.dtb|\.dtbo ]] && \
1816 [ -n "${DTS_EXT_DIR}" ] && [ -f "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" ] ; then
1817 # DTS_EXT_DIR is recalculated before to be relative to KERNEL_DIR
1818 echo " $FILE"
1819 cp -p "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" "${DIST_DIR}/"
1820 else
1821 echo " $FILE is not a file, skipping"
1822 fi
1823 done
1824}
1825export -f copy_files_to_dist_dir
1826
1827function make_dtbo() {
1828 if [[ -n "${BUILD_DTBO_IMG}" ]]; then
1829 echo "========================================================"
1830 echo " Creating dtbo image at ${DIST_DIR}/dtbo.img"
1831 (
1832 cd ${OUT_DIR}
1833 mkdtimg create "${DIST_DIR}"/dtbo.img ${MKDTIMG_FLAGS} ${MKDTIMG_DTBOS}
1834 )
1835 fi
1836}
1837export -f make_dtbo
1838
1839function installing_UAPI_kernel_headers () {
1840 if [ -z "${SKIP_CP_KERNEL_HDR}" ]; then
1841 echo "========================================================"
1842 echo " Installing UAPI kernel headers:"
1843 mkdir -p "${KERNEL_UAPI_HEADERS_DIR}/usr"
1844 make -C ${OUT_DIR} O=${OUT_DIR} ${TOOL_ARGS} \
1845 INSTALL_HDR_PATH="${KERNEL_UAPI_HEADERS_DIR}/usr" "${MAKE_ARGS[@]}" \
1846 headers_install
1847 # The kernel makefiles create files named ..install.cmd and .install which
1848 # are only side products. We don't want those. Let's delete them.
1849 find ${KERNEL_UAPI_HEADERS_DIR} \( -name ..install.cmd -o -name .install \) -exec rm '{}' +
1850 KERNEL_UAPI_HEADERS_TAR=${DIST_DIR}/kernel-uapi-headers.tar.gz
1851 echo " Copying kernel UAPI headers to ${KERNEL_UAPI_HEADERS_TAR}"
1852 tar -czf ${KERNEL_UAPI_HEADERS_TAR} --directory=${KERNEL_UAPI_HEADERS_DIR} usr/
1853 fi
1854}
1855export -f installing_UAPI_kernel_headers
1856
1857function copy_kernel_headers_to_compress () {
1858 if [ -z "${SKIP_CP_KERNEL_HDR}" ] ; then
1859 echo "========================================================"
1860 KERNEL_HEADERS_TAR=${DIST_DIR}/kernel-headers.tar.gz
1861 echo " Copying kernel headers to ${KERNEL_HEADERS_TAR}"
1862 pushd $ROOT_DIR/$KERNEL_DIR
1863 find arch include $OUT_DIR -name *.h -print0 \
1864 | tar -czf $KERNEL_HEADERS_TAR \
1865 --absolute-names \
1866 --dereference \
1867 --transform "s,.*$OUT_DIR,," \
1868 --transform "s,^,kernel-headers/," \
1869 --null -T -
1870 popd
1871 fi
1872}
1873export -f copy_kernel_headers_to_compress
1874
1875function set_default_parameters_for_32bit () {
1876 tool_args=()
1877 prebuilts_paths=(
1878 CLANG_PREBUILT_BIN
1879 CLANGTOOLS_PREBUILT_BIN
1880 RUST_PREBUILT_BIN
1881 LZ4_PREBUILTS_BIN
1882 DTC_PREBUILTS_BIN
1883 LIBUFDT_PREBUILTS_BIN
1884 BUILDTOOLS_PREBUILT_BIN
1885 )
1886 echo CC_CLANG=$CC_CLANG
1887 if [[ $CC_CLANG -eq "1" ]]; then
1888 source ${ROOT_DIR}/${KERNEL_DIR}/build.config.common
1889 if [[ -n "${LLVM}" ]]; then
1890 tool_args+=("LLVM=1")
1891 # Reset a bunch of variables that the kernel's top level Makefile does, just
1892 # in case someone tries to use these binaries in this script such as in
1893 # initramfs generation below.
1894 HOSTCC=clang
1895 HOSTCXX=clang++
1896 CC=clang
1897 LD=ld.lld
1898 AR=llvm-ar
1899 NM=llvm-nm
1900 OBJCOPY=llvm-objcopy
1901 OBJDUMP=llvm-objdump
1902 OBJSIZE=llvm-size
1903 READELF=llvm-readelf
1904 STRIP=llvm-strip
1905 else
1906 if [ -n "${HOSTCC}" ]; then
1907 tool_args+=("HOSTCC=${HOSTCC}")
1908 fi
1909
1910 if [ -n "${CC}" ]; then
1911 tool_args+=("CC=${CC}")
1912 if [ -z "${HOSTCC}" ]; then
1913 tool_args+=("HOSTCC=${CC}")
1914 fi
1915 fi
1916
1917 if [ -n "${LD}" ]; then
1918 tool_args+=("LD=${LD}" "HOSTLD=${LD}")
1919 fi
1920
1921 if [ -n "${NM}" ]; then
1922 tool_args+=("NM=${NM}")
1923 fi
1924
1925 if [ -n "${OBJCOPY}" ]; then
1926 tool_args+=("OBJCOPY=${OBJCOPY}")
1927 fi
1928 fi
1929
1930 if [ -n "${DTC}" ]; then
1931 tool_args+=("DTC=${DTC}")
1932 fi
1933 for prebuilt_bin in "${prebuilts_paths[@]}"; do
1934 prebuilt_bin=\${${prebuilt_bin}}
1935 eval prebuilt_bin="${prebuilt_bin}"
1936 if [ -n "${prebuilt_bin}" ]; then
1937 PATH=${PATH//"${ROOT_DIR}\/${prebuilt_bin}:"}
1938 PATH=${ROOT_DIR}/${prebuilt_bin}:${PATH} # add the clang tool to env PATH
1939 fi
1940 done
1941 export PATH
1942 elif [[ -n $CROSS_COMPILE_TOOL ]]; then
1943 export CROSS_COMPILE=${CROSS_COMPILE_TOOL}
1944 fi
1945
1946 # Have host compiler use LLD and compiler-rt.
1947 LLD_COMPILER_RT="-fuse-ld=lld --rtlib=compiler-rt"
1948 if [[ -n "${NDK_TRIPLE}" ]]; then
1949 NDK_DIR=${ROOT_DIR}/prebuilts/ndk-r23
1950
1951 if [[ ! -d "${NDK_DIR}" ]]; then
1952 # Kleaf/Bazel will checkout the ndk to a different directory than
1953 # build.sh.
1954 NDK_DIR=${ROOT_DIR}/external/prebuilt_ndk
1955 if [[ ! -d "${NDK_DIR}" ]]; then
1956 echo "ERROR: NDK_TRIPLE set, but unable to find prebuilts/ndk." 1>&2
1957 echo "Did you forget to checkout prebuilts/ndk?" 1>&2
1958 exit 1
1959 fi
1960 fi
1961 USERCFLAGS="--target=${NDK_TRIPLE} "
1962 USERCFLAGS+="--sysroot=${NDK_DIR}/toolchains/llvm/prebuilt/linux-x86_64/sysroot "
1963 # Some kernel headers trigger -Wunused-function for unused static functions
1964 # with clang; GCC does not warn about unused static inline functions. The
1965 # kernel sets __attribute__((maybe_unused)) on such functions when W=1 is
1966 # not set.
1967 USERCFLAGS+="-Wno-unused-function "
1968 # To help debug these flags, consider commenting back in the following, and
1969 # add `echo $@ > /tmp/log.txt` and `2>>/tmp/log.txt` to the invocation of $@
1970 # in scripts/cc-can-link.sh.
1971 #USERCFLAGS+=" -Wl,--verbose -v"
1972 # We need to set -fuse-ld=lld for Android's build env since AOSP LLVM's
1973 # clang is not configured to use LLD by default, and BFD has been
1974 # intentionally removed. This way CC_CAN_LINK can properly link the test in
1975 # scripts/cc-can-link.sh.
1976 USERLDFLAGS="${LLD_COMPILER_RT} "
1977 USERLDFLAGS+="--target=${NDK_TRIPLE} "
1978 else
1979 USERCFLAGS="--sysroot=/dev/null"
1980 fi
1981
1982 #setting_the_default_output_dir
1983 export COMMON_OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out${OUT_DIR_SUFFIX}/${BRANCH}})
1984 export OUT_DIR=$(readlink -m ${COMMON_OUT_DIR}/${KERNEL_DIR})
1985 export DIST_DIR=$(readlink -m ${DIST_DIR:-${COMMON_OUT_DIR}/dist})
1986 export UNSTRIPPED_DIR=${DIST_DIR}/unstripped
1987 export UNSTRIPPED_MODULES_ARCHIVE=unstripped_modules.tar.gz
1988 export MODULES_ARCHIVE=modules.tar.gz
1989 export MODULES_STAGING_DIR=$(readlink -m ${COMMON_OUT_DIR}/staging)
1990 export MODULES_PRIVATE_DIR=$(readlink -m ${COMMON_OUT_DIR}/private)
1991 export KERNEL_UAPI_HEADERS_DIR=$(readlink -m ${COMMON_OUT_DIR}/kernel_uapi_headers)
1992 export INITRAMFS_STAGING_DIR=${MODULES_STAGING_DIR}/initramfs_staging
1993 export SYSTEM_DLKM_STAGING_DIR=${MODULES_STAGING_DIR}/system_dlkm_staging
1994 export VENDOR_DLKM_STAGING_DIR=${MODULES_STAGING_DIR}/vendor_dlkm_staging
1995 export MKBOOTIMG_STAGING_DIR="${MODULES_STAGING_DIR}/mkbootimg_staging"
1996 export OUT_AMLOGIC_DIR=$(readlink -m ${COMMON_OUT_DIR}/amlogic)
1997
1998 tool_args+=("LOADADDR=0x108000")
1999 tool_args+=("DEPMOD=depmod")
Wanwei Jiang0bde3122023-07-20 10:24:07 +08002000 tool_args+=("KCONFIG_EXT_MODULES_PREFIX=${KCONFIG_EXT_MODULES_PREFIX}")
2001 tool_args+=("KCONFIG_EXT_PREFIX=${KCONFIG_EXT_PREFIX}")
Dezhen Wang1176fad2023-06-09 11:22:17 +08002002 TOOL_ARGS="${tool_args[@]}"
2003
2004 mkdir -p ${OUT_DIR}
2005 if [ "${SKIP_RM_OUTDIR}" != "1" ] ; then
2006 rm -rf ${COMMON_OUT_DIR}
2007 fi
2008
2009 source ${ROOT_DIR}/build/kernel/build_utils.sh
2010
2011 DTS_EXT_DIR=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/boot/dts/amlogic
qinglin.lia40f7b62023-07-26 18:52:35 +08002012 DTS_EXT_DIR=$(real_path ${ROOT_DIR}/${DTS_EXT_DIR} ${KERNEL_DIR})
Dezhen Wang1176fad2023-06-09 11:22:17 +08002013 export dtstree=${DTS_EXT_DIR}
2014 export DTC_INCLUDE=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/include
2015
2016 EXT_MODULES="
2017 ${EXT_MODULES}
2018 "
2019
2020 EXT_MODULES_CONFIG="
2021 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/ext_modules_config
2022 "
2023
2024 EXT_MODULES_PATH="
2025 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/ext_modules_path
2026 "
2027
2028 POST_KERNEL_BUILD_CMDS="prepare_module_build"
2029 EXTRA_CMDS="extra_cmds"
2030
2031 IN_KERNEL_MODULES=1
2032}
2033export -f set_default_parameters_for_32bit
2034
2035function generating_test_mappings_zip () {
2036 echo "========================================================"
2037 echo " Generating test_mappings.zip"
2038 TEST_MAPPING_FILES=${OUT_DIR}/test_mapping_files.txt
2039 find ${ROOT_DIR} -name TEST_MAPPING \
2040 -not -path "${ROOT_DIR}/\.git*" \
2041 -not -path "${ROOT_DIR}/\.repo*" \
2042 -not -path "${ROOT_DIR}/out*" \
2043 > ${TEST_MAPPING_FILES}
2044 soong_zip -o ${DIST_DIR}/test_mappings.zip -C ${ROOT_DIR} -l ${TEST_MAPPING_FILES}
2045}
2046export -f generating_test_mappings_zip
2047
Dezhen Wang42c6bf82023-07-20 10:16:49 +08002048function setting_up_for_build () {
2049 echo "========================================================"
2050 echo " Setting up for build"
2051 if [ "${SKIP_MRPROPER}" != "1" ] ; then
2052 set -x
2053 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" mrproper)
2054 set +x
2055 fi
2056}
2057export -f setting_up_for_build
2058
2059function build_kernel_for_32bit () {
2060 set -x
2061 if [ "${SKIP_DEFCONFIG}" != "1" ] ; then
2062 (cd ${KERNEL_DIR} && make ARCH=arm ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
2063 fi
2064
2065 echo "========================================================"
2066 echo " Building kernel"
2067
2068 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} uImage -j12 &&
2069 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} modules -j12 &&
2070 if [[ -n ${ANDROID_PROJECT} ]]; then
2071 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} android_overlay_dt.dtbo -j12
2072 fi
2073 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs -j12 || exit
2074 set +x
2075}
2076export -f build_kernel_for_32bit
2077
2078function modules_install_for_32bit () {
2079 set -x
2080 if [ "${BUILD_INITRAMFS}" = "1" -o -n "${IN_KERNEL_MODULES}" ]; then
2081 echo "========================================================"
2082 echo " Installing kernel modules into staging directory"
2083
2084 (cd ${OUT_DIR} && make ARCH=arm O=${OUT_DIR} ${TOOL_ARGS} INSTALL_MOD_STRIP=1 \
2085 INSTALL_MOD_PATH=${MODULES_STAGING_DIR} modules_install)
2086 fi
2087 set +x
2088}
2089export -f modules_install_for_32bit