blob: e490069ad9aa0517337e6ad47f7d9b9920b37f5c [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
wanwei.jiang91776952021-11-19 13:10:32 +080085}
86export -f pre_defconfig_cmds
87
88function post_defconfig_cmds() {
Wanwei Jiang2d4f9742022-09-13 11:22:17 +080089 rm ${ROOT_DIR}/${KCONFIG_DEFCONFIG}
wanwei.jiang91776952021-11-19 13:10:32 +080090}
91export -f post_defconfig_cmds
92
93function read_ext_module_config() {
94 ALL_LINE=""
95 while read LINE
96 do
97 if [[ $LINE != \#* && $LINE != "" ]]; then
98 ALL_LINE="$ALL_LINE"" ""$LINE"
99 fi
100 done < $1
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800101
102 echo "${ALL_LINE}"
wanwei.jiang91776952021-11-19 13:10:32 +0800103}
104
pengzhao.liua923dea2023-06-25 09:58:20 +0800105function autotest(){
106 if [[ -d ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/ ]]; then
107 if [[ ! -f ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/pre-commit ]]; then
108 cp ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/pre-commit ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/pre-commit
109 cp ${KERNEL_DIR}/scripts/amlogic/pre-commit ${KERNEL_DIR}/.git/hooks/pre-commit
110 chmod +x ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/pre-commit
111 chmod +x ${KERNEL_DIR}/.git/hooks/pre-commit
112 fi
113 fi
114}
115
wanwei.jiang91776952021-11-19 13:10:32 +0800116function read_ext_module_predefine() {
117 PRE_DEFINE=""
118
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800119 for y_config in `cat $1 | grep "^CONFIG_.*=y" | sed 's/=y//'`; do
wanwei.jiang91776952021-11-19 13:10:32 +0800120 PRE_DEFINE="$PRE_DEFINE"" -D"${y_config}
121 done
122
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800123 for m_config in `cat $1 | grep "^CONFIG_.*=m" | sed 's/=m//'`; do
wanwei.jiang91776952021-11-19 13:10:32 +0800124 PRE_DEFINE="$PRE_DEFINE"" -D"${m_config}_MODULE
125 done
126
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800127 echo "${PRE_DEFINE}"
wanwei.jiang91776952021-11-19 13:10:32 +0800128}
129
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800130top_ext_drivers=top_ext_drivers
wanwei.jiang91776952021-11-19 13:10:32 +0800131function prepare_module_build() {
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800132 local temp_file=`mktemp /tmp/kernel.XXXXXXXXXXXX`
Wanwei Jiang0a74fb12022-12-09 16:27:40 +0800133 if [[ ! `grep "CONFIG_AMLOGIC_IN_KERNEL_MODULES=y" ${ROOT_DIR}/${FRAGMENT_CONFIG}` ]]; then
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800134 sed 's:#.*$::g' ${ROOT_DIR}/${FRAGMENT_CONFIG} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
135 GKI_EXT_KERNEL_MODULE_CONFIG=$(read_ext_module_config ${temp_file})
136 GKI_EXT_KERNEL_MODULE_PREDEFINE=$(read_ext_module_predefine ${temp_file})
137 export GKI_EXT_KERNEL_MODULE_CONFIG GKI_EXT_KERNEL_MODULE_PREDEFINE
wanwei.jiang91776952021-11-19 13:10:32 +0800138 fi
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800139
140 for ext_module_config in ${EXT_MODULES_CONFIG}; do
141 sed 's:#.*$::g' ${ROOT_DIR}/${ext_module_config} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
142 GKI_EXT_MODULE_CONFIG=$(read_ext_module_config ${temp_file})
143 GKI_EXT_MODULE_PREDEFINE=$(read_ext_module_predefine ${temp_file})
144 done
145 export GKI_EXT_MODULE_CONFIG GKI_EXT_MODULE_PREDEFINE
146 echo GKI_EXT_MODULE_CONFIG=${GKI_EXT_MODULE_CONFIG}
147 echo GKI_EXT_MODULE_PREDEFINE=${GKI_EXT_MODULE_PREDEFINE}
148
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800149 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
150 if [[ -d ${top_ext_drivers} ]]; then
151 rm -rf ${top_ext_drivers}
152 fi
153 mkdir -p ${top_ext_drivers}
154 fi
155
156 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
157 extra_symbols="KBUILD_EXTRA_SYMBOLS +="
158 fi
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800159 ext_modules=
160 for ext_module in ${EXT_MODULES}; do
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800161 module_abs_path=`readlink -e ${ext_module}`
qinglin.lia40f7b62023-07-26 18:52:35 +0800162 module_rel_path=$(real_path ${module_abs_path} ${ROOT_DIR})
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800163 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
164 if [[ `echo ${module_rel_path} | grep "\.\.\/"` ]]; then
165 cp -rf ${module_abs_path} ${top_ext_drivers}
166 module_rel_path=${top_ext_drivers}/${module_abs_path##*/}
167 fi
168 fi
169 ext_modules="${ext_modules} ${module_rel_path}"
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800170 done
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800171
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800172 for ext_module_path in ${EXT_MODULES_PATH}; do
173 sed 's:#.*$::g' ${ROOT_DIR}/${ext_module_path} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800174 while read LINE
175 do
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800176 module_abs_path=`readlink -e ${LINE}`
qinglin.lia40f7b62023-07-26 18:52:35 +0800177 module_rel_path=$(real_path ${module_abs_path} ${ROOT_DIR})
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800178 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
179 if [[ `echo ${module_rel_path} | grep "\.\.\/"` ]]; then
180 cp -rf ${module_abs_path} ${top_ext_drivers}
181 module_rel_path=${top_ext_drivers}/${module_abs_path##*/}
182 fi
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800183 fi
184 ext_modules="${ext_modules} ${module_rel_path}"
185
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800186 done < ${temp_file}
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800187 done
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800188 EXT_MODULES=${ext_modules}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800189
190 local flag=0
191 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
192 for ext_module in ${EXT_MODULES}; do
qinglin.lia40f7b62023-07-26 18:52:35 +0800193 ext_mod_rel=$(real_path ${ext_module} ${KERNEL_DIR})
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800194 if [[ ${flag} -eq "1" ]]; then
195 sed -i "/# auto add KBUILD_EXTRA_SYMBOLS start/,/# auto add KBUILD_EXTRA_SYMBOLS end/d" ${ext_module}/Makefile
196 sed -i "2 i # auto add KBUILD_EXTRA_SYMBOLS end" ${ext_module}/Makefile
197 sed -i "2 i ${extra_symbols}" ${ext_module}/Makefile
198 sed -i "2 i # auto add KBUILD_EXTRA_SYMBOLS start" ${ext_module}/Makefile
199 echo "${ext_module}/Makefile add: ${extra_symbols}"
200 fi
201 extra_symbols="${extra_symbols} ${ext_mod_rel}/Module.symvers"
202 flag=1
203 done
204 fi
205
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800206 export EXT_MODULES
207 echo EXT_MODULES=${EXT_MODULES}
208
209 rm ${temp_file}
wanwei.jiang91776952021-11-19 13:10:32 +0800210}
wanwei.jiang91776952021-11-19 13:10:32 +0800211export -f prepare_module_build
wanwei.jiang612a8882021-11-23 17:12:23 +0800212
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800213function extra_cmds() {
Dezhen Wang1176fad2023-06-09 11:22:17 +0800214 echo "========================================================"
215 echo " Running extra build command(s):"
216
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800217 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
218 for ext_module in ${EXT_MODULES}; do
219 sed -i "/# auto add KBUILD_EXTRA_SYMBOLS start/,/# auto add KBUILD_EXTRA_SYMBOLS end/d" ${ext_module}/Makefile
220 done
221 fi
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800222
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800223 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
224 if [[ -d ${top_ext_drivers} ]]; then
225 rm -rf ${top_ext_drivers}
226 fi
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800227 fi
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800228
229 for FILE in ${FILES}; do
230 if [[ "${FILE}" =~ \.dtbo ]] && \
231 [ -n "${DTS_EXT_DIR}" ] && [ -f "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" ] ; then
232 MKDTIMG_DTBOS="${MKDTIMG_DTBOS} ${DIST_DIR}/${FILE}"
233 fi
234 done
235 export MKDTIMG_DTBOS
236
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800237 set +x
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800238 modules_install
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800239 set -x
240
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800241 local src_dir=$(echo ${MODULES_STAGING_DIR}/lib/modules/*)
242 pushd ${src_dir}
wanwei.jiangf73b2202022-07-23 16:00:44 +0800243 cp modules.order modules_order.back
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800244 : > modules.order
Wanwei Jiang571dde62022-11-17 14:37:41 +0800245 set +x
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800246 while read LINE
247 do
248 find -name ${LINE} >> modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800249 done < ${OUT_AMLOGIC_DIR}/modules/modules.order
Wanwei Jiang571dde62022-11-17 14:37:41 +0800250 set -x
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800251 sed -i "s/^\.\///" modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800252 : > ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800253 ext_modules=
254 for ext_module in ${EXT_MODULES}; do
255 if [[ ${ext_module} =~ "../" ]]; then
256 ext_module_old=${ext_module}
257 ext_module=${ext_module//\.\.\//}
258 ext_dir=$(dirname ${ext_module})
259 [[ -d extra/${ext_module} ]] && rm -rf extra/${ext_dir}
260 mkdir -p extra/${ext_dir}
261 cp -rf extra/${ext_module_old} extra/${ext_dir}
262
263 ext_modules_order_file=$(ls extra/${ext_module}/modules.order.*)
264 ext_dir_top=${ext_module%/*}
wanwei.jiangf73b2202022-07-23 16:00:44 +0800265 sed -i "s/\.\.\///g" ${ext_modules_order_file}
266 cat ${ext_modules_order_file} >> modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800267 cat ${ext_modules_order_file} | awk -F/ '{print $NF}' >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
wanwei.jiangf73b2202022-07-23 16:00:44 +0800268 : > ${ext_modules_order_file}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800269 else
270 ext_modules_order_file=$(ls extra/${ext_module}/modules.order.*)
wanwei.jiangf73b2202022-07-23 16:00:44 +0800271 cat ${ext_modules_order_file} >> modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800272 cat ${ext_modules_order_file} | awk -F/ '{print $NF}' >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
wanwei.jiangf73b2202022-07-23 16:00:44 +0800273 : > ${ext_modules_order_file}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800274 fi
275 ext_modules="${ext_modules} ${ext_module}"
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800276 done
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800277 EXT_MODULES=${ext_modules}
278 echo EXT_MODULES=${EXT_MODULES}
279 export EXT_MODULES
wanwei.jiangf73b2202022-07-23 16:00:44 +0800280
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800281 head -n ${ramdisk_last_line} modules.order > vendor_boot_modules
wanwei.jiangf73b2202022-07-23 16:00:44 +0800282 file_last_line=`sed -n "$=" modules.order`
283 let line=${file_last_line}-${ramdisk_last_line}
284 tail -n ${line} modules.order > vendor_dlkm_modules
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800285 export MODULES_LIST=${src_dir}/vendor_boot_modules
286 if [[ "${ARCH}" = "arm64" && -z ${FAST_BUILD} ]]; then
Lei Zhang96efea62022-09-02 14:55:06 +0800287 export VENDOR_DLKM_MODULES_LIST=${src_dir}/vendor_dlkm_modules
288 fi
wanwei.jiangf73b2202022-07-23 16:00:44 +0800289
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800290 popd
wanwei.jiang1d154992022-05-30 14:56:26 +0800291
Wanwei Jiang0a74fb12022-12-09 16:27:40 +0800292 if [[ -z ${ANDROID_PROJECT} ]] && [[ -d ${OUT_DIR}/${DTS_EXT_DIR} ]]; then
wanwei.jiang1d154992022-05-30 14:56:26 +0800293 FILES="$FILES `ls ${OUT_DIR}/${DTS_EXT_DIR}`"
294 fi
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800295
296 if [[ -f ${KERNEL_BUILD_VAR_FILE} ]]; then
297 : > ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiangb2ed83c2022-09-09 14:01:20 +0800298 echo "KERNEL_DIR=${KERNEL_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800299 echo "COMMON_OUT_DIR=${COMMON_OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
300 echo "OUT_DIR=${OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
301 echo "DIST_DIR=${DIST_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800302 echo "OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800303 echo "MODULES_STAGING_DIR=${MODULES_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
304 echo "MODULES_PRIVATE_DIR=${MODULES_PRIVATE_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
305 echo "INITRAMFS_STAGING_DIR=${INITRAMFS_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
306 echo "SYSTEM_DLKM_STAGING_DIR=${SYSTEM_DLKM_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
307 echo "VENDOR_DLKM_STAGING_DIR=${VENDOR_DLKM_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
308 echo "MKBOOTIMG_STAGING_DIR=${MKBOOTIMG_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800309 echo "DIST_GKI_DIR=${DIST_GKI_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
310 echo "FULL_KERNEL_VERSION=${FULL_KERNEL_VERSION}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8fe00342023-05-16 22:53:14 +0800311 echo "GKI_MODULES_LOAD_WHITE_LIST=\"${GKI_MODULES_LOAD_WHITE_LIST[*]}\"" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8042e472023-06-06 14:12:32 +0800312 echo "BAZEL=${BAZEL}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800313 fi
Wanwei Jianga07f9a52022-09-30 18:40:40 +0800314
315 for module_path in ${PREBUILT_MODULES_PATH}; do
316 find ${module_path} -type f -name "*.ko" -exec cp {} ${DIST_DIR} \;
317 done
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800318}
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800319export -f extra_cmds
320
Wanwei Jiang2218b892023-03-17 17:31:21 +0800321function bazel_extra_cmds() {
322 modules_install
323
324 if [[ -f ${KERNEL_BUILD_VAR_FILE} ]]; then
325 : > ${KERNEL_BUILD_VAR_FILE}
326 echo "KERNEL_DIR=${KERNEL_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
327 echo "COMMON_OUT_DIR=${COMMON_OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
328 echo "DIST_DIR=${DIST_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
329 echo "OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8fe00342023-05-16 22:53:14 +0800330 echo "GKI_MODULES_LOAD_WHITE_LIST=\"${GKI_MODULES_LOAD_WHITE_LIST[*]}\"" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8042e472023-06-06 14:12:32 +0800331 echo "BAZEL=${BAZEL}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang2218b892023-03-17 17:31:21 +0800332 fi
333
334 if [[ ${GKI_CONFIG} != gki_20 ]]; then
335 [[ -f ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz ]] && rm -f ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz
336 mv ${DIST_DIR}/system_dlkm_staging_archive.tar.gz ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz
337 [[ -d ${DIST_DIR}/system_dlkm_gki10 ]] && rm -rf ${DIST_DIR}/system_dlkm_gki10
338 mkdir ${DIST_DIR}/system_dlkm_gki10
339 pushd ${DIST_DIR}/system_dlkm_gki10
340 tar zxf ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz
341 find -name "*.ko" | while read module; do
Wanwei Jiang475245b2023-05-10 21:06:52 +0800342 module_name=${module##*/}
Wanwei Jiang2218b892023-03-17 17:31:21 +0800343 if [[ ! `grep "/${module_name}" ${DIST_DIR}/system_dlkm.modules.load` ]]; then
344 rm -f ${module}
345 fi
346 done
347 tar czf ${DIST_DIR}/system_dlkm_staging_archive.tar.gz lib
348 popd
349 rm -rf ${DIST_DIR}/system_dlkm_gki10
350 fi
351}
352
353export -f bazel_extra_cmds
354
wanwei.jiang612a8882021-11-23 17:12:23 +0800355function mod_probe() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800356 local ko=$1
357 local loop
qinglin.lia284a932022-09-21 18:07:38 +0800358 for loop in `grep "^$ko:" modules.dep | sed 's/.*://'`; do
Wanwei Jiang16554d02023-07-14 17:01:00 +0800359 [[ `grep $loop __install.sh` ]] && continue
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800360 mod_probe $loop
361 echo insmod $loop >> __install.sh
362 done
wanwei.jiang612a8882021-11-23 17:12:23 +0800363}
364
Wanwei Jiang571dde62022-11-17 14:37:41 +0800365function mod_probe_recovery() {
366 local ko=$1
367 local loop
368 for loop in `grep "^$ko:" modules_recovery.dep | sed 's/.*://'`; do
Wanwei Jiang16554d02023-07-14 17:01:00 +0800369 [[ `grep $loop __install_recovery.sh` ]] && continue
Wanwei Jiang571dde62022-11-17 14:37:41 +0800370 mod_probe_recovery $loop
371 echo insmod $loop >> __install_recovery.sh
372 done
373}
374
wanwei.jiangb12abc82021-12-25 22:17:10 +0800375function adjust_sequence_modules_loading() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800376 if [[ -n $1 ]]; then
377 chips=$1
wanwei.jiangb12abc82021-12-25 22:17:10 +0800378 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800379
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800380 cp modules.dep modules.dep.temp
381
382 soc_module=()
383 for chip in ${chips[@]}; do
384 chip_module=`ls amlogic-*-soc-${chip}.ko`
385 soc_module=(${soc_module[@]} ${chip_module[@]})
386 done
387 echo soc_module=${soc_module[*]}
388
389 delete_soc_module=()
390 if [[ ${#soc_module[@]} == 0 ]]; then
391 echo "Use all soc module"
392 else
393 for module in `ls amlogic-*-soc-*`; do
394 if [[ ! "${soc_module[@]}" =~ "${module}" ]] ; then
395 echo Delete soc module: ${module}
396 sed -n "/${module}:/p" modules.dep.temp
397 sed -i "/${module}:/d" modules.dep.temp
398 delete_soc_module=(${delete_soc_module[@]} ${module})
399 fi
400 done
401 echo delete_soc_module=${delete_soc_module[*]}
402 fi
403
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800404 if [[ -n ${CLK_SOC_MODULE} ]]; then
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800405 delete_clk_soc_modules=()
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800406 for module in `ls amlogic-clk-soc-*`; do
407 if [[ "${CLK_SOC_MODULE}" != "${module}" ]] ; then
408 echo Delete clk soc module: ${module}
409 sed -n "/${module}:/p" modules.dep.temp
410 sed -i "/${module}:/d" modules.dep.temp
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800411 delete_clk_soc_modules=(${delete_clk_soc_modules[@]} ${module})
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800412 fi
413 done
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800414 echo delete_clk_soc_modules=${delete_clk_soc_modules[*]}
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800415 fi
416
417 if [[ -n ${PINCTRL_SOC_MODULE} ]]; then
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800418 delete_pinctrl_soc_modules=()
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800419 for module in `ls amlogic-pinctrl-soc-*`; do
420 if [[ "${PINCTRL_SOC_MODULE}" != "${module}" ]] ; then
421 echo Delete pinctrl soc module: ${module}
422 sed -n "/${module}:/p" modules.dep.temp
423 sed -i "/${module}:/d" modules.dep.temp
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800424 delete_pinctrl_soc_modules=(${delete_pinctrl_soc_modules[@]} ${module})
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800425 fi
426 done
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800427 echo delete_pinctrl_soc_modules=${delete_pinctrl_soc_modules[*]}
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800428 fi
429
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800430 in_line_i=a
431 delete_type_modules=()
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800432 [[ -z ${TYPE_MODULE_SELECT_MODULE} ]] && TYPE_MODULE_SELECT_MODULE=${TYPE_MODULE_SELECT_MODULE_ANDROID}
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800433 echo "TYPE_MODULE_SELECT_MODULE=${TYPE_MODULE_SELECT_MODULE}"
434 mkdir temp_dir
435 cd temp_dir
436 in_temp_dir=y
437 for element in ${TYPE_MODULE_SELECT_MODULE}; do
438 if [[ ${in_temp_dir} = y ]]; then
439 cd ../
440 rm -r temp_dir
441 in_temp_dir=
442 fi
443 if [[ ${in_line_i} = a ]]; then
444 in_line_i=b
445 type_module=${element}
446 select_modules_i=0
447 select_modules_count=
448 select_modules=
449 elif [[ ${in_line_i} = b ]]; then
450 in_line_i=c
451 select_modules_count=${element}
452 else
453 let select_modules_i+=1
454 select_modules="${select_modules} ${element}"
455 if [[ ${select_modules_i} -eq ${select_modules_count} ]]; then
456 in_line_i=a
457 echo type_module=$type_module select_modules=$select_modules
458 for module in `ls ${type_module}`; do
459 dont_delete_module=0
460 for select_module in ${select_modules}; do
461 if [[ "${select_module}" == "${module}" ]] ; then
462 dont_delete_module=1
463 break;
464 fi
465 done
466 if [[ ${dont_delete_module} != 1 ]]; then
467 echo Delete module: ${module}
468 sed -n "/${module}:/p" modules.dep.temp
469 sed -i "/${module}:/d" modules.dep.temp
470 delete_type_modules=(${delete_type_modules[@]} ${module})
471 fi
472 done
473 echo delete_type_modules=${delete_type_modules[*]}
474 fi
475 fi
476 done
477 if [[ -n ${in_temp_dir} ]]; then
478 cd ../
479 rm -r temp_dir
480 fi
481
482 black_modules=()
Dezhen Wang45dfcb02023-02-13 17:41:44 +0800483 mkdir service_module
484 echo MODULES_SERVICE_LOAD_LIST=${MODULES_SERVICE_LOAD_LIST[@]}
485 BLACK_AND_SERVICE_LIST=(${MODULES_LOAD_BLACK_LIST[@]} ${MODULES_SERVICE_LOAD_LIST[@]})
486 echo ${BLACK_AND_SERVICE_LIST[@]}
487 for module in ${BLACK_AND_SERVICE_LIST[@]}; do
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800488 modules=`ls ${module}*`
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800489 black_modules=(${black_modules[@]} ${modules[@]})
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800490 done
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800491 if [[ ${#black_modules[@]} == 0 ]]; then
492 echo "black_modules is null, don't delete modules, MODULES_LOAD_BLACK_LIST=${MODULES_LOAD_BLACK_LIST[*]}"
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800493 else
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800494 echo black_modules=${black_modules[*]}
495 for module in ${black_modules[@]}; do
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800496 echo Delete module: ${module}
497 sed -n "/${module}:/p" modules.dep.temp
498 sed -i "/${module}:/d" modules.dep.temp
499 done
500 fi
501
Wanwei Jiang475245b2023-05-10 21:06:52 +0800502 GKI_MODULES_LOAD_BLACK_LIST=()
Wanwei Jiang16554d02023-07-14 17:01:00 +0800503 if [[ "${FULL_KERNEL_VERSION}" != "common13-5.15" && "${ARCH}" == "arm64" ]]; then
504 #if [[ "${FULL_KERNEL_VERSION}" != "common13-5.15" ]]; then
Wanwei Jiang475245b2023-05-10 21:06:52 +0800505 gki_modules_temp_file=`mktemp /tmp/config.XXXXXXXXXXXX`
qinglin.lieafebcf2023-06-27 12:48:22 +0800506 if [[ ${BAZEL} == "1" ]]; then
507 cp $DIST_DIR/system_dlkm.modules.load ${gki_modules_temp_file}
508 else
509 rm -f ${gki_modules_temp_file}
510 cat ${ROOT_DIR}/${KERNEL_DIR}/modules.bzl |grep ko | while read LINE
511 do
512 echo $LINE | sed 's/^[^"]*"//' | sed 's/".*$//' >> ${gki_modules_temp_file}
513 done
514 fi
Wanwei Jiang475245b2023-05-10 21:06:52 +0800515
516 for module in ${GKI_MODULES_LOAD_WHITE_LIST[@]}; do
517 sed -i "/\/${module}/d" ${gki_modules_temp_file}
518 done
519
520 for module in `cat ${gki_modules_temp_file}`; do
521 module=${module##*/}
522 GKI_MODULES_LOAD_BLACK_LIST[${#GKI_MODULES_LOAD_BLACK_LIST[*]}]=${module}
523 done
524 rm -f ${gki_modules_temp_file}
525
526 for module in ${GKI_MODULES_LOAD_BLACK_LIST[@]}; do
527 echo Delete module: ${module}
528 sed -n "/${module}:/p" modules.dep.temp
529 sed -i "/${module}:/d" modules.dep.temp
530 done
531 fi
532
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800533 cat modules.dep.temp | cut -d ':' -f 2 > modules.dep.temp1
Wanwei Jiang475245b2023-05-10 21:06:52 +0800534 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 +0800535 for module in ${delete_modules[@]}; do
Wanwei Jiang16554d02023-07-14 17:01:00 +0800536 if [[ ! -f $module ]]; then
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800537 continue
538 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800539 match=`sed -n "/${module}/=" modules.dep.temp1`
540 for match in ${match[@]}; do
541 match_count=(${match_count[@]} $match)
542 done
543 if [[ ${#match_count[@]} != 0 ]]; then
544 echo "Error ${#match_count[@]} modules depend on ${module}, please modify:"
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800545 echo ${MODULES_SEQUENCE_LIST}:MODULES_LOAD_BLACK_LIST
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800546 exit
547 fi
Dezhen Wang45dfcb02023-02-13 17:41:44 +0800548 if [[ -n ${ANDROID_PROJECT} ]]; then
549 for service_module_temp in ${MODULES_SERVICE_LOAD_LIST[@]}; do
550 if [[ ${module} = ${service_module_temp} ]]; then
551 mv ${module} service_module
552 fi
553 done
554 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800555 rm -f ${module}
556 done
557 rm -f modules.dep.temp1
wanwei.jiangb12abc82021-12-25 22:17:10 +0800558 touch modules.dep.temp1
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800559
560 for module in ${RAMDISK_MODULES_LOAD_LIST[@]}; do
561 echo RAMDISK_MODULES_LOAD_LIST: $module
wanwei.jiangb12abc82021-12-25 22:17:10 +0800562 sed -n "/${module}:/p" modules.dep.temp
563 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1
564 sed -i "/${module}:/d" modules.dep.temp
565 sed -n "/${module}.*\.ko:/p" modules.dep.temp
566 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1
567 sed -i "/${module}.*\.ko:/d" modules.dep.temp
568 done
569
Wanwei Jiang571dde62022-11-17 14:37:41 +0800570 if [[ -n ${ANDROID_PROJECT} ]]; then
571 cp modules.dep.temp modules_recovery.dep.temp
572 cp modules.dep.temp1 modules_recovery.dep.temp1
573 fi
574
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800575 for module in ${VENDOR_MODULES_LOAD_FIRST_LIST[@]}; do
576 echo VENDOR_MODULES_LOAD_FIRST_LIST: $module
577 sed -n "/${module}:/p" modules.dep.temp
578 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1
579 sed -i "/${module}:/d" modules.dep.temp
580 sed -n "/${module}.*\.ko:/p" modules.dep.temp
581 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1
582 sed -i "/${module}.*\.ko:/d" modules.dep.temp
wanwei.jiangb12abc82021-12-25 22:17:10 +0800583 done
584
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800585 if [ -f modules.dep.temp2 ]; then
586 rm modules.dep.temp2
587 fi
588 touch modules.dep.temp2
589 for module in ${VENDOR_MODULES_LOAD_LAST_LIST[@]}; do
590 echo VENDOR_MODULES_LOAD_FIRST_LIST: $module
591 sed -n "/${module}:/p" modules.dep.temp
592 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp2
593 sed -i "/${module}:/d" modules.dep.temp
594 sed -n "/${module}.*\.ko:/p" modules.dep.temp
595 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp2
596 sed -i "/${module}.*\.ko:/d" modules.dep.temp
597 done
598
599 cat modules.dep.temp >> modules.dep.temp1
600 cat modules.dep.temp2 >> modules.dep.temp1
601
wanwei.jiangb12abc82021-12-25 22:17:10 +0800602 cp modules.dep.temp1 modules.dep
603 rm modules.dep.temp
604 rm modules.dep.temp1
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800605 rm modules.dep.temp2
Wanwei Jiang571dde62022-11-17 14:37:41 +0800606
607 if [[ -n ${ANDROID_PROJECT} ]]; then
608 for module in ${RECOVERY_MODULES_LOAD_LIST[@]}; do
609 echo RECOVERY_MODULES_LOAD_LIST: $module
610 sed -n "/${module}:/p" modules_recovery.dep.temp
611 sed -n "/${module}:/p" modules_recovery.dep.temp >> modules_recovery.dep.temp1
612 sed -i "/${module}:/d" modules_recovery.dep.temp
613 sed -n "/${module}.*\.ko:/p" modules_recovery.dep.temp
614 sed -n "/${module}.*\.ko:/p" modules_recovery.dep.temp >> modules_recovery.dep.temp1
615 sed -i "/${module}.*\.ko:/d" modules_recovery.dep.temp
616 done
617
618 cat modules_recovery.dep.temp >> modules_recovery.dep.temp1
619
620 cp modules_recovery.dep.temp1 modules_recovery.dep
621 rm modules_recovery.dep.temp
622 rm modules_recovery.dep.temp1
623 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800624}
625
Wanwei Jiang571dde62022-11-17 14:37:41 +0800626create_ramdisk_vendor_recovery() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800627 install_temp=$1
Wanwei Jiang571dde62022-11-17 14:37:41 +0800628 if [[ -n ${ANDROID_PROJECT} ]]; then
629 recovery_install_temp=$2
630 fi
Wanwei Jiang9173e462022-09-29 00:58:33 +0800631 ramdisk_module_i=${#RAMDISK_MODULES_LOAD_LIST[@]}
632 while [ ${ramdisk_module_i} -gt 0 ]; do
633 let ramdisk_module_i--
634 echo ramdisk_module_i=$ramdisk_module_i ${RAMDISK_MODULES_LOAD_LIST[${ramdisk_module_i}]}
635 if [[ `grep "${RAMDISK_MODULES_LOAD_LIST[${ramdisk_module_i}]}" ${install_temp}` ]]; then
636 last_ramdisk_module=${RAMDISK_MODULES_LOAD_LIST[${ramdisk_module_i}]}
637 break;
638 fi
639 done
640 # last_ramdisk_module=${RAMDISK_MODULES_LOAD_LIST[${#RAMDISK_MODULES_LOAD_LIST[@]}-1]}
qinglin.libce54712023-05-08 13:56:31 +0800641 if [[ -n ${last_ramdisk_module} ]]; then
642 last_ramdisk_module_line=`sed -n "/${last_ramdisk_module}/=" ${install_temp}`
643 for line in ${last_ramdisk_module_line}; do
644 ramdisk_last_line=${line}
645 done
646 else
647 ramdisk_last_line=1
648 fi
wanwei.jiangf73b2202022-07-23 16:00:44 +0800649 export ramdisk_last_line
Wanwei Jiang571dde62022-11-17 14:37:41 +0800650
651 if [[ -n ${ANDROID_PROJECT} ]]; then
652 recovery_module_i=${#RECOVERY_MODULES_LOAD_LIST[@]}
qinglin.lidba324f2023-03-02 19:56:21 +0800653 #when RECOVERY_MODULES_LOAD_LIST is NULL
654 if [ ${#RECOVERY_MODULES_LOAD_LIST[@]} -eq 0 ]; then
655 last_recovery_module=${last_ramdisk_module}
656 fi
Wanwei Jiang571dde62022-11-17 14:37:41 +0800657 while [ ${recovery_module_i} -gt 0 ]; do
658 let recovery_module_i--
659 echo recovery_module_i=$recovery_module_i ${RECOVERY_MODULES_LOAD_LIST[${recovery_module_i}]}
660 if [[ `grep "${RECOVERY_MODULES_LOAD_LIST[${recovery_module_i}]}" ${recovery_install_temp}` ]]; then
661 last_recovery_module=${RECOVERY_MODULES_LOAD_LIST[${recovery_module_i}]}
662 break;
663 fi
664 done
665 # last_recovery_module=${RECOVERY_MODULES_LOAD_LIST[${#RECOVERY_MODULES_LOAD_LIST[@]}-1]}
qinglin.libce54712023-05-08 13:56:31 +0800666 if [[ -n ${last_recovery_module} ]]; then
667 last_recovery_module_line=`sed -n "/${last_recovery_module}/=" ${recovery_install_temp}`
668 for line in ${last_recovery_module_line}; do
669 recovery_last_line=${line}
670 done
671 else
672 recovery_last_line=1
673 fi
Wanwei Jiang571dde62022-11-17 14:37:41 +0800674 sed -n "${ramdisk_last_line},${recovery_last_line}p" ${recovery_install_temp} > recovery_install.sh
qinglin.libce54712023-05-08 13:56:31 +0800675 if [[ -n ${last_ramdisk_module} ]]; then
676 sed -i "1d" recovery_install.sh
677 fi
Wanwei Jiang571dde62022-11-17 14:37:41 +0800678 mkdir recovery
679 cat recovery_install.sh | cut -d ' ' -f 2 > recovery/recovery_modules.order
qinglin.lidba324f2023-03-02 19:56:21 +0800680 if [ ${#RECOVERY_MODULES_LOAD_LIST[@]} -ne 0 ]; then
681 cat recovery_install.sh | cut -d ' ' -f 2 | xargs cp -t recovery/
682 fi
Wanwei Jiang571dde62022-11-17 14:37:41 +0800683 sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' recovery_install.sh
684 echo "echo Install recovery modules success!" >> recovery_install.sh
685 chmod 755 recovery_install.sh
686 mv recovery_install.sh recovery/
687 fi
688
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800689 head -n ${ramdisk_last_line} ${install_temp} > ramdisk_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800690 mkdir ramdisk
wanwei.jiangf73b2202022-07-23 16:00:44 +0800691 cat ramdisk_install.sh | cut -d ' ' -f 2 > ramdisk/ramdisk_modules.order
wanwei.jiang50759e12022-03-24 12:36:17 +0800692 cat ramdisk_install.sh | cut -d ' ' -f 2 | xargs mv -t ramdisk/
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800693
qinglin.lie5b951e2022-06-07 16:13:44 +0800694 sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' ramdisk_install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800695 echo "echo Install ramdisk modules success!" >> ramdisk_install.sh
696 chmod 755 ramdisk_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800697 mv ramdisk_install.sh ramdisk/
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800698
699 file_last_line=`sed -n "$=" ${install_temp}`
700 let line=${file_last_line}-${ramdisk_last_line}
701 tail -n ${line} ${install_temp} > vendor_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800702 mkdir vendor
wanwei.jiangf73b2202022-07-23 16:00:44 +0800703 cat vendor_install.sh | cut -d ' ' -f 2 > vendor/vendor_modules.order
wanwei.jiang50759e12022-03-24 12:36:17 +0800704 cat vendor_install.sh | cut -d ' ' -f 2 | xargs mv -t vendor/
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800705
qinglin.lie5b951e2022-06-07 16:13:44 +0800706 sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' vendor_install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800707 echo "echo Install vendor modules success!" >> vendor_install.sh
708 chmod 755 vendor_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800709 mv vendor_install.sh vendor/
wanwei.jiangb12abc82021-12-25 22:17:10 +0800710}
711
wanwei.jiang612a8882021-11-23 17:12:23 +0800712function modules_install() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800713 arg1=$1
714
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800715 if [[ ! -f ${MODULES_SEQUENCE_LIST} ]]; then
716 MODULES_SEQUENCE_LIST=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list
717 fi
718 source ${MODULES_SEQUENCE_LIST}
719
Wanwei Jiang2218b892023-03-17 17:31:21 +0800720 export OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR:-$(readlink -m ${COMMON_OUT_DIR}/amlogic)}
721 echo $OUT_AMLOGIC_DIR
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800722 rm -rf ${OUT_AMLOGIC_DIR}
723 mkdir -p ${OUT_AMLOGIC_DIR}
724 mkdir -p ${OUT_AMLOGIC_DIR}/modules
725 mkdir -p ${OUT_AMLOGIC_DIR}/ext_modules
Wanwei Jiangae4d7c12023-02-17 19:22:04 +0800726 mkdir -p ${OUT_AMLOGIC_DIR}/symbols
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800727
Wanwei Jiang2218b892023-03-17 17:31:21 +0800728 if [[ ${BAZEL} == "1" ]]; then
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800729 BAZEL_OUT=bazel-out/
Wanwei Jiang0df84602023-05-05 14:40:42 +0800730 while read module
731 do
Wanwei Jiang475245b2023-05-10 21:06:52 +0800732 module_name=${module##*/}
Wanwei Jiang16554d02023-07-14 17:01:00 +0800733 if [[ -z ${ANDROID_PROJECT} || `echo ${module} | grep "^kernel\/"` ]]; then
Wanwei Jiang0df84602023-05-05 14:40:42 +0800734 if [[ -f ${DIST_DIR}/${module_name} ]]; then
735 cp ${DIST_DIR}/${module_name} ${OUT_AMLOGIC_DIR}/modules
736 else
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800737 module=`find ${BAZEL_OUT} -name ${module_name} | grep "amlogic_modules_install"`
Wanwei Jiang0df84602023-05-05 14:40:42 +0800738 cp ${module} ${OUT_AMLOGIC_DIR}/modules
739 fi
740 elif [[ `echo ${module} | grep "^extra\/"` ]]; then
Wanwei Jiang16554d02023-07-14 17:01:00 +0800741 module=${module#*/}
742 local match=
743 for ext_module in ${EXT_MODULES_ANDROID_AUTO_LOAD}; do
744 if [[ "${module}" =~ "${ext_module}" ]]; then
745 match=1
746 break
747 fi
748 done
749 if [[ ${match} == 1 ]]; then
750 cp ${DIST_DIR}/${module_name} ${OUT_AMLOGIC_DIR}/modules
751 else
752 cp ${DIST_DIR}/${module_name} ${OUT_AMLOGIC_DIR}/ext_modules
753 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800754 else
Wanwei Jiang0df84602023-05-05 14:40:42 +0800755 echo "warning unrecognized module: ${module}"
Wanwei Jiang2218b892023-03-17 17:31:21 +0800756 fi
Wanwei Jiang0df84602023-05-05 14:40:42 +0800757 done < ${DIST_DIR}/modules.load
Wanwei Jiang2218b892023-03-17 17:31:21 +0800758
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800759 dep_file=`find ${BAZEL_OUT} -name *.dep | grep "amlogic"`
Wanwei Jiang2218b892023-03-17 17:31:21 +0800760 cp ${dep_file} ${OUT_AMLOGIC_DIR}/modules/full_modules.dep
Wanwei Jiang16554d02023-07-14 17:01:00 +0800761 if [[ -n ${ANDROID_PROJECT} ]]; then
762 grep -E "^kernel\/" ${dep_file} > ${OUT_AMLOGIC_DIR}/modules/modules.dep
763 for ext_module in ${EXT_MODULES_ANDROID_AUTO_LOAD}; do
764 cat ${dep_file} | cut -d ':' -f 1 | grep -n "${ext_module}" | cut -d ':' -f 1 | while read line; do
765 sed -n ${line}p ${dep_file} >> ${OUT_AMLOGIC_DIR}/modules/modules.dep
766 done
767 done
768
769 touch ${module} ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800770 for order_file in `find ${BAZEL_OUT} -name "modules.order.*" | grep "amlogic"`; do
Wanwei Jiang16554d02023-07-14 17:01:00 +0800771 order_file_dir=${order_file#*/extra/}
772 order_file_dir=${order_file_dir%/modules.order.*}
773 if [[ ! "${EXT_MODULES_ANDROID_AUTO_LOAD}" =~ "${order_file_dir}" ]]; then
774 echo "# ${order_file}" >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
775 cat ${order_file} >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
776 echo >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
777 fi
778 done
779 else
780 cp ${dep_file} ${OUT_AMLOGIC_DIR}/modules/modules.dep
781 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800782 else
783 local MODULES_ROOT_DIR=$(echo ${MODULES_STAGING_DIR}/lib/modules/*)
784 pushd ${MODULES_ROOT_DIR}
785 local common_drivers=${COMMON_DRIVERS_DIR##*/}
786 local modules_list=$(find -type f -name "*.ko")
787 for module in ${modules_list}; do
788 if [[ -n ${ANDROID_PROJECT} ]]; then # copy internal build modules
789 if [[ `echo ${module} | grep -E "\.\/kernel\/|\/${common_drivers}\/"` ]]; then
790 cp ${module} ${OUT_AMLOGIC_DIR}/modules/
791 else
Wanwei Jiang16554d02023-07-14 17:01:00 +0800792 local match=
793 for ext_module in ${EXT_MODULES_ANDROID_AUTO_LOAD}; do
794 if [[ "${module}" =~ "${ext_module}" ]]; then
795 match=1
796 break
797 fi
798 done
799 if [[ ${match} == 1 ]]; then
800 cp ${module} ${OUT_AMLOGIC_DIR}/modules/
801 else
802 cp ${module} ${OUT_AMLOGIC_DIR}/ext_modules/
803 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800804 fi
Wanwei Jiang16554d02023-07-14 17:01:00 +0800805 else
Wanwei Jiang2218b892023-03-17 17:31:21 +0800806 cp ${module} ${OUT_AMLOGIC_DIR}/modules/
807 fi
808 done
809
810 if [[ -n ${ANDROID_PROJECT} ]]; then # internal build modules
811 grep -E "^kernel\/|^${common_drivers}\/" modules.dep > ${OUT_AMLOGIC_DIR}/modules/modules.dep
Wanwei Jiang16554d02023-07-14 17:01:00 +0800812 dep_file=modules.dep
813 for ext_module in ${EXT_MODULES_ANDROID_AUTO_LOAD}; do
814 cat ${dep_file} | cut -d ':' -f 1 | grep -n "${ext_module}" | cut -d ':' -f 1 | while read line; do
815 sed -n ${line}p ${dep_file} >> ${OUT_AMLOGIC_DIR}/modules/modules.dep
816 done
817 done
Wanwei Jiang2218b892023-03-17 17:31:21 +0800818 else # all modules, include external modules
819 cp modules.dep ${OUT_AMLOGIC_DIR}/modules
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800820 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800821 popd
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800822 fi
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800823 pushd ${OUT_AMLOGIC_DIR}/modules
wanwei.jiang612a8882021-11-23 17:12:23 +0800824 sed -i 's#[^ ]*/##g' modules.dep
825
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800826 adjust_sequence_modules_loading "${arg1[*]}"
wanwei.jiangb12abc82021-12-25 22:17:10 +0800827
wanwei.jiang5c8d2b62021-11-26 20:36:33 +0800828 touch __install.sh
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800829 touch modules.order
wanwei.jiang612a8882021-11-23 17:12:23 +0800830 for loop in `cat modules.dep | sed 's/:.*//'`; do
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800831 echo $loop >> modules.order
Wanwei Jiang16554d02023-07-14 17:01:00 +0800832 [[ `grep $loop __install.sh` ]] && continue
833 mod_probe $loop
wanwei.jiang612a8882021-11-23 17:12:23 +0800834 echo insmod $loop >> __install.sh
835 done
836
837 cat __install.sh | awk ' {
838 if (!cnt[$2]) {
839 print $0;
840 cnt[$2]++;
841 }
842 }' > __install.sh.tmp
843
Wanwei Jiangbf119d22022-10-27 09:49:49 +0800844 cp modules.order modules.order.back
845 cut -d ' ' -f 2 __install.sh.tmp > modules.order
Wanwei Jiang571dde62022-11-17 14:37:41 +0800846
847 if [[ -n ${ANDROID_PROJECT} ]]; then
848 touch __install_recovery.sh
849 touch modules_recovery.order
850 for loop in `cat modules_recovery.dep | sed 's/:.*//'`; do
Wanwei Jiang571dde62022-11-17 14:37:41 +0800851 echo $loop >> modules_recovery.order
Wanwei Jiang16554d02023-07-14 17:01:00 +0800852 [[ `grep $loop __install_recovery.sh` ]] && continue
853 mod_probe_recovery $loop
Wanwei Jiang571dde62022-11-17 14:37:41 +0800854 echo insmod $loop >> __install_recovery.sh
855 done
856
857 cat __install_recovery.sh | awk ' {
858 if (!cnt[$2]) {
859 print $0;
860 cnt[$2]++;
861 }
862 }' > __install_recovery.sh.tmp
863
Wanwei Jiang16554d02023-07-14 17:01:00 +0800864 cp modules_recovery.order modules_recovery.order.back
Wanwei Jiang571dde62022-11-17 14:37:41 +0800865 cut -d ' ' -f 2 __install_recovery.sh.tmp > modules_recovery.order
866 fi
867 create_ramdisk_vendor_recovery __install.sh.tmp __install_recovery.sh.tmp
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800868
Dezhen Wang124ad7d2023-02-06 15:35:14 +0800869 if [[ -n ${MANUAL_INSMOD_MODULE} ]]; then
870 install_file=manual_install.sh
871 else
872 install_file=install.sh
873 fi
874 echo "#!/bin/sh" > ${install_file}
875 echo "cd ramdisk" >> ${install_file}
876 echo "./ramdisk_install.sh" >> ${install_file}
877 echo "cd ../vendor" >> ${install_file}
878 echo "./vendor_install.sh" >> ${install_file}
879 echo "cd ../" >> ${install_file}
880 chmod 755 ${install_file}
wanwei.jiang612a8882021-11-23 17:12:23 +0800881
882 echo "/modules/: all `wc -l modules.dep | awk '{print $1}'` modules."
Wanwei Jianga5977bd2022-08-24 22:43:40 +0800883 rm __install.sh __install.sh.tmp
wanwei.jiang612a8882021-11-23 17:12:23 +0800884
Wanwei Jiang571dde62022-11-17 14:37:41 +0800885 if [[ -n ${ANDROID_PROJECT} ]]; then
886 rm __install_recovery.sh __install_recovery.sh.tmp
887 fi
888
wanwei.jiang236e9a32021-12-07 16:34:14 +0800889 popd
Wanwei Jiangae4d7c12023-02-17 19:22:04 +0800890
Wanwei Jiang2218b892023-03-17 17:31:21 +0800891 if [[ ${BAZEL} == "1" ]]; then
892 cp ${DIST_DIR}/vmlinux ${OUT_AMLOGIC_DIR}/symbols
893
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800894 find ${BAZEL_OUT} -name *.ko | grep "unstripped" | while read module; do
Wanwei Jiang2218b892023-03-17 17:31:21 +0800895 cp ${module} ${OUT_AMLOGIC_DIR}/symbols
896 chmod +w ${OUT_AMLOGIC_DIR}/symbols/$(basename ${module})
897 done
898 chmod -w ${OUT_AMLOGIC_DIR}/symbols/*.ko
899 else
900 cp ${OUT_DIR}/vmlinux ${OUT_AMLOGIC_DIR}/symbols
901 find ${OUT_DIR} -type f -name "*.ko" -exec cp {} ${OUT_AMLOGIC_DIR}/symbols \;
902 for ext_module in ${EXT_MODULES}; do
903 find ${COMMON_OUT_DIR}/${ext_module} -type f -name "*.ko" -exec cp {} ${OUT_AMLOGIC_DIR}/symbols \;
904 done
905 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800906}
wanwei.jiang236e9a32021-12-07 16:34:14 +0800907export -f modules_install
wanwei.jiang612a8882021-11-23 17:12:23 +0800908
Wanwei Jiang2218b892023-03-17 17:31:21 +0800909function rename_external_module_name() {
910 local external_coppied
Wanwei Jiang92c89432023-05-15 23:57:16 +0800911 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 +0800912 target_module_name=`echo ${module_line%%:*} | sed '/^#/d;/^$/d'`
913 modules_name=`echo ${module_line##:*} | sed '/^#/d;/^$/d'`
914 [[ -f ${OUT_AMLOGIC_DIR}/ext_modules/${target_module_name} ]] && external_coppied=1
Wanwei Jiang16554d02023-07-14 17:01:00 +0800915 echo target_module_name=$target_module_name modules_name=$modules_name external_coppied=$external_coppied
Wanwei Jiang2218b892023-03-17 17:31:21 +0800916 for module in ${modules_name}; do
917 echo module=$module
918 if [[ -f ${OUT_AMLOGIC_DIR}/ext_modules/${module} ]]; then
919 if [[ -z ${external_coppied} ]]; then
920 cp ${OUT_AMLOGIC_DIR}/ext_modules/${module} ${OUT_AMLOGIC_DIR}/ext_modules/${target_module_name}
921 external_coppied=1
922 fi
923 rm -f ${OUT_AMLOGIC_DIR}/ext_modules/${module}
924 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800925 done
926 external_coppied=
Wanwei Jiang2218b892023-03-17 17:31:21 +0800927 done
928}
929export -f rename_external_module_name
930
Dezhen Wang5ad119c2023-05-04 15:07:49 +0800931# function rebuild_rootfs can rebuild the rootfs if rootfs_base.cpio.gz.uboot exist
wanwei.jiang612a8882021-11-23 17:12:23 +0800932function rebuild_rootfs() {
Wanwei Jiang2218b892023-03-17 17:31:21 +0800933 echo
934 echo "========================================================"
935 if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then
936 echo "Rebuild rootfs in order to install modules!"
937 else
938 echo "There's no file ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot, so don't rebuild rootfs!"
939 return
940 fi
941
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800942 pushd ${OUT_AMLOGIC_DIR}
wanwei.jiang612a8882021-11-23 17:12:23 +0800943
Lei Zhang475c17b2022-03-03 11:08:50 +0800944 local ARCH=arm64
945 if [[ -n $1 ]]; then
946 ARCH=$1
947 fi
948
wanwei.jiang612a8882021-11-23 17:12:23 +0800949 rm rootfs -rf
950 mkdir rootfs
Wanwei Jiang2218b892023-03-17 17:31:21 +0800951 cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot rootfs
wanwei.jiang612a8882021-11-23 17:12:23 +0800952 cd rootfs
953 dd if=rootfs_base.cpio.gz.uboot of=rootfs_base.cpio.gz bs=64 skip=1
954 gunzip rootfs_base.cpio.gz
955 mkdir rootfs
956 cd rootfs
dongqing.li6fd83502023-06-15 09:59:40 +0800957 fakeroot cpio -i -F ../rootfs_base.cpio
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800958 if [ -d ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer ]; then
959 cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer . -rf
qinglin.li3c25dbb2022-01-14 11:23:10 +0800960 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800961 cp -rf ../../modules .
wanwei.jiang8abddcc2022-03-16 21:18:48 +0800962
dongqing.li6fd83502023-06-15 09:59:40 +0800963 find . | fakeroot cpio -o -H newc | gzip > ../rootfs_new.cpio.gz
wanwei.jiang612a8882021-11-23 17:12:23 +0800964 cd ../
Lei Zhang475c17b2022-03-03 11:08:50 +0800965 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 +0800966 mv rootfs_new.cpio.gz.uboot ../
967 cd ../
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800968 cp rootfs_new.cpio.gz.uboot ${DIST_DIR}
wanwei.jiang612a8882021-11-23 17:12:23 +0800969
970 popd
971}
972export -f rebuild_rootfs
wanwei.jiang403c9942021-11-30 18:29:02 +0800973
Dezhen Wang5ad119c2023-05-04 15:07:49 +0800974# function check_undefined_symbol can check the dependence among the modules
975# parameter:
976# --modules_depend
wanwei.jiang403c9942021-11-30 18:29:02 +0800977function check_undefined_symbol() {
Wanwei Jiang2218b892023-03-17 17:31:21 +0800978 if [[ ${MODULES_DEPEND} != "1" ]]; then
979 return
980 fi
981
982 echo "========================================================"
983 echo "print modules depend"
984
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800985 pushd ${OUT_AMLOGIC_DIR}/modules
wanwei.jiang403c9942021-11-30 18:29:02 +0800986 echo
987 echo "========================================================"
988 echo "Functions or variables not defined in this module refer to which module."
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800989 if [[ -n ${LLVM} ]]; then
990 compile_tool=${ROOT_DIR}/${CLANG_PREBUILT_BIN}/llvm-
991 elif [[ -n ${CROSS_COMPILE} ]]; then
992 compile_tool=${CROSS_COMPILE}
993 else
994 echo "can't find compile tool"
995 fi
Wanwei Jiang0a74fb12022-12-09 16:27:40 +0800996 ${compile_tool}nm ${DIST_DIR}/vmlinux | grep -E " T | D | B | R | W "> vmlinux_T.txt
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800997 # cat __install.sh | grep "insmod" | cut -d ' ' -f 2 > module_list.txt
998 cat ramdisk/ramdisk_install.sh | grep "insmod" | cut -d ' ' -f 2 > module_list.txt
999 cat vendor/vendor_install.sh | grep "insmod" | cut -d ' ' -f 2 >> module_list.txt
1000 cp ramdisk/*.ko .
1001 cp vendor/*.ko .
wanwei.jiang403c9942021-11-30 18:29:02 +08001002 while read LINE
1003 do
1004 echo ${LINE}
wanwei.jiang2c818dc2022-03-24 17:48:00 +08001005 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 +08001006 do
1007 #echo ${U}
1008 U_v=`grep -w ${U} vmlinux_T.txt`
1009 in_vmlinux=0
1010 if [ -n "${U_v}" ];
1011 then
wanwei.jiangd7b29ef2021-12-01 19:59:41 +08001012 #printf "\t%-50s <== vmlinux\n" ${U}
wanwei.jiang403c9942021-11-30 18:29:02 +08001013 in_vmlinux=1
1014 continue
1015 fi
1016 in_module=0
1017 MODULE=
1018 while read LINE1
1019 do
wanwei.jiang2c818dc2022-03-24 17:48:00 +08001020 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 +08001021 if [ -n "${U_m}" ];
1022 then
1023 in_module=1
1024 MODULE=${LINE1}
1025 fi
1026 done < module_list.txt
1027 if [ ${in_module} -eq "1" ];
1028 then
1029 printf "\t%-50s <== %s\n" ${U} ${MODULE}
1030 continue
1031 else
1032 printf "\t%-50s <== none\n" ${U}
1033 fi
1034 done
1035 echo
1036 echo
1037 done < module_list.txt
1038 rm vmlinux_T.txt
1039 rm module_list.txt
wanwei.jiang2c818dc2022-03-24 17:48:00 +08001040 rm *.ko
wanwei.jiang403c9942021-11-30 18:29:02 +08001041 popd
1042}
1043export -f check_undefined_symbol
Dezhen Wangd40fa552023-04-11 16:13:27 +08001044
1045function reorganized_abi_symbol_list_file() { # delete the extra information but symbol
1046 cat $@ | sed '/^$/d' >> ${symbol_tmp} # remove blank lines
1047 sed -i '/^\[/d' ${symbol_tmp} # remove the title
1048 sed -i '/^\#/d' ${symbol_tmp} # remove the comment
1049}
1050export -f reorganized_abi_symbol_list_file
1051
1052function abi_symbol_list_detect () { # detect symbol information that should be submitted or fix
Dezhen Wang3e94b292023-07-10 20:14:57 +08001053 if [[ "${FULL_KERNEL_VERSION}" = "common13-5.15" ]]; then
1054 symbol_file1=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic
1055 symbol_file2=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.10
1056 symbol_file3=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.debug
1057 symbol_file4=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.illegal
1058 else
1059 symbol_file1=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic
1060 symbol_file2=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic.10
1061 symbol_file3=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic.debug
1062 symbol_file4=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic.illegal
1063 fi
Dezhen Wangd40fa552023-04-11 16:13:27 +08001064
1065 file_list=("${symbol_file1} ${symbol_file2} ${symbol_file3} ${symbol_file4}")
1066 for file in ${file_list}
1067 do
1068 local symbol_tmp=`mktemp tmp.XXXXXXXXXXXX`
1069 reorganized_abi_symbol_list_file "${file}"
1070
1071 if [[ -s ${symbol_tmp} ]]; then
1072 if [[ ${file} =~ abi_gki_aarch64_amlogic.illegal ]]; then
1073 echo "WARNING: The symbols in ${file} are illegal, please deal with them as soon as possible!!!"
1074 else
1075 echo "WARNING: The symbols in ${file} should be submit to google!!!"
1076 fi
1077 cat ${symbol_tmp}
1078 echo -e "\n------------------------------------------------------------"
1079 fi
1080 rm ${symbol_tmp}
1081 done
1082}
1083export -f abi_symbol_list_detect
1084
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001085# adjust_config_action concerns three types of cmd:
1086# parameters:
1087# --menuconfig: make menuconfig manually based on different gki standard
1088# --basicconfig: only config kernel with google original gki_defconfig as base
1089# --check_defconfig: contrast the defconfig generated in out directory with gki_defconfig and show the difference
1090function adjust_config_action () {
1091 if [[ -n ${MENUCONFIG} ]] || [[ -n ${BASICCONFIG} ]] || [[ ${CHECK_DEFCONFIG} -eq "1" ]]; then
1092 # ${ROOT_DIR}/${BUILD_DIR}/config.sh menuconfig
1093 HERMETIC_TOOLCHAIN=0
Dezhen Wang2edb5232023-07-06 14:15:33 +08001094
1095 if [[ "${FULL_KERNEL_VERSION}" = "common13-5.15" ]]; then
1096 source "${ROOT_DIR}/${BUILD_DIR}/build_utils.sh"
1097 source "${ROOT_DIR}/${BUILD_DIR}/_setup_env.sh"
1098 else
1099 source ${ROOT_DIR}/${BUILD_CONFIG}
1100 export COMMON_OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out${OUT_DIR_SUFFIX}/${BRANCH}})
1101 export OUT_DIR=$(readlink -m ${COMMON_OUT_DIR}/${KERNEL_DIR})
1102 fi
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001103
1104 orig_config=$(mktemp)
1105 orig_defconfig=$(mktemp)
1106 out_config="${OUT_DIR}/.config"
1107 out_defconfig="${OUT_DIR}/defconfig"
1108 changed_config=$(mktemp)
1109 changed_defconfig=$(mktemp)
1110
1111 if [[ -n ${BASICCONFIG} ]]; then # config kernel with gki_defconfig or make menuconfig based on it
1112 set -x
1113 defconfig_name=`basename ${GKI_BASE_CONFIG}`
1114 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${defconfig_name})
1115 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1116 cp ${out_config} ${orig_config}
1117 cp ${out_defconfig} ${orig_defconfig}
1118 if [ "${BASICCONFIG}" = "m" ]; then # make menuconfig based on gki_defconfig
1119 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" menuconfig)
1120 fi
1121 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1122 ${KERNEL_DIR}/scripts/diffconfig ${orig_config} ${out_config} > ${changed_config}
1123 ${KERNEL_DIR}/scripts/diffconfig ${orig_defconfig} ${out_defconfig} > ${changed_defconfig}
1124 if [ "${ARCH}" = "arm" ]; then
1125 cp ${out_defconfig} ${GKI_BASE_CONFIG}
1126 fi
1127 set +x # show the difference between the gki_defconfig and the config after make menuconfig
1128 echo
1129 echo "========================================================"
1130 echo "==================== .config diff ===================="
1131 cat ${changed_config}
1132 echo "==================== defconfig diff ===================="
1133 cat ${changed_defconfig}
1134 echo "========================================================"
1135 echo
1136 elif [[ ${CHECK_DEFCONFIG} -eq "1" ]]; then # compare the defconfig generated in out directory with gki_defconfig
1137 set -x
1138 pre_defconfig_cmds
1139 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
1140 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig) # export the defconfig to out directory
1141 diff -u ${ROOT_DIR}/${GKI_BASE_CONFIG} ${OUT_DIR}/defconfig
1142 post_defconfig_cmds
1143 set +x
1144 else # make menuconfig based on config with different gki standard
1145 set -x
1146 pre_defconfig_cmds
1147 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
1148 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1149 cp ${out_config} ${orig_config}
1150 cp ${out_defconfig} ${orig_defconfig}
1151 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" menuconfig)
1152 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1153 ${KERNEL_DIR}/scripts/diffconfig ${orig_config} ${out_config} > ${changed_config}
1154 ${KERNEL_DIR}/scripts/diffconfig ${orig_defconfig} ${out_defconfig} > ${changed_defconfig}
1155 post_defconfig_cmds
1156 set +x
1157 echo
1158 echo "========================================================"
1159 echo "if the config follows GKI2.0, please add it to the file amlogic_gki.fragment manually"
1160 echo "if the config follows GKI1.0 optimize, please add it to the file amlogic_gki.10 manually"
1161 echo "if the config follows GKI1.0 debug, please add it to the file amlogic_gki.debug manually"
1162 echo "==================== .config diff ===================="
1163 cat ${changed_config}
1164 echo "==================== defconfig diff ===================="
1165 cat ${changed_defconfig}
1166 echo "========================================================"
1167 echo
1168 fi
1169 rm -f ${orig_config} ${changed_config} ${orig_defconfig} ${changed_defconfig}
1170 exit
1171 fi
1172}
1173export -f adjust_config_action
1174
1175# function build_part_of_kernel can only build part of kernel such as image modules or dtbs
1176# parameter:
1177# --image: only build image
1178# --modules: only build kernel modules
1179# --dtbs: only build dtbs
1180function build_part_of_kernel () {
1181 if [[ -n ${IMAGE} ]] || [[ -n ${MODULES} ]] || [[ -n ${DTB_BUILD} ]]; then
1182 old_path=${PATH}
Dezhen Wangc5c95c32023-07-09 23:14:12 +08001183 if [[ "${FULL_KERNEL_VERSION}" = "common13-5.15" ]]; then
1184 source "${ROOT_DIR}/${BUILD_DIR}/build_utils.sh"
1185 source "${ROOT_DIR}/${BUILD_DIR}/_setup_env.sh"
1186 else
1187 source ${ROOT_DIR}/${BUILD_CONFIG}
1188 export COMMON_OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out${OUT_DIR_SUFFIX}/${BRANCH}})
1189 export OUT_DIR=$(readlink -m ${COMMON_OUT_DIR}/${KERNEL_DIR})
1190 export DIST_DIR=$(readlink -m ${DIST_DIR:-${COMMON_OUT_DIR}/dist})
1191 tool_args+=("LLVM=1")
1192 tool_args+=("DEPMOD=${DEPMOD}")
1193 fi
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001194
1195 if [[ ! -f ${OUT_DIR}/.config ]]; then
1196 pre_defconfig_cmds
1197 set -x
1198 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
1199 set +x
1200 post_defconfig_cmds
1201 fi
1202
1203 if [[ -n ${IMAGE} ]]; then
1204 set -x
1205 if [ "${ARCH}" = "arm64" ]; then
1206 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) Image)
1207 elif [ "${ARCH}" = "arm" ]; then
1208 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) LOADADDR=0x108000 uImage)
1209 fi
1210 set +x
1211 fi
1212 mkdir -p ${DIST_DIR}
1213 if [[ -n ${DTB_BUILD} ]]; then
1214 set -x
1215 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) dtbs)
1216 set +x
1217 fi
1218 if [[ -n ${MODULES} ]]; then
1219 export MODULES_STAGING_DIR=$(readlink -m ${COMMON_OUT_DIR}/staging)
1220 rm -rf ${MODULES_STAGING_DIR}
1221 mkdir -p ${MODULES_STAGING_DIR}
1222 if [ "${DO_NOT_STRIP_MODULES}" != "1" ]; then
1223 MODULE_STRIP_FLAG="INSTALL_MOD_STRIP=1"
1224 fi
1225 if [[ `grep "CONFIG_AMLOGIC_IN_KERNEL_MODULES=y" ${ROOT_DIR}/${FRAGMENT_CONFIG}` ]]; then
1226 set -x
1227 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) modules)
1228 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} INSTALL_MOD_PATH=${MODULES_STAGING_DIR} "${MAKE_ARGS[@]}" modules_install)
1229 set +x
1230 fi
1231 echo EXT_MODULES=$EXT_MODULES
1232 prepare_module_build
1233 if [[ -z "${SKIP_EXT_MODULES}" ]] && [[ -n "${EXT_MODULES}" ]]; then
1234 echo "========================================================"
1235 echo " Building external modules and installing them into staging directory"
1236 KERNEL_UAPI_HEADERS_DIR=$(readlink -m ${COMMON_OUT_DIR}/kernel_uapi_headers)
1237 for EXT_MOD in ${EXT_MODULES}; do
qinglin.lia40f7b62023-07-26 18:52:35 +08001238 EXT_MOD_REL=$(real_path ${ROOT_DIR}/${EXT_MOD} ${KERNEL_DIR})
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001239 mkdir -p ${OUT_DIR}/${EXT_MOD_REL}
1240 set -x
1241 make -C ${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1242 O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}"
1243 make -C ${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1244 O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} \
1245 INSTALL_MOD_PATH=${MODULES_STAGING_DIR} \
1246 INSTALL_MOD_DIR="extra/${EXT_MOD}" \
1247 INSTALL_HDR_PATH="${KERNEL_UAPI_HEADERS_DIR}/usr" \
1248 "${MAKE_ARGS[@]}" modules_install
1249 set +x
1250 done
1251 fi
1252 export OUT_AMLOGIC_DIR=$(readlink -m ${COMMON_OUT_DIR}/amlogic)
1253 set -x
1254 extra_cmds
1255 set +x
1256 MODULES=$(find ${MODULES_STAGING_DIR} -type f -name "*.ko")
1257 cp -p ${MODULES} ${DIST_DIR}
1258
1259 new_path=${PATH}
1260 PATH=${old_path}
1261 echo "========================================================"
1262 if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then
1263 echo "Rebuild rootfs in order to install modules!"
1264 rebuild_rootfs ${ARCH}
1265 else
1266 echo "There's no file ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot, so don't rebuild rootfs!"
1267 fi
1268 PATH=${new_path}
1269 fi
1270 if [ -n "${DTS_EXT_DIR}" ]; then
1271 if [ -d "${ROOT_DIR}/${DTS_EXT_DIR}" ]; then
qinglin.lia40f7b62023-07-26 18:52:35 +08001272 DTS_EXT_DIR=$(real_path ${ROOT_DIR}/${DTS_EXT_DIR} ${KERNEL_DIR})
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001273 if [ -d ${OUT_DIR}/${DTS_EXT_DIR} ]; then
1274 FILES="$FILES `ls ${OUT_DIR}/${DTS_EXT_DIR}`"
1275 fi
1276 fi
1277 fi
1278 for FILE in ${FILES}; do
1279 if [ -f ${OUT_DIR}/${FILE} ]; then
1280 echo " $FILE"
1281 cp -p ${OUT_DIR}/${FILE} ${DIST_DIR}/
1282 elif [[ "${FILE}" =~ \.dtb|\.dtbo ]] && \
1283 [ -n "${DTS_EXT_DIR}" ] && [ -f "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" ] ; then
1284 # DTS_EXT_DIR is recalculated before to be relative to KERNEL_DIR
1285 echo " $FILE"
1286 cp -p "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" "${DIST_DIR}/"
1287 else
1288 echo " $FILE is not a file, skipping"
1289 fi
1290 done
1291 exit
1292 fi
1293}
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001294export -f build_part_of_kernel
1295
1296function export_env_variable () {
1297 export ABI BUILD_CONFIG LTO KMI_SYMBOL_LIST_STRICT_MODE CHECK_DEFCONFIG MANUAL_INSMOD_MODULE ARCH
qinglin.libce54712023-05-08 13:56:31 +08001298 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 +08001299 export FULL_KERNEL_VERSION BAZEL PREBUILT_GKI KASAN
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001300
1301 echo ROOT_DIR=$ROOT_DIR
1302 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 +08001303 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 +08001304 echo FULL_KERNEL_VERSION=${FULL_KERNEL_VERSION} BAZEL=${BAZEL} PREBUILT_GKI=${PREBUILT_GKI} KASAN=${KASAN}
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001305 echo MENUCONFIG=${MENUCONFIG} BASICCONFIG=${BASICCONFIG} IMAGE=${IMAGE} MODULES=${MODULES} DTB_BUILD=${DTB_BUILD}
1306}
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001307export -f export_env_variable
Dezhen Wang850c0d22023-05-31 19:26:20 +08001308
1309function handle_input_parameters () {
1310 VA=
1311 ARGS=()
1312 for i in "$@"
1313 do
1314 case $i in
1315 --arch)
1316 ARCH=$2
1317 VA=1
1318 shift
1319 ;;
1320 --abi)
1321 ABI=1
1322 shift
1323 ;;
1324 --build_config)
1325 BUILD_CONFIG=$2
1326 VA=1
1327 shift
1328 ;;
1329 --lto)
1330 LTO=$2
1331 VA=1
1332 shift
1333 ;;
1334 --symbol_strict)
1335 KMI_SYMBOL_LIST_STRICT_MODE=$2
1336 VA=1
1337 shift
1338 ;;
1339 --menuconfig)
1340 MENUCONFIG=1
1341 shift
1342 ;;
1343 --basicconfig)
1344 if [ "$2" = "m" ] || [ "$2" = "n" ]; then
1345 BASICCONFIG=$2
1346 else
1347 BASICCONFIG="m"
1348 fi
1349 VA=1
1350 shift
1351 ;;
1352 --image)
1353 IMAGE=1
1354 shift
1355 ;;
1356 --modules)
1357 MODULES=1
1358 shift
1359 break
1360 ;;
1361 --dtbs)
1362 DTB_BUILD=1
1363 shift
1364 ;;
1365 --build_dir)
1366 BUILD_DIR=$2
1367 VA=1
1368 shift
1369 ;;
1370 --check_defconfig)
1371 CHECK_DEFCONFIG=1
1372 shift
1373 ;;
1374 --modules_depend)
1375 MODULES_DEPEND=1
1376 shift
1377 ;;
1378 --android_project)
1379 ANDROID_PROJECT=$2
1380 VA=1
1381 shift
1382 ;;
1383 --gki_20)
1384 GKI_CONFIG=gki_20
1385 shift
1386 ;;
1387 --gki_10)
1388 GKI_CONFIG=gki_10
1389 shift
1390 ;;
Dezhen Wang850c0d22023-05-31 19:26:20 +08001391 --fast_build)
1392 FAST_BUILD=1
1393 shift
1394 ;;
1395 --upgrade)
qinglin.li62b23332023-06-25 10:37:41 +08001396 UPGRADE_PROJECT=$2
Dezhen Wang850c0d22023-05-31 19:26:20 +08001397 ANDROID_VERSION=$2
qinglin.li62b23332023-06-25 10:37:41 +08001398 GKI_CONFIG=
Dezhen Wang850c0d22023-05-31 19:26:20 +08001399 VA=1
1400 shift
1401 ;;
1402 --manual_insmod_module)
1403 MANUAL_INSMOD_MODULE=1
1404 shift
1405 ;;
Dezhen Wang850c0d22023-05-31 19:26:20 +08001406 --check_gki_20)
1407 CHECK_GKI_20=1
1408 GKI_CONFIG=gki_20
1409 LTO=none
1410 shift
1411 ;;
1412 --dev_config)
1413 DEV_CONFIGS=$2
1414 VA=1
1415 shift
1416 ;;
Wanwei Jiang0a519f62023-06-30 16:56:28 +08001417 --use_prebuilt_gki)
1418 PREBUILT_GKI=$2
1419 VA=1
Dezhen Wang850c0d22023-05-31 19:26:20 +08001420 shift
1421 ;;
qinglin.li7cf37c02023-07-04 16:06:04 +08001422 --kasan)
1423 KASAN=1
1424 LTO=none
1425 shift
1426 ;;
Dezhen Wang850c0d22023-05-31 19:26:20 +08001427 -h|--help)
1428 show_help
1429 exit 0
1430 ;;
1431 *)
1432 if [[ -n $1 ]];
1433 then
1434 if [[ -z ${VA} ]];
1435 then
1436 ARGS+=("$1")
1437 fi
1438 fi
1439 VA=
1440 shift
1441 ;;
1442 esac
1443 done
1444}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001445export -f handle_input_parameters
1446
1447function set_default_parameters () {
1448 if [ "${ARCH}" = "arm" ]; then
1449 ARGS+=("LOADADDR=0x108000")
1450 else
1451 ARCH=arm64
1452 fi
1453
1454 if [[ -z "${ABI}" ]]; then
1455 ABI=0
1456 fi
1457 if [[ -z "${LTO}" ]]; then
1458 LTO=thin
1459 fi
1460 if [[ -n ${CHECK_GKI_20} && -z ${ANDROID_PROJECT} ]]; then
1461 ANDROID_PROJECT=ohm
1462 fi
1463
1464 if [[ -z "${BUILD_CONFIG}" ]]; then
1465 if [ "${ARCH}" = "arm64" ]; then
1466 BUILD_CONFIG=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic
1467 elif [ "${ARCH}" = "arm" ]; then
1468 BUILD_CONFIG=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic32
1469 fi
1470 fi
1471 if [[ -z "${BUILD_DIR}" ]]; then
1472 BUILD_DIR=build
1473 fi
1474
1475 version_message=$(grep -rn BRANCH= ${KERNEL_DIR}/build.config.constants)
1476 version_message="common${version_message##*android}"
1477 if [[ -n ${FULL_KERNEL_VERSION} ]]; then
1478 if [[ "${FULL_KERNEL_VERSION}" != "${version_message}" ]]; then
1479 echo "kernel version is not match!!"
1480 exit
1481 fi
1482 else
1483 FULL_KERNEL_VERSION=${version_message}
1484 fi
1485
1486 if [[ -z ${BAZEL} ]]; then
qinglin.li62b23332023-06-25 10:37:41 +08001487 [[ "${FULL_KERNEL_VERSION}" != "common13-5.15" && "${ARCH}" == "arm64" ]] && BAZEL=1
Dezhen Wang850c0d22023-05-31 19:26:20 +08001488 fi
1489
1490 auto_patch_to_common_dir
1491
qinglin.lieafebcf2023-06-27 12:48:22 +08001492 if [[ ! -f ${BUILD_DIR}/build_abi.sh && ${BAZEL} == 0 ]]; then
Dezhen Wang850c0d22023-05-31 19:26:20 +08001493 echo "The directory of build does not exist";
1494 exit
1495 fi
1496
1497 ROOT_DIR=$(readlink -f $(dirname $0))
1498 if [[ ! -f ${ROOT_DIR}/${KERNEL_DIR}/init/main.c ]]; then
1499 ROOT_DIR=`pwd`
1500 if [[ ! -f ${ROOT_DIR}/${KERNEL_DIR}/init/main.c ]]; then
1501 echo "the file path of $0 is incorrect"
1502 exit
1503 fi
1504 fi
1505 export ROOT_DIR
1506
1507 CHECK_DEFCONFIG=${CHECK_DEFCONFIG:-0}
1508 MODULES_DEPEND=${MODULES_DEPEND:-0}
1509 if [[ ! -f ${KERNEL_BUILD_VAR_FILE} ]]; then
1510 export KERNEL_BUILD_VAR_FILE=`mktemp /tmp/kernel.XXXXXXXXXXXX`
1511 RM_KERNEL_BUILD_VAR_FILE=1
1512 fi
1513
Dezhen Wang850c0d22023-05-31 19:26:20 +08001514 export CROSS_COMPILE=
1515
1516 if [ "${ABI}" -eq "1" ]; then
1517 export OUT_DIR_SUFFIX="_abi"
1518 else
1519 OUT_DIR_SUFFIX=
1520 fi
1521}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001522export -f set_default_parameters
1523
1524function auto_patch_to_common_dir () {
1525 #first auto patch when param parse end
Dezhen Wang850c0d22023-05-31 19:26:20 +08001526
1527 if [[ -f ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/auto_patch/auto_patch.sh ]]; then
1528 export PATCH_PARM
1529 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/auto_patch/auto_patch.sh ${FULL_KERNEL_VERSION}
Dezhen Wang4e608102023-07-05 18:55:30 +08001530 if [[ $? -ne 0 ]]; then
1531 echo "auto patch error!"
1532 exit 1
1533 fi
Dezhen Wang850c0d22023-05-31 19:26:20 +08001534 fi
1535
1536 if [[ ${ONLY_PATCH} -eq "1" ]]; then
1537 cd ${CURRENT_DIR}
1538 exit
1539 fi
1540}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001541export -f auto_patch_to_common_dir
1542
Dezhen Wang850c0d22023-05-31 19:26:20 +08001543function handle_input_parameters_for_smarthome () {
1544 VA=
1545 ARGS=()
1546 for i in "$@"
1547 do
1548 case $i in
1549 --savedefconfig)
1550 SAVEDEFCONFIG=1
1551 shift
1552 ;;
1553 --menuconfig)
1554 MENUCONFIG=1
1555 shift
1556 ;;
1557 --dtb)
1558 DTB=1
1559 shift
1560 ;;
1561 --manual_insmod_module)
1562 MANUAL_INSMOD_MODULE=1
1563 shift
1564 ;;
1565 --patch)
1566 ONLY_PATCH=1
1567 shift
1568 ;;
1569 -h|--help)
1570 show_help
1571 exit 0
1572 ;;
1573 *)
1574 if [[ -n $1 ]];
1575 then
1576 if [[ -z ${VA} ]];
1577 then
1578 ARGS+=("$1")
1579 fi
1580 fi
1581 VA=
1582 shift
1583 ;;
1584 esac
1585 done
1586}
1587
1588export -f handle_input_parameters_for_smarthome
1589
1590function set_default_parameters_for_smarthome () {
1591 version_message=$(grep -rn BRANCH= ${KERNEL_DIR}/build.config.constants)
1592 version_message="common${version_message##*android}"
1593 if [[ -n ${FULL_KERNEL_VERSION} ]]; then
1594 if [[ "${FULL_KERNEL_VERSION}" != "${version_message}" ]]; then
1595 echo "kernel version is not match!!"
1596 exit
1597 fi
1598 else
1599 FULL_KERNEL_VERSION=${version_message}
1600 fi
1601
1602 tool_args=()
1603 prebuilts_paths=(
1604 CLANG_PREBUILT_BIN
1605 #BUILDTOOLS_PREBUILT_BIN
1606 )
1607 echo CC_CLANG=$CC_CLANG
1608 if [[ $CC_CLANG -eq "1" ]]; then
1609 source ${ROOT_DIR}/${KERNEL_DIR}/build.config.common
1610 if [[ -n "${LLVM}" ]]; then
1611 tool_args+=("LLVM=1")
1612 fi
1613 #if [ -n "${DTC}" ]; then
1614 # tool_args+=("DTC=${DTC}")
1615 #fi
1616 for prebuilt_bin in "${prebuilts_paths[@]}"; do
1617 prebuilt_bin=\${${prebuilt_bin}}
1618 eval prebuilt_bin="${prebuilt_bin}"
1619 if [ -n "${prebuilt_bin}" ]; then
1620 PATH=${PATH//"${ROOT_DIR}\/${prebuilt_bin}:"}
1621 PATH=${ROOT_DIR}/${prebuilt_bin}:${PATH} # add the clang tool to env PATH
1622 fi
1623 done
1624 export PATH
1625 elif [[ -n $CROSS_COMPILE_TOOL ]]; then
1626 export CROSS_COMPILE=${CROSS_COMPILE_TOOL}
1627 fi
1628
1629 if [[ $ARCH == arm64 ]]; then
1630 OUTDIR=${ROOT_DIR}/out/kernel-5.15-64
1631 elif [[ $ARCH == arm ]]; then
1632 OUTDIR=${ROOT_DIR}/out/kernel-5.15-32
Dezhen Wang1176fad2023-06-09 11:22:17 +08001633 tool_args+=("LOADADDR=0x108000")
Dezhen Wang850c0d22023-05-31 19:26:20 +08001634 elif [[ $ARCH == riscv ]]; then
1635 OUTDIR=${ROOT_DIR}/out/riscv-kernel-5.15-64
1636 fi
1637 TOOL_ARGS="${tool_args[@]}"
1638
1639 OUT_DIR=${OUTDIR}/common
1640 mkdir -p ${OUT_DIR}
1641 if [ "${SKIP_RM_OUTDIR}" != "1" ] ; then
1642 rm -rf ${OUTDIR}
1643 fi
1644
1645 echo "========================================================"
1646 echo ""
1647 export DIST_DIR=$(readlink -m ${OUTDIR}/dist)
1648 export MODULES_STAGING_DIR=$(readlink -m ${OUTDIR}/staging)
1649 export OUT_AMLOGIC_DIR=$(readlink -m ${OUTDIR}/amlogic)
1650 echo OUTDIR=$OUTDIR DIST_DIR=$DIST_DIR MODULES_STAGING_DIR=$MODULES_STAGING_DIR KERNEL_DIR=$KERNEL_DIR
1651
1652
1653 source ${ROOT_DIR}/build/kernel/build_utils.sh
1654
1655 DTS_EXT_DIR=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/boot/dts/amlogic
qinglin.lia40f7b62023-07-26 18:52:35 +08001656 DTS_EXT_DIR=$(real_path ${ROOT_DIR}/${DTS_EXT_DIR} ${KERNEL_DIR})
Dezhen Wang850c0d22023-05-31 19:26:20 +08001657 export dtstree=${DTS_EXT_DIR}
1658 export DTC_INCLUDE=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/include
1659
1660 EXT_MODULES="
1661 ${EXT_MODULES}
1662 "
1663
1664 EXT_MODULES_CONFIG="
1665 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/ext_modules_config
1666 "
1667
1668 EXT_MODULES_PATH="
1669 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/ext_modules_path
1670 "
1671
1672 POST_KERNEL_BUILD_CMDS="prepare_module_build"
1673 EXTRA_CMDS="extra_cmds"
1674
1675 IN_KERNEL_MODULES=1
1676}
1677
1678export -f set_default_parameters_for_smarthome
1679
1680function savedefconfig_cmd_for_smarthome () {
1681 if [[ -n ${SAVEDEFCONFIG} ]]; then
1682 set -x
1683 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${DEFCONFIG}
1684 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} savedefconfig
Dezhen Wang1176fad2023-06-09 11:22:17 +08001685 rm ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/configs/${DEFCONFIG}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001686 cp -f ${OUT_DIR}/defconfig ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/configs/${DEFCONFIG}
1687 set +x
1688 exit
1689 fi
1690}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001691export -f savedefconfig_cmd_for_smarthome
1692
1693function only_build_dtb_for_smarthome () {
1694 if [[ -n ${DTB} ]]; then
1695 set -x
1696 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
1697 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs || exit
1698 set +x
1699 exit
1700 fi
1701}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001702export -f only_build_dtb_for_smarthome
1703
1704function make_menuconfig_cmd_for_smarthome () {
1705 if [[ -n ${MENUCONFIG} ]]; then
1706 set -x
1707 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${DEFCONFIG}
1708 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} menuconfig
1709 set +x
1710 exit
1711 fi
1712}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001713export -f make_menuconfig_cmd_for_smarthome
1714
1715function build_kernel_for_different_cpu_architecture () {
1716 set -x
1717 if [[ $ARCH == arm64 ]]; then
1718 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
1719 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} headers_install &&
1720 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} Image -j12 &&
1721 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} modules -j12 &&
1722 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 &&
1723 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs -j12 || exit
Dezhen Wang850c0d22023-05-31 19:26:20 +08001724 elif [[ $ARCH == arm ]]; then
1725 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
1726 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} headers_install &&
1727 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} uImage -j12 &&
1728 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} modules -j12 &&
1729 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 &&
1730 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs -j12 || exit
Dezhen Wang850c0d22023-05-31 19:26:20 +08001731 elif [[ $ARCH == riscv ]]; then
1732 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
1733 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} headers_install &&
1734 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} Image -j12 &&
1735 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} modules -j12 &&
1736 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} INSTALL_MOD_PATH=${MODULES_STAGING_DIR} modules_install -j12 &&
1737 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs -j12 || exit
Dezhen Wang850c0d22023-05-31 19:26:20 +08001738 fi
1739 cp ${OUT_DIR}/arch/${ARCH}/boot/Image* ${DIST_DIR}
1740 cp ${OUT_DIR}/arch/${ARCH}/boot/uImage* ${DIST_DIR}
1741 cp ${OUT_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/boot/dts/amlogic/*.dtb ${DIST_DIR}
1742 cp ${OUT_DIR}/vmlinux ${DIST_DIR}
1743 set +x
1744}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001745export -f build_kernel_for_different_cpu_architecture
1746
1747function build_ext_modules() {
1748 for EXT_MOD in ${EXT_MODULES}; do
qinglin.lia40f7b62023-07-26 18:52:35 +08001749 EXT_MOD_REL=$(real_path ${ROOT_DIR}/${EXT_MOD} ${KERNEL_DIR})
Dezhen Wang850c0d22023-05-31 19:26:20 +08001750 mkdir -p ${OUT_DIR}/${EXT_MOD_REL}
1751
1752 set -x
1753 make ARCH=${ARCH} -C ${ROOT_DIR}/${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1754 O=${OUT_DIR} ${TOOL_ARGS} -j12 || exit
1755 make ARCH=${ARCH} -C ${ROOT_DIR}/${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1756 O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} \
1757 INSTALL_MOD_PATH=${MODULES_STAGING_DIR} \
1758 INSTALL_MOD_DIR="extra/${EXT_MOD}" \
1759 INSTALL_MOD_STRIP=1 \
1760 modules_install -j12 || exit
1761 set +x
1762 done
1763}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001764export -f build_ext_modules
1765
1766function copy_modules_and_rebuild_rootfs_for_smarthome () {
Dezhen Wang1176fad2023-06-09 11:22:17 +08001767
1768 copy_modules_files_to_dist_dir
1769
1770 if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then
1771 echo "========================================================"
1772 echo "Rebuild rootfs in order to install modules!"
1773 rebuild_rootfs ${ARCH}
1774 echo "Build success!"
1775 else
1776 echo "There's no file ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot, so don't rebuild rootfs!"
1777 fi
1778}
1779export -f copy_modules_and_rebuild_rootfs_for_smarthome
1780
1781function copy_modules_files_to_dist_dir () {
Dezhen Wang850c0d22023-05-31 19:26:20 +08001782 MODULES=$(find ${MODULES_STAGING_DIR} -type f -name "*.ko")
1783 if [ -n "${MODULES}" ]; then
1784 if [ -n "${IN_KERNEL_MODULES}" -o -n "${EXT_MODULES}" -o -n "${EXT_MODULES_MAKEFILE}" ]; then
1785 echo "========================================================"
1786 echo " Copying modules files"
1787 for module in ${MODULES}; do
1788 cp ${module} ${DIST_DIR}
1789 done
1790 if [ "${COMPRESS_MODULES}" = "1" ]; then
1791 echo " Archiving modules to ${MODULES_ARCHIVE}"
1792 tar --transform="s,.*/,," -czf ${DIST_DIR}/${MODULES_ARCHIVE} ${MODULES[@]}
1793 fi
1794 fi
Dezhen Wang850c0d22023-05-31 19:26:20 +08001795 fi
1796}
Dezhen Wang1176fad2023-06-09 11:22:17 +08001797export -f copy_modules_files_to_dist_dir
Dezhen Wang850c0d22023-05-31 19:26:20 +08001798
Dezhen Wang1176fad2023-06-09 11:22:17 +08001799function copy_files_to_dist_dir () {
1800 echo "========================================================"
1801 echo " Copying files"
1802 for FILE in ${FILES}; do
1803 if [ -f ${OUT_DIR}/${FILE} ]; then
1804 echo " $FILE"
1805 cp -p ${OUT_DIR}/${FILE} ${DIST_DIR}/
1806 elif [[ "${FILE}" =~ \.dtb|\.dtbo ]] && \
1807 [ -n "${DTS_EXT_DIR}" ] && [ -f "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" ] ; then
1808 # DTS_EXT_DIR is recalculated before to be relative to KERNEL_DIR
1809 echo " $FILE"
1810 cp -p "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" "${DIST_DIR}/"
1811 else
1812 echo " $FILE is not a file, skipping"
1813 fi
1814 done
1815}
1816export -f copy_files_to_dist_dir
1817
1818function make_dtbo() {
1819 if [[ -n "${BUILD_DTBO_IMG}" ]]; then
1820 echo "========================================================"
1821 echo " Creating dtbo image at ${DIST_DIR}/dtbo.img"
1822 (
1823 cd ${OUT_DIR}
1824 mkdtimg create "${DIST_DIR}"/dtbo.img ${MKDTIMG_FLAGS} ${MKDTIMG_DTBOS}
1825 )
1826 fi
1827}
1828export -f make_dtbo
1829
1830function installing_UAPI_kernel_headers () {
1831 if [ -z "${SKIP_CP_KERNEL_HDR}" ]; then
1832 echo "========================================================"
1833 echo " Installing UAPI kernel headers:"
1834 mkdir -p "${KERNEL_UAPI_HEADERS_DIR}/usr"
1835 make -C ${OUT_DIR} O=${OUT_DIR} ${TOOL_ARGS} \
1836 INSTALL_HDR_PATH="${KERNEL_UAPI_HEADERS_DIR}/usr" "${MAKE_ARGS[@]}" \
1837 headers_install
1838 # The kernel makefiles create files named ..install.cmd and .install which
1839 # are only side products. We don't want those. Let's delete them.
1840 find ${KERNEL_UAPI_HEADERS_DIR} \( -name ..install.cmd -o -name .install \) -exec rm '{}' +
1841 KERNEL_UAPI_HEADERS_TAR=${DIST_DIR}/kernel-uapi-headers.tar.gz
1842 echo " Copying kernel UAPI headers to ${KERNEL_UAPI_HEADERS_TAR}"
1843 tar -czf ${KERNEL_UAPI_HEADERS_TAR} --directory=${KERNEL_UAPI_HEADERS_DIR} usr/
1844 fi
1845}
1846export -f installing_UAPI_kernel_headers
1847
1848function copy_kernel_headers_to_compress () {
1849 if [ -z "${SKIP_CP_KERNEL_HDR}" ] ; then
1850 echo "========================================================"
1851 KERNEL_HEADERS_TAR=${DIST_DIR}/kernel-headers.tar.gz
1852 echo " Copying kernel headers to ${KERNEL_HEADERS_TAR}"
1853 pushd $ROOT_DIR/$KERNEL_DIR
1854 find arch include $OUT_DIR -name *.h -print0 \
1855 | tar -czf $KERNEL_HEADERS_TAR \
1856 --absolute-names \
1857 --dereference \
1858 --transform "s,.*$OUT_DIR,," \
1859 --transform "s,^,kernel-headers/," \
1860 --null -T -
1861 popd
1862 fi
1863}
1864export -f copy_kernel_headers_to_compress
1865
1866function set_default_parameters_for_32bit () {
1867 tool_args=()
1868 prebuilts_paths=(
1869 CLANG_PREBUILT_BIN
1870 CLANGTOOLS_PREBUILT_BIN
1871 RUST_PREBUILT_BIN
1872 LZ4_PREBUILTS_BIN
1873 DTC_PREBUILTS_BIN
1874 LIBUFDT_PREBUILTS_BIN
1875 BUILDTOOLS_PREBUILT_BIN
1876 )
1877 echo CC_CLANG=$CC_CLANG
1878 if [[ $CC_CLANG -eq "1" ]]; then
1879 source ${ROOT_DIR}/${KERNEL_DIR}/build.config.common
1880 if [[ -n "${LLVM}" ]]; then
1881 tool_args+=("LLVM=1")
1882 # Reset a bunch of variables that the kernel's top level Makefile does, just
1883 # in case someone tries to use these binaries in this script such as in
1884 # initramfs generation below.
1885 HOSTCC=clang
1886 HOSTCXX=clang++
1887 CC=clang
1888 LD=ld.lld
1889 AR=llvm-ar
1890 NM=llvm-nm
1891 OBJCOPY=llvm-objcopy
1892 OBJDUMP=llvm-objdump
1893 OBJSIZE=llvm-size
1894 READELF=llvm-readelf
1895 STRIP=llvm-strip
1896 else
1897 if [ -n "${HOSTCC}" ]; then
1898 tool_args+=("HOSTCC=${HOSTCC}")
1899 fi
1900
1901 if [ -n "${CC}" ]; then
1902 tool_args+=("CC=${CC}")
1903 if [ -z "${HOSTCC}" ]; then
1904 tool_args+=("HOSTCC=${CC}")
1905 fi
1906 fi
1907
1908 if [ -n "${LD}" ]; then
1909 tool_args+=("LD=${LD}" "HOSTLD=${LD}")
1910 fi
1911
1912 if [ -n "${NM}" ]; then
1913 tool_args+=("NM=${NM}")
1914 fi
1915
1916 if [ -n "${OBJCOPY}" ]; then
1917 tool_args+=("OBJCOPY=${OBJCOPY}")
1918 fi
1919 fi
1920
1921 if [ -n "${DTC}" ]; then
1922 tool_args+=("DTC=${DTC}")
1923 fi
1924 for prebuilt_bin in "${prebuilts_paths[@]}"; do
1925 prebuilt_bin=\${${prebuilt_bin}}
1926 eval prebuilt_bin="${prebuilt_bin}"
1927 if [ -n "${prebuilt_bin}" ]; then
1928 PATH=${PATH//"${ROOT_DIR}\/${prebuilt_bin}:"}
1929 PATH=${ROOT_DIR}/${prebuilt_bin}:${PATH} # add the clang tool to env PATH
1930 fi
1931 done
1932 export PATH
1933 elif [[ -n $CROSS_COMPILE_TOOL ]]; then
1934 export CROSS_COMPILE=${CROSS_COMPILE_TOOL}
1935 fi
1936
1937 # Have host compiler use LLD and compiler-rt.
1938 LLD_COMPILER_RT="-fuse-ld=lld --rtlib=compiler-rt"
1939 if [[ -n "${NDK_TRIPLE}" ]]; then
1940 NDK_DIR=${ROOT_DIR}/prebuilts/ndk-r23
1941
1942 if [[ ! -d "${NDK_DIR}" ]]; then
1943 # Kleaf/Bazel will checkout the ndk to a different directory than
1944 # build.sh.
1945 NDK_DIR=${ROOT_DIR}/external/prebuilt_ndk
1946 if [[ ! -d "${NDK_DIR}" ]]; then
1947 echo "ERROR: NDK_TRIPLE set, but unable to find prebuilts/ndk." 1>&2
1948 echo "Did you forget to checkout prebuilts/ndk?" 1>&2
1949 exit 1
1950 fi
1951 fi
1952 USERCFLAGS="--target=${NDK_TRIPLE} "
1953 USERCFLAGS+="--sysroot=${NDK_DIR}/toolchains/llvm/prebuilt/linux-x86_64/sysroot "
1954 # Some kernel headers trigger -Wunused-function for unused static functions
1955 # with clang; GCC does not warn about unused static inline functions. The
1956 # kernel sets __attribute__((maybe_unused)) on such functions when W=1 is
1957 # not set.
1958 USERCFLAGS+="-Wno-unused-function "
1959 # To help debug these flags, consider commenting back in the following, and
1960 # add `echo $@ > /tmp/log.txt` and `2>>/tmp/log.txt` to the invocation of $@
1961 # in scripts/cc-can-link.sh.
1962 #USERCFLAGS+=" -Wl,--verbose -v"
1963 # We need to set -fuse-ld=lld for Android's build env since AOSP LLVM's
1964 # clang is not configured to use LLD by default, and BFD has been
1965 # intentionally removed. This way CC_CAN_LINK can properly link the test in
1966 # scripts/cc-can-link.sh.
1967 USERLDFLAGS="${LLD_COMPILER_RT} "
1968 USERLDFLAGS+="--target=${NDK_TRIPLE} "
1969 else
1970 USERCFLAGS="--sysroot=/dev/null"
1971 fi
1972
1973 #setting_the_default_output_dir
1974 export COMMON_OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out${OUT_DIR_SUFFIX}/${BRANCH}})
1975 export OUT_DIR=$(readlink -m ${COMMON_OUT_DIR}/${KERNEL_DIR})
1976 export DIST_DIR=$(readlink -m ${DIST_DIR:-${COMMON_OUT_DIR}/dist})
1977 export UNSTRIPPED_DIR=${DIST_DIR}/unstripped
1978 export UNSTRIPPED_MODULES_ARCHIVE=unstripped_modules.tar.gz
1979 export MODULES_ARCHIVE=modules.tar.gz
1980 export MODULES_STAGING_DIR=$(readlink -m ${COMMON_OUT_DIR}/staging)
1981 export MODULES_PRIVATE_DIR=$(readlink -m ${COMMON_OUT_DIR}/private)
1982 export KERNEL_UAPI_HEADERS_DIR=$(readlink -m ${COMMON_OUT_DIR}/kernel_uapi_headers)
1983 export INITRAMFS_STAGING_DIR=${MODULES_STAGING_DIR}/initramfs_staging
1984 export SYSTEM_DLKM_STAGING_DIR=${MODULES_STAGING_DIR}/system_dlkm_staging
1985 export VENDOR_DLKM_STAGING_DIR=${MODULES_STAGING_DIR}/vendor_dlkm_staging
1986 export MKBOOTIMG_STAGING_DIR="${MODULES_STAGING_DIR}/mkbootimg_staging"
1987 export OUT_AMLOGIC_DIR=$(readlink -m ${COMMON_OUT_DIR}/amlogic)
1988
1989 tool_args+=("LOADADDR=0x108000")
1990 tool_args+=("DEPMOD=depmod")
Wanwei Jiang0bde3122023-07-20 10:24:07 +08001991 tool_args+=("KCONFIG_EXT_MODULES_PREFIX=${KCONFIG_EXT_MODULES_PREFIX}")
1992 tool_args+=("KCONFIG_EXT_PREFIX=${KCONFIG_EXT_PREFIX}")
Dezhen Wang1176fad2023-06-09 11:22:17 +08001993 TOOL_ARGS="${tool_args[@]}"
1994
1995 mkdir -p ${OUT_DIR}
1996 if [ "${SKIP_RM_OUTDIR}" != "1" ] ; then
1997 rm -rf ${COMMON_OUT_DIR}
1998 fi
1999
2000 source ${ROOT_DIR}/build/kernel/build_utils.sh
2001
2002 DTS_EXT_DIR=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/boot/dts/amlogic
qinglin.lia40f7b62023-07-26 18:52:35 +08002003 DTS_EXT_DIR=$(real_path ${ROOT_DIR}/${DTS_EXT_DIR} ${KERNEL_DIR})
Dezhen Wang1176fad2023-06-09 11:22:17 +08002004 export dtstree=${DTS_EXT_DIR}
2005 export DTC_INCLUDE=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/include
2006
2007 EXT_MODULES="
2008 ${EXT_MODULES}
2009 "
2010
2011 EXT_MODULES_CONFIG="
2012 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/ext_modules_config
2013 "
2014
2015 EXT_MODULES_PATH="
2016 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/ext_modules_path
2017 "
2018
2019 POST_KERNEL_BUILD_CMDS="prepare_module_build"
2020 EXTRA_CMDS="extra_cmds"
2021
2022 IN_KERNEL_MODULES=1
2023}
2024export -f set_default_parameters_for_32bit
2025
2026function generating_test_mappings_zip () {
2027 echo "========================================================"
2028 echo " Generating test_mappings.zip"
2029 TEST_MAPPING_FILES=${OUT_DIR}/test_mapping_files.txt
2030 find ${ROOT_DIR} -name TEST_MAPPING \
2031 -not -path "${ROOT_DIR}/\.git*" \
2032 -not -path "${ROOT_DIR}/\.repo*" \
2033 -not -path "${ROOT_DIR}/out*" \
2034 > ${TEST_MAPPING_FILES}
2035 soong_zip -o ${DIST_DIR}/test_mappings.zip -C ${ROOT_DIR} -l ${TEST_MAPPING_FILES}
2036}
2037export -f generating_test_mappings_zip
2038
Dezhen Wang42c6bf82023-07-20 10:16:49 +08002039function setting_up_for_build () {
2040 echo "========================================================"
2041 echo " Setting up for build"
2042 if [ "${SKIP_MRPROPER}" != "1" ] ; then
2043 set -x
2044 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" mrproper)
2045 set +x
2046 fi
2047}
2048export -f setting_up_for_build
2049
2050function build_kernel_for_32bit () {
2051 set -x
2052 if [ "${SKIP_DEFCONFIG}" != "1" ] ; then
2053 (cd ${KERNEL_DIR} && make ARCH=arm ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
2054 fi
2055
2056 echo "========================================================"
2057 echo " Building kernel"
2058
2059 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} uImage -j12 &&
2060 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} modules -j12 &&
2061 if [[ -n ${ANDROID_PROJECT} ]]; then
2062 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} android_overlay_dt.dtbo -j12
2063 fi
2064 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs -j12 || exit
2065 set +x
2066}
2067export -f build_kernel_for_32bit
2068
2069function modules_install_for_32bit () {
2070 set -x
2071 if [ "${BUILD_INITRAMFS}" = "1" -o -n "${IN_KERNEL_MODULES}" ]; then
2072 echo "========================================================"
2073 echo " Installing kernel modules into staging directory"
2074
2075 (cd ${OUT_DIR} && make ARCH=arm O=${OUT_DIR} ${TOOL_ARGS} INSTALL_MOD_STRIP=1 \
2076 INSTALL_MOD_PATH=${MODULES_STAGING_DIR} modules_install)
2077 fi
2078 set +x
2079}
2080export -f modules_install_for_32bit