blob: 14de8955da03569319cc4c83a9b146b975617ef7 [file] [log] [blame]
wanwei.jiang91776952021-11-19 13:10:32 +08001#!/bin/bash
2
3function pre_defconfig_cmds() {
wanwei.jiangff4dccd2022-08-14 01:14:51 +08004 export OUT_AMLOGIC_DIR=$(readlink -m ${COMMON_OUT_DIR}/amlogic)
Lei Zhang2853aa52022-08-23 09:40:06 +08005 if [ "${ARCH}" = "arm" ]; then
6 export PATH=${PATH}:/usr/bin/
7 fi
wanwei.jiangff4dccd2022-08-14 01:14:51 +08008
Wanwei Jiang51217812022-11-01 20:23:03 +08009 if [[ -z ${ANDROID_PROJECT} ]]; then
10 local temp_file=`mktemp /tmp/config.XXXXXXXXXXXX`
11 echo "CONFIG_AMLOGIC_SERIAL_MESON=y" > ${temp_file}
qinglin.li931a53f2022-11-23 11:09:03 +080012 echo "CONFIG_DEVTMPFS=y" >> ${temp_file}
Dezhen Wanga6806c52023-06-13 19:47:05 +080013 if [[ ${ARCH} == arm ]]; then
Wanwei Jiang51217812022-11-01 20:23:03 +080014 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${GKI_BASE_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG} ${temp_file}
Dezhen Wanga6806c52023-06-13 19:47:05 +080015 else
16 if [[ ${GKI_CONFIG} == gki_20 ]]; then
17 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${GKI_BASE_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG} ${temp_file}
18 elif [[ ${GKI_CONFIG} == gki_10 ]]; then
19 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${GKI_BASE_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG_GKI10} ${temp_file}
20 elif [[ ${GKI_CONFIG} == gki_debug ]]; then
21 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${GKI_BASE_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG_GKI10} ${ROOT_DIR}/${FRAGMENT_CONFIG_DEBUG} ${temp_file}
22 fi
Wanwei Jiang51217812022-11-01 20:23:03 +080023 fi
24 rm ${temp_file}
25 else
Dezhen Wanga6806c52023-06-13 19:47:05 +080026 if [[ ${ARCH} == arm ]]; then
27 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${GKI_BASE_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG}
28 else
29 if [[ ${GKI_CONFIG} == gki_20 ]]; then
30 if [[ -n ${CHECK_GKI_20} ]]; then
31 local temp_file=`mktemp /tmp/config.XXXXXXXXXXXX`
32 echo "CONFIG_STMMAC_ETH=n" > ${temp_file}
33 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${GKI_BASE_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG} ${temp_file}
34 rm ${temp_file}
35 else
36 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${GKI_BASE_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG}
37 fi
38 elif [[ ${GKI_CONFIG} == gki_10 ]]; then
39 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${GKI_BASE_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG_GKI10}
40 elif [[ ${GKI_CONFIG} == gki_debug ]]; then
41 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${GKI_BASE_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG_GKI10} ${ROOT_DIR}/${FRAGMENT_CONFIG_DEBUG}
qinglin.li8d41aaf2023-02-07 19:49:44 +080042 fi
Wanwei Jiang51217812022-11-01 20:23:03 +080043 fi
wanwei.jiang6fdd3152022-08-01 20:35:05 +080044 fi
qinglin.li7a994a02022-12-05 15:04:40 +080045
46 if [[ -n ${UPGRADE_PROJECT} ]]; then
Dezhen Wang061c4782023-05-25 11:13:08 +080047 if [[ ${ANDROID_VERSION} == r || ${ANDROID_VERSION} == R ]]; then
48 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG_UPGRADE_R}
49 fi
qinglin.libce54712023-05-08 13:56:31 +080050 if [[ ${ANDROID_VERSION} == p || ${ANDROID_VERSION} == P ]]; then
51 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG_UPGRADE_P}
52 fi
Dezhen Wang061c4782023-05-25 11:13:08 +080053 if [[ ${ANDROID_VERSION} == s || ${ANDROID_VERSION} == S ]]; then
54 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG_UPGRADE_S}
55 fi
qinglin.li7a994a02022-12-05 15:04:40 +080056 fi
Dezhen Wangab7ba642023-03-15 14:10:44 +080057
Wanwei Jiangc65e4d32023-03-21 16:24:41 +080058 if [[ ${IN_BUILD_GKI_10} == 1 ]]; then
59 local temp_file=`mktemp /tmp/config.XXXXXXXXXXXX`
60 echo "CONFIG_MODULE_SIG_ALL=y" >> ${temp_file}
61 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${temp_file}
62 rm ${temp_file}
63 fi
Dezhen Wanga5f456a2023-05-05 17:40:31 +080064
65 if [[ -n ${DEV_CONFIGS} ]]; then
66 config_list=$(echo ${DEV_CONFIGS}|sed 's/+/ /g')
67 #verify the extra config is in the right path and merge the config
68 CONFIG_DIR=arch/${ARCH}/configs
69 for config_name in ${config_list[@]}
70 do
71 if [[ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/${CONFIG_DIR}/${config_name} ]]; then
72 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/${CONFIG_DIR}/${config_name}
73 elif [[ -f ${config_name} ]]; then
74 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${config_name}
75 else
76 echo "ERROR: config file ${config_name} is not in the right path!!"
77 exit
78 fi
79 done
80 fi
wanwei.jiang91776952021-11-19 13:10:32 +080081}
82export -f pre_defconfig_cmds
83
84function post_defconfig_cmds() {
Wanwei Jiang2d4f9742022-09-13 11:22:17 +080085 rm ${ROOT_DIR}/${KCONFIG_DEFCONFIG}
wanwei.jiang91776952021-11-19 13:10:32 +080086}
87export -f post_defconfig_cmds
88
89function read_ext_module_config() {
90 ALL_LINE=""
91 while read LINE
92 do
93 if [[ $LINE != \#* && $LINE != "" ]]; then
94 ALL_LINE="$ALL_LINE"" ""$LINE"
95 fi
96 done < $1
wanwei.jiang5c861ae2022-04-21 00:51:50 +080097
98 echo "${ALL_LINE}"
wanwei.jiang91776952021-11-19 13:10:32 +080099}
100
101function read_ext_module_predefine() {
102 PRE_DEFINE=""
103
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800104 for y_config in `cat $1 | grep "^CONFIG_.*=y" | sed 's/=y//'`; do
wanwei.jiang91776952021-11-19 13:10:32 +0800105 PRE_DEFINE="$PRE_DEFINE"" -D"${y_config}
106 done
107
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800108 for m_config in `cat $1 | grep "^CONFIG_.*=m" | sed 's/=m//'`; do
wanwei.jiang91776952021-11-19 13:10:32 +0800109 PRE_DEFINE="$PRE_DEFINE"" -D"${m_config}_MODULE
110 done
111
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800112 echo "${PRE_DEFINE}"
wanwei.jiang91776952021-11-19 13:10:32 +0800113}
114
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800115top_ext_drivers=top_ext_drivers
wanwei.jiang91776952021-11-19 13:10:32 +0800116function prepare_module_build() {
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800117 local temp_file=`mktemp /tmp/kernel.XXXXXXXXXXXX`
Wanwei Jiang0a74fb12022-12-09 16:27:40 +0800118 if [[ ! `grep "CONFIG_AMLOGIC_IN_KERNEL_MODULES=y" ${ROOT_DIR}/${FRAGMENT_CONFIG}` ]]; then
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800119 sed 's:#.*$::g' ${ROOT_DIR}/${FRAGMENT_CONFIG} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
120 GKI_EXT_KERNEL_MODULE_CONFIG=$(read_ext_module_config ${temp_file})
121 GKI_EXT_KERNEL_MODULE_PREDEFINE=$(read_ext_module_predefine ${temp_file})
122 export GKI_EXT_KERNEL_MODULE_CONFIG GKI_EXT_KERNEL_MODULE_PREDEFINE
wanwei.jiang91776952021-11-19 13:10:32 +0800123 fi
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800124
125 for ext_module_config in ${EXT_MODULES_CONFIG}; do
126 sed 's:#.*$::g' ${ROOT_DIR}/${ext_module_config} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
127 GKI_EXT_MODULE_CONFIG=$(read_ext_module_config ${temp_file})
128 GKI_EXT_MODULE_PREDEFINE=$(read_ext_module_predefine ${temp_file})
129 done
130 export GKI_EXT_MODULE_CONFIG GKI_EXT_MODULE_PREDEFINE
131 echo GKI_EXT_MODULE_CONFIG=${GKI_EXT_MODULE_CONFIG}
132 echo GKI_EXT_MODULE_PREDEFINE=${GKI_EXT_MODULE_PREDEFINE}
133
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800134 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
135 if [[ -d ${top_ext_drivers} ]]; then
136 rm -rf ${top_ext_drivers}
137 fi
138 mkdir -p ${top_ext_drivers}
139 fi
140
141 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
142 extra_symbols="KBUILD_EXTRA_SYMBOLS +="
143 fi
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800144 ext_modules=
145 for ext_module in ${EXT_MODULES}; do
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800146 module_abs_path=`readlink -e ${ext_module}`
147 module_rel_path=$(rel_path ${module_abs_path} ${ROOT_DIR})
148 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
149 if [[ `echo ${module_rel_path} | grep "\.\.\/"` ]]; then
150 cp -rf ${module_abs_path} ${top_ext_drivers}
151 module_rel_path=${top_ext_drivers}/${module_abs_path##*/}
152 fi
153 fi
154 ext_modules="${ext_modules} ${module_rel_path}"
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800155 done
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800156
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800157 for ext_module_path in ${EXT_MODULES_PATH}; do
158 sed 's:#.*$::g' ${ROOT_DIR}/${ext_module_path} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800159 while read LINE
160 do
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800161 module_abs_path=`readlink -e ${LINE}`
162 module_rel_path=$(rel_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
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800168 fi
169 ext_modules="${ext_modules} ${module_rel_path}"
170
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800171 done < ${temp_file}
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800172 done
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800173 EXT_MODULES=${ext_modules}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800174
175 local flag=0
176 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
177 for ext_module in ${EXT_MODULES}; do
178 ext_mod_rel=$(rel_path ${ext_module} ${KERNEL_DIR})
179 if [[ ${flag} -eq "1" ]]; then
180 sed -i "/# auto add KBUILD_EXTRA_SYMBOLS start/,/# auto add KBUILD_EXTRA_SYMBOLS end/d" ${ext_module}/Makefile
181 sed -i "2 i # auto add KBUILD_EXTRA_SYMBOLS end" ${ext_module}/Makefile
182 sed -i "2 i ${extra_symbols}" ${ext_module}/Makefile
183 sed -i "2 i # auto add KBUILD_EXTRA_SYMBOLS start" ${ext_module}/Makefile
184 echo "${ext_module}/Makefile add: ${extra_symbols}"
185 fi
186 extra_symbols="${extra_symbols} ${ext_mod_rel}/Module.symvers"
187 flag=1
188 done
189 fi
190
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800191 export EXT_MODULES
192 echo EXT_MODULES=${EXT_MODULES}
193
194 rm ${temp_file}
wanwei.jiang91776952021-11-19 13:10:32 +0800195}
196
197export -f prepare_module_build
wanwei.jiang612a8882021-11-23 17:12:23 +0800198
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800199function extra_cmds() {
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800200 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
201 for ext_module in ${EXT_MODULES}; do
202 sed -i "/# auto add KBUILD_EXTRA_SYMBOLS start/,/# auto add KBUILD_EXTRA_SYMBOLS end/d" ${ext_module}/Makefile
203 done
204 fi
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800205
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800206 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
207 if [[ -d ${top_ext_drivers} ]]; then
208 rm -rf ${top_ext_drivers}
209 fi
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800210 fi
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800211
212 for FILE in ${FILES}; do
213 if [[ "${FILE}" =~ \.dtbo ]] && \
214 [ -n "${DTS_EXT_DIR}" ] && [ -f "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" ] ; then
215 MKDTIMG_DTBOS="${MKDTIMG_DTBOS} ${DIST_DIR}/${FILE}"
216 fi
217 done
218 export MKDTIMG_DTBOS
219
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800220 set +x
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800221 modules_install
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800222 set -x
223
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800224 local src_dir=$(echo ${MODULES_STAGING_DIR}/lib/modules/*)
225 pushd ${src_dir}
wanwei.jiangf73b2202022-07-23 16:00:44 +0800226 cp modules.order modules_order.back
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800227 : > modules.order
Wanwei Jiang571dde62022-11-17 14:37:41 +0800228 set +x
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800229 while read LINE
230 do
231 find -name ${LINE} >> modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800232 done < ${OUT_AMLOGIC_DIR}/modules/modules.order
Wanwei Jiang571dde62022-11-17 14:37:41 +0800233 set -x
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800234 sed -i "s/^\.\///" modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800235 : > ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800236 ext_modules=
237 for ext_module in ${EXT_MODULES}; do
238 if [[ ${ext_module} =~ "../" ]]; then
239 ext_module_old=${ext_module}
240 ext_module=${ext_module//\.\.\//}
241 ext_dir=$(dirname ${ext_module})
242 [[ -d extra/${ext_module} ]] && rm -rf extra/${ext_dir}
243 mkdir -p extra/${ext_dir}
244 cp -rf extra/${ext_module_old} extra/${ext_dir}
245
246 ext_modules_order_file=$(ls extra/${ext_module}/modules.order.*)
247 ext_dir_top=${ext_module%/*}
wanwei.jiangf73b2202022-07-23 16:00:44 +0800248 sed -i "s/\.\.\///g" ${ext_modules_order_file}
249 cat ${ext_modules_order_file} >> modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800250 cat ${ext_modules_order_file} | awk -F/ '{print $NF}' >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
wanwei.jiangf73b2202022-07-23 16:00:44 +0800251 : > ${ext_modules_order_file}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800252 else
253 ext_modules_order_file=$(ls extra/${ext_module}/modules.order.*)
wanwei.jiangf73b2202022-07-23 16:00:44 +0800254 cat ${ext_modules_order_file} >> modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800255 cat ${ext_modules_order_file} | awk -F/ '{print $NF}' >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
wanwei.jiangf73b2202022-07-23 16:00:44 +0800256 : > ${ext_modules_order_file}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800257 fi
258 ext_modules="${ext_modules} ${ext_module}"
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800259 done
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800260 EXT_MODULES=${ext_modules}
261 echo EXT_MODULES=${EXT_MODULES}
262 export EXT_MODULES
wanwei.jiangf73b2202022-07-23 16:00:44 +0800263
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800264 head -n ${ramdisk_last_line} modules.order > vendor_boot_modules
wanwei.jiangf73b2202022-07-23 16:00:44 +0800265 file_last_line=`sed -n "$=" modules.order`
266 let line=${file_last_line}-${ramdisk_last_line}
267 tail -n ${line} modules.order > vendor_dlkm_modules
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800268 export MODULES_LIST=${src_dir}/vendor_boot_modules
269 if [[ "${ARCH}" = "arm64" && -z ${FAST_BUILD} ]]; then
Lei Zhang96efea62022-09-02 14:55:06 +0800270 export VENDOR_DLKM_MODULES_LIST=${src_dir}/vendor_dlkm_modules
271 fi
wanwei.jiangf73b2202022-07-23 16:00:44 +0800272
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800273 popd
wanwei.jiang1d154992022-05-30 14:56:26 +0800274
Wanwei Jiang0a74fb12022-12-09 16:27:40 +0800275 if [[ -z ${ANDROID_PROJECT} ]] && [[ -d ${OUT_DIR}/${DTS_EXT_DIR} ]]; then
wanwei.jiang1d154992022-05-30 14:56:26 +0800276 FILES="$FILES `ls ${OUT_DIR}/${DTS_EXT_DIR}`"
277 fi
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800278
279 if [[ -f ${KERNEL_BUILD_VAR_FILE} ]]; then
280 : > ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiangb2ed83c2022-09-09 14:01:20 +0800281 echo "KERNEL_DIR=${KERNEL_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800282 echo "COMMON_OUT_DIR=${COMMON_OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
283 echo "OUT_DIR=${OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
284 echo "DIST_DIR=${DIST_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800285 echo "OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800286 echo "MODULES_STAGING_DIR=${MODULES_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
287 echo "MODULES_PRIVATE_DIR=${MODULES_PRIVATE_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
288 echo "INITRAMFS_STAGING_DIR=${INITRAMFS_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
289 echo "SYSTEM_DLKM_STAGING_DIR=${SYSTEM_DLKM_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
290 echo "VENDOR_DLKM_STAGING_DIR=${VENDOR_DLKM_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
291 echo "MKBOOTIMG_STAGING_DIR=${MKBOOTIMG_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800292 echo "DIST_GKI_DIR=${DIST_GKI_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
293 echo "FULL_KERNEL_VERSION=${FULL_KERNEL_VERSION}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8fe00342023-05-16 22:53:14 +0800294 echo "GKI_MODULES_LOAD_WHITE_LIST=\"${GKI_MODULES_LOAD_WHITE_LIST[*]}\"" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8042e472023-06-06 14:12:32 +0800295 echo "BAZEL=${BAZEL}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800296 fi
Wanwei Jianga07f9a52022-09-30 18:40:40 +0800297
298 for module_path in ${PREBUILT_MODULES_PATH}; do
299 find ${module_path} -type f -name "*.ko" -exec cp {} ${DIST_DIR} \;
300 done
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800301}
302
303export -f extra_cmds
304
Wanwei Jiang2218b892023-03-17 17:31:21 +0800305function bazel_extra_cmds() {
306 modules_install
307
308 if [[ -f ${KERNEL_BUILD_VAR_FILE} ]]; then
309 : > ${KERNEL_BUILD_VAR_FILE}
310 echo "KERNEL_DIR=${KERNEL_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
311 echo "COMMON_OUT_DIR=${COMMON_OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
312 echo "DIST_DIR=${DIST_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
313 echo "OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8fe00342023-05-16 22:53:14 +0800314 echo "GKI_MODULES_LOAD_WHITE_LIST=\"${GKI_MODULES_LOAD_WHITE_LIST[*]}\"" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8042e472023-06-06 14:12:32 +0800315 echo "BAZEL=${BAZEL}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang2218b892023-03-17 17:31:21 +0800316 fi
317
318 if [[ ${GKI_CONFIG} != gki_20 ]]; then
319 [[ -f ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz ]] && rm -f ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz
320 mv ${DIST_DIR}/system_dlkm_staging_archive.tar.gz ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz
321 [[ -d ${DIST_DIR}/system_dlkm_gki10 ]] && rm -rf ${DIST_DIR}/system_dlkm_gki10
322 mkdir ${DIST_DIR}/system_dlkm_gki10
323 pushd ${DIST_DIR}/system_dlkm_gki10
324 tar zxf ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz
325 find -name "*.ko" | while read module; do
Wanwei Jiang475245b2023-05-10 21:06:52 +0800326 module_name=${module##*/}
Wanwei Jiang2218b892023-03-17 17:31:21 +0800327 if [[ ! `grep "/${module_name}" ${DIST_DIR}/system_dlkm.modules.load` ]]; then
328 rm -f ${module}
329 fi
330 done
331 tar czf ${DIST_DIR}/system_dlkm_staging_archive.tar.gz lib
332 popd
333 rm -rf ${DIST_DIR}/system_dlkm_gki10
334 fi
335}
336
337export -f bazel_extra_cmds
338
wanwei.jiang612a8882021-11-23 17:12:23 +0800339function mod_probe() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800340 local ko=$1
341 local loop
qinglin.lia284a932022-09-21 18:07:38 +0800342 for loop in `grep "^$ko:" modules.dep | sed 's/.*://'`; do
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800343 mod_probe $loop
344 echo insmod $loop >> __install.sh
345 done
wanwei.jiang612a8882021-11-23 17:12:23 +0800346}
347
Wanwei Jiang571dde62022-11-17 14:37:41 +0800348function mod_probe_recovery() {
349 local ko=$1
350 local loop
351 for loop in `grep "^$ko:" modules_recovery.dep | sed 's/.*://'`; do
352 mod_probe_recovery $loop
353 echo insmod $loop >> __install_recovery.sh
354 done
355}
356
wanwei.jiangb12abc82021-12-25 22:17:10 +0800357function adjust_sequence_modules_loading() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800358 if [[ -n $1 ]]; then
359 chips=$1
wanwei.jiangb12abc82021-12-25 22:17:10 +0800360 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800361
362 source ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list
363 cp modules.dep modules.dep.temp
364
365 soc_module=()
366 for chip in ${chips[@]}; do
367 chip_module=`ls amlogic-*-soc-${chip}.ko`
368 soc_module=(${soc_module[@]} ${chip_module[@]})
369 done
370 echo soc_module=${soc_module[*]}
371
372 delete_soc_module=()
373 if [[ ${#soc_module[@]} == 0 ]]; then
374 echo "Use all soc module"
375 else
376 for module in `ls amlogic-*-soc-*`; do
377 if [[ ! "${soc_module[@]}" =~ "${module}" ]] ; then
378 echo Delete soc module: ${module}
379 sed -n "/${module}:/p" modules.dep.temp
380 sed -i "/${module}:/d" modules.dep.temp
381 delete_soc_module=(${delete_soc_module[@]} ${module})
382 fi
383 done
384 echo delete_soc_module=${delete_soc_module[*]}
385 fi
386
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800387 if [[ -n ${CLK_SOC_MODULE} ]]; then
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800388 delete_clk_soc_modules=()
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800389 for module in `ls amlogic-clk-soc-*`; do
390 if [[ "${CLK_SOC_MODULE}" != "${module}" ]] ; then
391 echo Delete clk soc module: ${module}
392 sed -n "/${module}:/p" modules.dep.temp
393 sed -i "/${module}:/d" modules.dep.temp
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800394 delete_clk_soc_modules=(${delete_clk_soc_modules[@]} ${module})
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800395 fi
396 done
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800397 echo delete_clk_soc_modules=${delete_clk_soc_modules[*]}
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800398 fi
399
400 if [[ -n ${PINCTRL_SOC_MODULE} ]]; then
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800401 delete_pinctrl_soc_modules=()
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800402 for module in `ls amlogic-pinctrl-soc-*`; do
403 if [[ "${PINCTRL_SOC_MODULE}" != "${module}" ]] ; then
404 echo Delete pinctrl soc module: ${module}
405 sed -n "/${module}:/p" modules.dep.temp
406 sed -i "/${module}:/d" modules.dep.temp
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800407 delete_pinctrl_soc_modules=(${delete_pinctrl_soc_modules[@]} ${module})
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800408 fi
409 done
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800410 echo delete_pinctrl_soc_modules=${delete_pinctrl_soc_modules[*]}
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800411 fi
412
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800413 in_line_i=a
414 delete_type_modules=()
415 echo "TYPE_MODULE_SELECT_MODULE=${TYPE_MODULE_SELECT_MODULE}"
416 mkdir temp_dir
417 cd temp_dir
418 in_temp_dir=y
419 for element in ${TYPE_MODULE_SELECT_MODULE}; do
420 if [[ ${in_temp_dir} = y ]]; then
421 cd ../
422 rm -r temp_dir
423 in_temp_dir=
424 fi
425 if [[ ${in_line_i} = a ]]; then
426 in_line_i=b
427 type_module=${element}
428 select_modules_i=0
429 select_modules_count=
430 select_modules=
431 elif [[ ${in_line_i} = b ]]; then
432 in_line_i=c
433 select_modules_count=${element}
434 else
435 let select_modules_i+=1
436 select_modules="${select_modules} ${element}"
437 if [[ ${select_modules_i} -eq ${select_modules_count} ]]; then
438 in_line_i=a
439 echo type_module=$type_module select_modules=$select_modules
440 for module in `ls ${type_module}`; do
441 dont_delete_module=0
442 for select_module in ${select_modules}; do
443 if [[ "${select_module}" == "${module}" ]] ; then
444 dont_delete_module=1
445 break;
446 fi
447 done
448 if [[ ${dont_delete_module} != 1 ]]; then
449 echo Delete module: ${module}
450 sed -n "/${module}:/p" modules.dep.temp
451 sed -i "/${module}:/d" modules.dep.temp
452 delete_type_modules=(${delete_type_modules[@]} ${module})
453 fi
454 done
455 echo delete_type_modules=${delete_type_modules[*]}
456 fi
457 fi
458 done
459 if [[ -n ${in_temp_dir} ]]; then
460 cd ../
461 rm -r temp_dir
462 fi
463
464 black_modules=()
Dezhen Wang45dfcb02023-02-13 17:41:44 +0800465 mkdir service_module
466 echo MODULES_SERVICE_LOAD_LIST=${MODULES_SERVICE_LOAD_LIST[@]}
467 BLACK_AND_SERVICE_LIST=(${MODULES_LOAD_BLACK_LIST[@]} ${MODULES_SERVICE_LOAD_LIST[@]})
468 echo ${BLACK_AND_SERVICE_LIST[@]}
469 for module in ${BLACK_AND_SERVICE_LIST[@]}; do
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800470 modules=`ls ${module}*`
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800471 black_modules=(${black_modules[@]} ${modules[@]})
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800472 done
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800473 if [[ ${#black_modules[@]} == 0 ]]; then
474 echo "black_modules is null, don't delete modules, MODULES_LOAD_BLACK_LIST=${MODULES_LOAD_BLACK_LIST[*]}"
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800475 else
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800476 echo black_modules=${black_modules[*]}
477 for module in ${black_modules[@]}; do
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800478 echo Delete module: ${module}
479 sed -n "/${module}:/p" modules.dep.temp
480 sed -i "/${module}:/d" modules.dep.temp
481 done
482 fi
483
Wanwei Jiang475245b2023-05-10 21:06:52 +0800484 GKI_MODULES_LOAD_BLACK_LIST=()
485 if [[ "${FULL_KERNEL_VERSION}" != "common13-5.15" ]]; then
486 gki_modules_temp_file=`mktemp /tmp/config.XXXXXXXXXXXX`
487 cp ${ROOT_DIR}/${KERNEL_DIR}/android/gki_system_dlkm_modules ${gki_modules_temp_file}
488
489 for module in ${GKI_MODULES_LOAD_WHITE_LIST[@]}; do
490 sed -i "/\/${module}/d" ${gki_modules_temp_file}
491 done
492
493 for module in `cat ${gki_modules_temp_file}`; do
494 module=${module##*/}
495 GKI_MODULES_LOAD_BLACK_LIST[${#GKI_MODULES_LOAD_BLACK_LIST[*]}]=${module}
496 done
497 rm -f ${gki_modules_temp_file}
498
499 for module in ${GKI_MODULES_LOAD_BLACK_LIST[@]}; do
500 echo Delete module: ${module}
501 sed -n "/${module}:/p" modules.dep.temp
502 sed -i "/${module}:/d" modules.dep.temp
503 done
504 fi
505
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800506 cat modules.dep.temp | cut -d ':' -f 2 > modules.dep.temp1
Wanwei Jiang475245b2023-05-10 21:06:52 +0800507 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 +0800508 for module in ${delete_modules[@]}; do
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800509 if [[ ! `ls $module` ]]; then
510 continue
511 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800512 match=`sed -n "/${module}/=" modules.dep.temp1`
513 for match in ${match[@]}; do
514 match_count=(${match_count[@]} $match)
515 done
516 if [[ ${#match_count[@]} != 0 ]]; then
517 echo "Error ${#match_count[@]} modules depend on ${module}, please modify:"
wanwei.jiang50759e12022-03-24 12:36:17 +0800518 echo ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list:MODULES_LOAD_BLACK_LIST
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800519 exit
520 fi
Dezhen Wang45dfcb02023-02-13 17:41:44 +0800521 if [[ -n ${ANDROID_PROJECT} ]]; then
522 for service_module_temp in ${MODULES_SERVICE_LOAD_LIST[@]}; do
523 if [[ ${module} = ${service_module_temp} ]]; then
524 mv ${module} service_module
525 fi
526 done
527 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800528 rm -f ${module}
529 done
530 rm -f modules.dep.temp1
wanwei.jiangb12abc82021-12-25 22:17:10 +0800531 touch modules.dep.temp1
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800532
533 for module in ${RAMDISK_MODULES_LOAD_LIST[@]}; do
534 echo RAMDISK_MODULES_LOAD_LIST: $module
wanwei.jiangb12abc82021-12-25 22:17:10 +0800535 sed -n "/${module}:/p" modules.dep.temp
536 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1
537 sed -i "/${module}:/d" modules.dep.temp
538 sed -n "/${module}.*\.ko:/p" modules.dep.temp
539 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1
540 sed -i "/${module}.*\.ko:/d" modules.dep.temp
541 done
542
Wanwei Jiang571dde62022-11-17 14:37:41 +0800543 if [[ -n ${ANDROID_PROJECT} ]]; then
544 cp modules.dep.temp modules_recovery.dep.temp
545 cp modules.dep.temp1 modules_recovery.dep.temp1
546 fi
547
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800548 for module in ${VENDOR_MODULES_LOAD_FIRST_LIST[@]}; do
549 echo VENDOR_MODULES_LOAD_FIRST_LIST: $module
550 sed -n "/${module}:/p" modules.dep.temp
551 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1
552 sed -i "/${module}:/d" modules.dep.temp
553 sed -n "/${module}.*\.ko:/p" modules.dep.temp
554 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1
555 sed -i "/${module}.*\.ko:/d" modules.dep.temp
wanwei.jiangb12abc82021-12-25 22:17:10 +0800556 done
557
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800558 if [ -f modules.dep.temp2 ]; then
559 rm modules.dep.temp2
560 fi
561 touch modules.dep.temp2
562 for module in ${VENDOR_MODULES_LOAD_LAST_LIST[@]}; do
563 echo VENDOR_MODULES_LOAD_FIRST_LIST: $module
564 sed -n "/${module}:/p" modules.dep.temp
565 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp2
566 sed -i "/${module}:/d" modules.dep.temp
567 sed -n "/${module}.*\.ko:/p" modules.dep.temp
568 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp2
569 sed -i "/${module}.*\.ko:/d" modules.dep.temp
570 done
571
572 cat modules.dep.temp >> modules.dep.temp1
573 cat modules.dep.temp2 >> modules.dep.temp1
574
wanwei.jiangb12abc82021-12-25 22:17:10 +0800575 cp modules.dep.temp1 modules.dep
576 rm modules.dep.temp
577 rm modules.dep.temp1
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800578 rm modules.dep.temp2
Wanwei Jiang571dde62022-11-17 14:37:41 +0800579
580 if [[ -n ${ANDROID_PROJECT} ]]; then
581 for module in ${RECOVERY_MODULES_LOAD_LIST[@]}; do
582 echo RECOVERY_MODULES_LOAD_LIST: $module
583 sed -n "/${module}:/p" modules_recovery.dep.temp
584 sed -n "/${module}:/p" modules_recovery.dep.temp >> modules_recovery.dep.temp1
585 sed -i "/${module}:/d" modules_recovery.dep.temp
586 sed -n "/${module}.*\.ko:/p" modules_recovery.dep.temp
587 sed -n "/${module}.*\.ko:/p" modules_recovery.dep.temp >> modules_recovery.dep.temp1
588 sed -i "/${module}.*\.ko:/d" modules_recovery.dep.temp
589 done
590
591 cat modules_recovery.dep.temp >> modules_recovery.dep.temp1
592
593 cp modules_recovery.dep.temp1 modules_recovery.dep
594 rm modules_recovery.dep.temp
595 rm modules_recovery.dep.temp1
596 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800597}
598
Wanwei Jiang571dde62022-11-17 14:37:41 +0800599create_ramdisk_vendor_recovery() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800600 install_temp=$1
Wanwei Jiang571dde62022-11-17 14:37:41 +0800601 if [[ -n ${ANDROID_PROJECT} ]]; then
602 recovery_install_temp=$2
603 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800604 source ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list
Wanwei Jiang9173e462022-09-29 00:58:33 +0800605 ramdisk_module_i=${#RAMDISK_MODULES_LOAD_LIST[@]}
606 while [ ${ramdisk_module_i} -gt 0 ]; do
607 let ramdisk_module_i--
608 echo ramdisk_module_i=$ramdisk_module_i ${RAMDISK_MODULES_LOAD_LIST[${ramdisk_module_i}]}
609 if [[ `grep "${RAMDISK_MODULES_LOAD_LIST[${ramdisk_module_i}]}" ${install_temp}` ]]; then
610 last_ramdisk_module=${RAMDISK_MODULES_LOAD_LIST[${ramdisk_module_i}]}
611 break;
612 fi
613 done
614 # last_ramdisk_module=${RAMDISK_MODULES_LOAD_LIST[${#RAMDISK_MODULES_LOAD_LIST[@]}-1]}
qinglin.libce54712023-05-08 13:56:31 +0800615 if [[ -n ${last_ramdisk_module} ]]; then
616 last_ramdisk_module_line=`sed -n "/${last_ramdisk_module}/=" ${install_temp}`
617 for line in ${last_ramdisk_module_line}; do
618 ramdisk_last_line=${line}
619 done
620 else
621 ramdisk_last_line=1
622 fi
wanwei.jiangf73b2202022-07-23 16:00:44 +0800623 export ramdisk_last_line
Wanwei Jiang571dde62022-11-17 14:37:41 +0800624
625 if [[ -n ${ANDROID_PROJECT} ]]; then
626 recovery_module_i=${#RECOVERY_MODULES_LOAD_LIST[@]}
qinglin.lidba324f2023-03-02 19:56:21 +0800627 #when RECOVERY_MODULES_LOAD_LIST is NULL
628 if [ ${#RECOVERY_MODULES_LOAD_LIST[@]} -eq 0 ]; then
629 last_recovery_module=${last_ramdisk_module}
630 fi
Wanwei Jiang571dde62022-11-17 14:37:41 +0800631 while [ ${recovery_module_i} -gt 0 ]; do
632 let recovery_module_i--
633 echo recovery_module_i=$recovery_module_i ${RECOVERY_MODULES_LOAD_LIST[${recovery_module_i}]}
634 if [[ `grep "${RECOVERY_MODULES_LOAD_LIST[${recovery_module_i}]}" ${recovery_install_temp}` ]]; then
635 last_recovery_module=${RECOVERY_MODULES_LOAD_LIST[${recovery_module_i}]}
636 break;
637 fi
638 done
639 # last_recovery_module=${RECOVERY_MODULES_LOAD_LIST[${#RECOVERY_MODULES_LOAD_LIST[@]}-1]}
qinglin.libce54712023-05-08 13:56:31 +0800640 if [[ -n ${last_recovery_module} ]]; then
641 last_recovery_module_line=`sed -n "/${last_recovery_module}/=" ${recovery_install_temp}`
642 for line in ${last_recovery_module_line}; do
643 recovery_last_line=${line}
644 done
645 else
646 recovery_last_line=1
647 fi
Wanwei Jiang571dde62022-11-17 14:37:41 +0800648 sed -n "${ramdisk_last_line},${recovery_last_line}p" ${recovery_install_temp} > recovery_install.sh
qinglin.libce54712023-05-08 13:56:31 +0800649 if [[ -n ${last_ramdisk_module} ]]; then
650 sed -i "1d" recovery_install.sh
651 fi
Wanwei Jiang571dde62022-11-17 14:37:41 +0800652 mkdir recovery
653 cat recovery_install.sh | cut -d ' ' -f 2 > recovery/recovery_modules.order
qinglin.lidba324f2023-03-02 19:56:21 +0800654 if [ ${#RECOVERY_MODULES_LOAD_LIST[@]} -ne 0 ]; then
655 cat recovery_install.sh | cut -d ' ' -f 2 | xargs cp -t recovery/
656 fi
Wanwei Jiang571dde62022-11-17 14:37:41 +0800657 sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' recovery_install.sh
658 echo "echo Install recovery modules success!" >> recovery_install.sh
659 chmod 755 recovery_install.sh
660 mv recovery_install.sh recovery/
661 fi
662
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800663 head -n ${ramdisk_last_line} ${install_temp} > ramdisk_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800664 mkdir ramdisk
wanwei.jiangf73b2202022-07-23 16:00:44 +0800665 cat ramdisk_install.sh | cut -d ' ' -f 2 > ramdisk/ramdisk_modules.order
wanwei.jiang50759e12022-03-24 12:36:17 +0800666 cat ramdisk_install.sh | cut -d ' ' -f 2 | xargs mv -t ramdisk/
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800667
qinglin.lie5b951e2022-06-07 16:13:44 +0800668 sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' ramdisk_install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800669 echo "echo Install ramdisk modules success!" >> ramdisk_install.sh
670 chmod 755 ramdisk_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800671 mv ramdisk_install.sh ramdisk/
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800672
673 file_last_line=`sed -n "$=" ${install_temp}`
674 let line=${file_last_line}-${ramdisk_last_line}
675 tail -n ${line} ${install_temp} > vendor_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800676 mkdir vendor
wanwei.jiangf73b2202022-07-23 16:00:44 +0800677 cat vendor_install.sh | cut -d ' ' -f 2 > vendor/vendor_modules.order
wanwei.jiang50759e12022-03-24 12:36:17 +0800678 cat vendor_install.sh | cut -d ' ' -f 2 | xargs mv -t vendor/
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800679
qinglin.lie5b951e2022-06-07 16:13:44 +0800680 sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' vendor_install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800681 echo "echo Install vendor modules success!" >> vendor_install.sh
682 chmod 755 vendor_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800683 mv vendor_install.sh vendor/
wanwei.jiangb12abc82021-12-25 22:17:10 +0800684}
685
wanwei.jiang612a8882021-11-23 17:12:23 +0800686function modules_install() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800687 arg1=$1
688
Wanwei Jiang2218b892023-03-17 17:31:21 +0800689 export OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR:-$(readlink -m ${COMMON_OUT_DIR}/amlogic)}
690 echo $OUT_AMLOGIC_DIR
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800691 rm -rf ${OUT_AMLOGIC_DIR}
692 mkdir -p ${OUT_AMLOGIC_DIR}
693 mkdir -p ${OUT_AMLOGIC_DIR}/modules
694 mkdir -p ${OUT_AMLOGIC_DIR}/ext_modules
Wanwei Jiangae4d7c12023-02-17 19:22:04 +0800695 mkdir -p ${OUT_AMLOGIC_DIR}/symbols
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800696
Wanwei Jiang2218b892023-03-17 17:31:21 +0800697 if [[ ${BAZEL} == "1" ]]; then
698 local output="out/bazel/output_user_root"
699 for dir in `ls ${output}`; do
700 if [[ ${dir} =~ ^[0-9A-Fa-f]*$ ]]; then
701 digit_output=${output}/${dir}
702 break
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800703 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800704 done
705
Wanwei Jiang0df84602023-05-05 14:40:42 +0800706 while read module
707 do
Wanwei Jiang475245b2023-05-10 21:06:52 +0800708 module_name=${module##*/}
Wanwei Jiang0df84602023-05-05 14:40:42 +0800709 if [[ `echo ${module} | grep "^kernel\/"` ]]; then
710 if [[ -f ${DIST_DIR}/${module_name} ]]; then
711 cp ${DIST_DIR}/${module_name} ${OUT_AMLOGIC_DIR}/modules
712 else
713 module=`find ${digit_output}/execroot/ -name ${module_name} | grep "amlogic"`
714 cp ${module} ${OUT_AMLOGIC_DIR}/modules
715 fi
716 elif [[ `echo ${module} | grep "^extra\/"` ]]; then
717 cp ${DIST_DIR}/${module_name} ${OUT_AMLOGIC_DIR}/ext_modules
Wanwei Jiang2218b892023-03-17 17:31:21 +0800718 else
Wanwei Jiang0df84602023-05-05 14:40:42 +0800719 echo "warning unrecognized module: ${module}"
Wanwei Jiang2218b892023-03-17 17:31:21 +0800720 fi
Wanwei Jiang0df84602023-05-05 14:40:42 +0800721 done < ${DIST_DIR}/modules.load
Wanwei Jiang2218b892023-03-17 17:31:21 +0800722
723 dep_file=`find ${digit_output}/execroot/ -name *.dep | grep "amlogic"`
724 cp ${dep_file} ${OUT_AMLOGIC_DIR}/modules/full_modules.dep
Wanwei Jiang0df84602023-05-05 14:40:42 +0800725 grep -E "^kernel\/" ${dep_file} > ${OUT_AMLOGIC_DIR}/modules/modules.dep
Wanwei Jiang2218b892023-03-17 17:31:21 +0800726 touch ${module} ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
727 for order_file in `find ${digit_output}/execroot/ -name "modules.order.*" | grep "amlogic"`; do
728 echo "# ${order_file}" >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
729 cat ${order_file} >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
730 echo >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
731 done
732 else
733 local MODULES_ROOT_DIR=$(echo ${MODULES_STAGING_DIR}/lib/modules/*)
734 pushd ${MODULES_ROOT_DIR}
735 local common_drivers=${COMMON_DRIVERS_DIR##*/}
736 local modules_list=$(find -type f -name "*.ko")
737 for module in ${modules_list}; do
738 if [[ -n ${ANDROID_PROJECT} ]]; then # copy internal build modules
739 if [[ `echo ${module} | grep -E "\.\/kernel\/|\/${common_drivers}\/"` ]]; then
740 cp ${module} ${OUT_AMLOGIC_DIR}/modules/
741 else
742 cp ${module} ${OUT_AMLOGIC_DIR}/ext_modules/
743 fi
744 else # copy all modules, include external modules
745 cp ${module} ${OUT_AMLOGIC_DIR}/modules/
746 fi
747 done
748
749 if [[ -n ${ANDROID_PROJECT} ]]; then # internal build modules
750 grep -E "^kernel\/|^${common_drivers}\/" modules.dep > ${OUT_AMLOGIC_DIR}/modules/modules.dep
751 else # all modules, include external modules
752 cp modules.dep ${OUT_AMLOGIC_DIR}/modules
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800753 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800754 popd
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800755 fi
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800756 pushd ${OUT_AMLOGIC_DIR}/modules
wanwei.jiang612a8882021-11-23 17:12:23 +0800757 sed -i 's#[^ ]*/##g' modules.dep
758
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800759 adjust_sequence_modules_loading "${arg1[*]}"
wanwei.jiangb12abc82021-12-25 22:17:10 +0800760
wanwei.jiang5c8d2b62021-11-26 20:36:33 +0800761 touch __install.sh
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800762 touch modules.order
wanwei.jiang612a8882021-11-23 17:12:23 +0800763 for loop in `cat modules.dep | sed 's/:.*//'`; do
764 mod_probe $loop
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800765 echo $loop >> modules.order
wanwei.jiang612a8882021-11-23 17:12:23 +0800766 echo insmod $loop >> __install.sh
767 done
768
769 cat __install.sh | awk ' {
770 if (!cnt[$2]) {
771 print $0;
772 cnt[$2]++;
773 }
774 }' > __install.sh.tmp
775
Wanwei Jiangbf119d22022-10-27 09:49:49 +0800776 cp modules.order modules.order.back
777 cut -d ' ' -f 2 __install.sh.tmp > modules.order
Wanwei Jiang571dde62022-11-17 14:37:41 +0800778
779 if [[ -n ${ANDROID_PROJECT} ]]; then
780 touch __install_recovery.sh
781 touch modules_recovery.order
782 for loop in `cat modules_recovery.dep | sed 's/:.*//'`; do
783 mod_probe_recovery $loop
784 echo $loop >> modules_recovery.order
785 echo insmod $loop >> __install_recovery.sh
786 done
787
788 cat __install_recovery.sh | awk ' {
789 if (!cnt[$2]) {
790 print $0;
791 cnt[$2]++;
792 }
793 }' > __install_recovery.sh.tmp
794
795 cut -d ' ' -f 2 __install_recovery.sh.tmp > modules_recovery.order
796 fi
797 create_ramdisk_vendor_recovery __install.sh.tmp __install_recovery.sh.tmp
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800798
Dezhen Wang124ad7d2023-02-06 15:35:14 +0800799 if [[ -n ${MANUAL_INSMOD_MODULE} ]]; then
800 install_file=manual_install.sh
801 else
802 install_file=install.sh
803 fi
804 echo "#!/bin/sh" > ${install_file}
805 echo "cd ramdisk" >> ${install_file}
806 echo "./ramdisk_install.sh" >> ${install_file}
807 echo "cd ../vendor" >> ${install_file}
808 echo "./vendor_install.sh" >> ${install_file}
809 echo "cd ../" >> ${install_file}
810 chmod 755 ${install_file}
wanwei.jiang612a8882021-11-23 17:12:23 +0800811
812 echo "/modules/: all `wc -l modules.dep | awk '{print $1}'` modules."
Wanwei Jianga5977bd2022-08-24 22:43:40 +0800813 rm __install.sh __install.sh.tmp
wanwei.jiang612a8882021-11-23 17:12:23 +0800814
Wanwei Jiang571dde62022-11-17 14:37:41 +0800815 if [[ -n ${ANDROID_PROJECT} ]]; then
816 rm __install_recovery.sh __install_recovery.sh.tmp
817 fi
818
wanwei.jiang236e9a32021-12-07 16:34:14 +0800819 popd
Wanwei Jiangae4d7c12023-02-17 19:22:04 +0800820
Wanwei Jiang2218b892023-03-17 17:31:21 +0800821 if [[ ${BAZEL} == "1" ]]; then
822 cp ${DIST_DIR}/vmlinux ${OUT_AMLOGIC_DIR}/symbols
823
824 find ${digit_output}/execroot -name *.ko | grep "unstripped" | while read module; do
825 cp ${module} ${OUT_AMLOGIC_DIR}/symbols
826 chmod +w ${OUT_AMLOGIC_DIR}/symbols/$(basename ${module})
827 done
828 chmod -w ${OUT_AMLOGIC_DIR}/symbols/*.ko
829 else
830 cp ${OUT_DIR}/vmlinux ${OUT_AMLOGIC_DIR}/symbols
831 find ${OUT_DIR} -type f -name "*.ko" -exec cp {} ${OUT_AMLOGIC_DIR}/symbols \;
832 for ext_module in ${EXT_MODULES}; do
833 find ${COMMON_OUT_DIR}/${ext_module} -type f -name "*.ko" -exec cp {} ${OUT_AMLOGIC_DIR}/symbols \;
834 done
835 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800836}
wanwei.jiang236e9a32021-12-07 16:34:14 +0800837export -f modules_install
wanwei.jiang612a8882021-11-23 17:12:23 +0800838
Wanwei Jiang2218b892023-03-17 17:31:21 +0800839function rename_external_module_name() {
840 local external_coppied
841 local vendor_coppied
Wanwei Jiang92c89432023-05-15 23:57:16 +0800842 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 +0800843 target_module_name=`echo ${module_line%%:*} | sed '/^#/d;/^$/d'`
844 modules_name=`echo ${module_line##:*} | sed '/^#/d;/^$/d'`
845 [[ -f ${OUT_AMLOGIC_DIR}/ext_modules/${target_module_name} ]] && external_coppied=1
846 [[ -f ${OUT_AMLOGIC_DIR}/modules/vendor/${target_module_name} ]] && vendor_coppied=1
847 echo target_module_name=$target_module_name modules_name=$modules_name external_coppied=$external_coppied vendor_coppied=$vendor_coppied
848 for module in ${modules_name}; do
849 echo module=$module
850 if [[ -f ${OUT_AMLOGIC_DIR}/ext_modules/${module} ]]; then
851 if [[ -z ${external_coppied} ]]; then
852 cp ${OUT_AMLOGIC_DIR}/ext_modules/${module} ${OUT_AMLOGIC_DIR}/ext_modules/${target_module_name}
853 external_coppied=1
854 fi
855 rm -f ${OUT_AMLOGIC_DIR}/ext_modules/${module}
856 fi
857 if [[ -f ${OUT_AMLOGIC_DIR}/modules/vendor/${module} ]]; then
858 if [[ -z ${vendor_coppied} ]]; then
859 cp ${OUT_AMLOGIC_DIR}/modules/vendor/${module} ${OUT_AMLOGIC_DIR}/modules/vendor/${target_module_name}
860 vendor_coppied=1
861 fi
862 rm -f ${OUT_AMLOGIC_DIR}/modules/vendor/${module}
863 fi
864 done
865 external_coppied=
866 vendor_coppied=
867 done
868}
869export -f rename_external_module_name
870
Dezhen Wang5ad119c2023-05-04 15:07:49 +0800871# function rebuild_rootfs can rebuild the rootfs if rootfs_base.cpio.gz.uboot exist
wanwei.jiang612a8882021-11-23 17:12:23 +0800872function rebuild_rootfs() {
Wanwei Jiang2218b892023-03-17 17:31:21 +0800873 echo
874 echo "========================================================"
875 if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then
876 echo "Rebuild rootfs in order to install modules!"
877 else
878 echo "There's no file ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot, so don't rebuild rootfs!"
879 return
880 fi
881
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800882 pushd ${OUT_AMLOGIC_DIR}
wanwei.jiang612a8882021-11-23 17:12:23 +0800883
Lei Zhang475c17b2022-03-03 11:08:50 +0800884 local ARCH=arm64
885 if [[ -n $1 ]]; then
886 ARCH=$1
887 fi
888
wanwei.jiang612a8882021-11-23 17:12:23 +0800889 rm rootfs -rf
890 mkdir rootfs
Wanwei Jiang2218b892023-03-17 17:31:21 +0800891 cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot rootfs
wanwei.jiang612a8882021-11-23 17:12:23 +0800892 cd rootfs
893 dd if=rootfs_base.cpio.gz.uboot of=rootfs_base.cpio.gz bs=64 skip=1
894 gunzip rootfs_base.cpio.gz
895 mkdir rootfs
896 cd rootfs
897 cpio -i -F ../rootfs_base.cpio
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800898 if [ -d ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer ]; then
899 cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer . -rf
qinglin.li3c25dbb2022-01-14 11:23:10 +0800900 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800901 cp -rf ../../modules .
wanwei.jiang8abddcc2022-03-16 21:18:48 +0800902
wanwei.jiang612a8882021-11-23 17:12:23 +0800903 find . | cpio -o -H newc | gzip > ../rootfs_new.cpio.gz
904 cd ../
Lei Zhang475c17b2022-03-03 11:08:50 +0800905 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 +0800906 mv rootfs_new.cpio.gz.uboot ../
907 cd ../
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800908 cp rootfs_new.cpio.gz.uboot ${DIST_DIR}
wanwei.jiang612a8882021-11-23 17:12:23 +0800909
910 popd
911}
912export -f rebuild_rootfs
wanwei.jiang403c9942021-11-30 18:29:02 +0800913
Dezhen Wang5ad119c2023-05-04 15:07:49 +0800914# function check_undefined_symbol can check the dependence among the modules
915# parameter:
916# --modules_depend
wanwei.jiang403c9942021-11-30 18:29:02 +0800917function check_undefined_symbol() {
Wanwei Jiang2218b892023-03-17 17:31:21 +0800918 if [[ ${MODULES_DEPEND} != "1" ]]; then
919 return
920 fi
921
922 echo "========================================================"
923 echo "print modules depend"
924
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800925 pushd ${OUT_AMLOGIC_DIR}/modules
wanwei.jiang403c9942021-11-30 18:29:02 +0800926 echo
927 echo "========================================================"
928 echo "Functions or variables not defined in this module refer to which module."
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800929 if [[ -n ${LLVM} ]]; then
930 compile_tool=${ROOT_DIR}/${CLANG_PREBUILT_BIN}/llvm-
931 elif [[ -n ${CROSS_COMPILE} ]]; then
932 compile_tool=${CROSS_COMPILE}
933 else
934 echo "can't find compile tool"
935 fi
Wanwei Jiang0a74fb12022-12-09 16:27:40 +0800936 ${compile_tool}nm ${DIST_DIR}/vmlinux | grep -E " T | D | B | R | W "> vmlinux_T.txt
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800937 # cat __install.sh | grep "insmod" | cut -d ' ' -f 2 > module_list.txt
938 cat ramdisk/ramdisk_install.sh | grep "insmod" | cut -d ' ' -f 2 > module_list.txt
939 cat vendor/vendor_install.sh | grep "insmod" | cut -d ' ' -f 2 >> module_list.txt
940 cp ramdisk/*.ko .
941 cp vendor/*.ko .
wanwei.jiang403c9942021-11-30 18:29:02 +0800942 while read LINE
943 do
944 echo ${LINE}
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800945 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 +0800946 do
947 #echo ${U}
948 U_v=`grep -w ${U} vmlinux_T.txt`
949 in_vmlinux=0
950 if [ -n "${U_v}" ];
951 then
wanwei.jiangd7b29ef2021-12-01 19:59:41 +0800952 #printf "\t%-50s <== vmlinux\n" ${U}
wanwei.jiang403c9942021-11-30 18:29:02 +0800953 in_vmlinux=1
954 continue
955 fi
956 in_module=0
957 MODULE=
958 while read LINE1
959 do
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800960 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 +0800961 if [ -n "${U_m}" ];
962 then
963 in_module=1
964 MODULE=${LINE1}
965 fi
966 done < module_list.txt
967 if [ ${in_module} -eq "1" ];
968 then
969 printf "\t%-50s <== %s\n" ${U} ${MODULE}
970 continue
971 else
972 printf "\t%-50s <== none\n" ${U}
973 fi
974 done
975 echo
976 echo
977 done < module_list.txt
978 rm vmlinux_T.txt
979 rm module_list.txt
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800980 rm *.ko
wanwei.jiang403c9942021-11-30 18:29:02 +0800981 popd
982}
983export -f check_undefined_symbol
Dezhen Wangd40fa552023-04-11 16:13:27 +0800984
985function reorganized_abi_symbol_list_file() { # delete the extra information but symbol
986 cat $@ | sed '/^$/d' >> ${symbol_tmp} # remove blank lines
987 sed -i '/^\[/d' ${symbol_tmp} # remove the title
988 sed -i '/^\#/d' ${symbol_tmp} # remove the comment
989}
990export -f reorganized_abi_symbol_list_file
991
992function abi_symbol_list_detect () { # detect symbol information that should be submitted or fix
993 symbol_file1=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic
994 symbol_file2=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.10
995 symbol_file3=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.debug
996 symbol_file4=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.illegal
997
998 file_list=("${symbol_file1} ${symbol_file2} ${symbol_file3} ${symbol_file4}")
999 for file in ${file_list}
1000 do
1001 local symbol_tmp=`mktemp tmp.XXXXXXXXXXXX`
1002 reorganized_abi_symbol_list_file "${file}"
1003
1004 if [[ -s ${symbol_tmp} ]]; then
1005 if [[ ${file} =~ abi_gki_aarch64_amlogic.illegal ]]; then
1006 echo "WARNING: The symbols in ${file} are illegal, please deal with them as soon as possible!!!"
1007 else
1008 echo "WARNING: The symbols in ${file} should be submit to google!!!"
1009 fi
1010 cat ${symbol_tmp}
1011 echo -e "\n------------------------------------------------------------"
1012 fi
1013 rm ${symbol_tmp}
1014 done
1015}
1016export -f abi_symbol_list_detect
1017
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001018# adjust_config_action concerns three types of cmd:
1019# parameters:
1020# --menuconfig: make menuconfig manually based on different gki standard
1021# --basicconfig: only config kernel with google original gki_defconfig as base
1022# --check_defconfig: contrast the defconfig generated in out directory with gki_defconfig and show the difference
1023function adjust_config_action () {
1024 if [[ -n ${MENUCONFIG} ]] || [[ -n ${BASICCONFIG} ]] || [[ ${CHECK_DEFCONFIG} -eq "1" ]]; then
1025 # ${ROOT_DIR}/${BUILD_DIR}/config.sh menuconfig
1026 HERMETIC_TOOLCHAIN=0
1027 source "${ROOT_DIR}/${BUILD_DIR}/build_utils.sh"
1028 source "${ROOT_DIR}/${BUILD_DIR}/_setup_env.sh"
1029
1030 orig_config=$(mktemp)
1031 orig_defconfig=$(mktemp)
1032 out_config="${OUT_DIR}/.config"
1033 out_defconfig="${OUT_DIR}/defconfig"
1034 changed_config=$(mktemp)
1035 changed_defconfig=$(mktemp)
1036
1037 if [[ -n ${BASICCONFIG} ]]; then # config kernel with gki_defconfig or make menuconfig based on it
1038 set -x
1039 defconfig_name=`basename ${GKI_BASE_CONFIG}`
1040 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${defconfig_name})
1041 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1042 cp ${out_config} ${orig_config}
1043 cp ${out_defconfig} ${orig_defconfig}
1044 if [ "${BASICCONFIG}" = "m" ]; then # make menuconfig based on gki_defconfig
1045 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" menuconfig)
1046 fi
1047 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1048 ${KERNEL_DIR}/scripts/diffconfig ${orig_config} ${out_config} > ${changed_config}
1049 ${KERNEL_DIR}/scripts/diffconfig ${orig_defconfig} ${out_defconfig} > ${changed_defconfig}
1050 if [ "${ARCH}" = "arm" ]; then
1051 cp ${out_defconfig} ${GKI_BASE_CONFIG}
1052 fi
1053 set +x # show the difference between the gki_defconfig and the config after make menuconfig
1054 echo
1055 echo "========================================================"
1056 echo "==================== .config diff ===================="
1057 cat ${changed_config}
1058 echo "==================== defconfig diff ===================="
1059 cat ${changed_defconfig}
1060 echo "========================================================"
1061 echo
1062 elif [[ ${CHECK_DEFCONFIG} -eq "1" ]]; then # compare the defconfig generated in out directory with gki_defconfig
1063 set -x
1064 pre_defconfig_cmds
1065 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
1066 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig) # export the defconfig to out directory
1067 diff -u ${ROOT_DIR}/${GKI_BASE_CONFIG} ${OUT_DIR}/defconfig
1068 post_defconfig_cmds
1069 set +x
1070 else # make menuconfig based on config with different gki standard
1071 set -x
1072 pre_defconfig_cmds
1073 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
1074 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1075 cp ${out_config} ${orig_config}
1076 cp ${out_defconfig} ${orig_defconfig}
1077 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" menuconfig)
1078 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1079 ${KERNEL_DIR}/scripts/diffconfig ${orig_config} ${out_config} > ${changed_config}
1080 ${KERNEL_DIR}/scripts/diffconfig ${orig_defconfig} ${out_defconfig} > ${changed_defconfig}
1081 post_defconfig_cmds
1082 set +x
1083 echo
1084 echo "========================================================"
1085 echo "if the config follows GKI2.0, please add it to the file amlogic_gki.fragment manually"
1086 echo "if the config follows GKI1.0 optimize, please add it to the file amlogic_gki.10 manually"
1087 echo "if the config follows GKI1.0 debug, please add it to the file amlogic_gki.debug manually"
1088 echo "==================== .config diff ===================="
1089 cat ${changed_config}
1090 echo "==================== defconfig diff ===================="
1091 cat ${changed_defconfig}
1092 echo "========================================================"
1093 echo
1094 fi
1095 rm -f ${orig_config} ${changed_config} ${orig_defconfig} ${changed_defconfig}
1096 exit
1097 fi
1098}
1099export -f adjust_config_action
1100
1101# function build_part_of_kernel can only build part of kernel such as image modules or dtbs
1102# parameter:
1103# --image: only build image
1104# --modules: only build kernel modules
1105# --dtbs: only build dtbs
1106function build_part_of_kernel () {
1107 if [[ -n ${IMAGE} ]] || [[ -n ${MODULES} ]] || [[ -n ${DTB_BUILD} ]]; then
1108 old_path=${PATH}
1109 source "${ROOT_DIR}/${BUILD_DIR}/build_utils.sh"
1110 source "${ROOT_DIR}/${BUILD_DIR}/_setup_env.sh"
1111
1112 if [[ ! -f ${OUT_DIR}/.config ]]; then
1113 pre_defconfig_cmds
1114 set -x
1115 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
1116 set +x
1117 post_defconfig_cmds
1118 fi
1119
1120 if [[ -n ${IMAGE} ]]; then
1121 set -x
1122 if [ "${ARCH}" = "arm64" ]; then
1123 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) Image)
1124 elif [ "${ARCH}" = "arm" ]; then
1125 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) LOADADDR=0x108000 uImage)
1126 fi
1127 set +x
1128 fi
1129 mkdir -p ${DIST_DIR}
1130 if [[ -n ${DTB_BUILD} ]]; then
1131 set -x
1132 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) dtbs)
1133 set +x
1134 fi
1135 if [[ -n ${MODULES} ]]; then
1136 export MODULES_STAGING_DIR=$(readlink -m ${COMMON_OUT_DIR}/staging)
1137 rm -rf ${MODULES_STAGING_DIR}
1138 mkdir -p ${MODULES_STAGING_DIR}
1139 if [ "${DO_NOT_STRIP_MODULES}" != "1" ]; then
1140 MODULE_STRIP_FLAG="INSTALL_MOD_STRIP=1"
1141 fi
1142 if [[ `grep "CONFIG_AMLOGIC_IN_KERNEL_MODULES=y" ${ROOT_DIR}/${FRAGMENT_CONFIG}` ]]; then
1143 set -x
1144 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) modules)
1145 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} INSTALL_MOD_PATH=${MODULES_STAGING_DIR} "${MAKE_ARGS[@]}" modules_install)
1146 set +x
1147 fi
1148 echo EXT_MODULES=$EXT_MODULES
1149 prepare_module_build
1150 if [[ -z "${SKIP_EXT_MODULES}" ]] && [[ -n "${EXT_MODULES}" ]]; then
1151 echo "========================================================"
1152 echo " Building external modules and installing them into staging directory"
1153 KERNEL_UAPI_HEADERS_DIR=$(readlink -m ${COMMON_OUT_DIR}/kernel_uapi_headers)
1154 for EXT_MOD in ${EXT_MODULES}; do
1155 EXT_MOD_REL=$(rel_path ${ROOT_DIR}/${EXT_MOD} ${KERNEL_DIR})
1156 mkdir -p ${OUT_DIR}/${EXT_MOD_REL}
1157 set -x
1158 make -C ${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1159 O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}"
1160 make -C ${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1161 O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} \
1162 INSTALL_MOD_PATH=${MODULES_STAGING_DIR} \
1163 INSTALL_MOD_DIR="extra/${EXT_MOD}" \
1164 INSTALL_HDR_PATH="${KERNEL_UAPI_HEADERS_DIR}/usr" \
1165 "${MAKE_ARGS[@]}" modules_install
1166 set +x
1167 done
1168 fi
1169 export OUT_AMLOGIC_DIR=$(readlink -m ${COMMON_OUT_DIR}/amlogic)
1170 set -x
1171 extra_cmds
1172 set +x
1173 MODULES=$(find ${MODULES_STAGING_DIR} -type f -name "*.ko")
1174 cp -p ${MODULES} ${DIST_DIR}
1175
1176 new_path=${PATH}
1177 PATH=${old_path}
1178 echo "========================================================"
1179 if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then
1180 echo "Rebuild rootfs in order to install modules!"
1181 rebuild_rootfs ${ARCH}
1182 else
1183 echo "There's no file ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot, so don't rebuild rootfs!"
1184 fi
1185 PATH=${new_path}
1186 fi
1187 if [ -n "${DTS_EXT_DIR}" ]; then
1188 if [ -d "${ROOT_DIR}/${DTS_EXT_DIR}" ]; then
1189 DTS_EXT_DIR=$(rel_path ${ROOT_DIR}/${DTS_EXT_DIR} ${KERNEL_DIR})
1190 if [ -d ${OUT_DIR}/${DTS_EXT_DIR} ]; then
1191 FILES="$FILES `ls ${OUT_DIR}/${DTS_EXT_DIR}`"
1192 fi
1193 fi
1194 fi
1195 for FILE in ${FILES}; do
1196 if [ -f ${OUT_DIR}/${FILE} ]; then
1197 echo " $FILE"
1198 cp -p ${OUT_DIR}/${FILE} ${DIST_DIR}/
1199 elif [[ "${FILE}" =~ \.dtb|\.dtbo ]] && \
1200 [ -n "${DTS_EXT_DIR}" ] && [ -f "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" ] ; then
1201 # DTS_EXT_DIR is recalculated before to be relative to KERNEL_DIR
1202 echo " $FILE"
1203 cp -p "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" "${DIST_DIR}/"
1204 else
1205 echo " $FILE is not a file, skipping"
1206 fi
1207 done
1208 exit
1209 fi
1210}
1211
1212export -f build_part_of_kernel
1213
1214function export_env_variable () {
1215 export ABI BUILD_CONFIG LTO KMI_SYMBOL_LIST_STRICT_MODE CHECK_DEFCONFIG MANUAL_INSMOD_MODULE ARCH
qinglin.libce54712023-05-08 13:56:31 +08001216 export KERNEL_DIR COMMON_DRIVERS_DIR BUILD_DIR ANDROID_PROJECT GKI_CONFIG UPGRADE_PROJECT ANDROID_VERSION FAST_BUILD CHECK_GKI_20 DEV_CONFIGS
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001217 export FULL_KERNEL_VERSION BAZEL
1218
1219 echo ROOT_DIR=$ROOT_DIR
1220 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 +08001221 echo KERNEL_DIR=${KERNEL_DIR} COMMON_DRIVERS_DIR=${COMMON_DRIVERS_DIR} BUILD_DIR=${BUILD_DIR} ANDROID_PROJECT=${ANDROID_PROJECT} GKI_CONFIG=${GKI_CONFIG} UPGRADE_PROJECT=${UPGRADE_PROJECT} ANDROID_VERSION=${ANDROID_VERSION} FAST_BUILD=${FAST_BUILD} CHECK_GKI_20=${CHECK_GKI_20}
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001222 echo FULL_KERNEL_VERSION=${FULL_KERNEL_VERSION} BAZEL=${BAZEL}
1223 echo MENUCONFIG=${MENUCONFIG} BASICCONFIG=${BASICCONFIG} IMAGE=${IMAGE} MODULES=${MODULES} DTB_BUILD=${DTB_BUILD}
1224}
1225
1226export -f export_env_variable
Dezhen Wang850c0d22023-05-31 19:26:20 +08001227
1228function handle_input_parameters () {
1229 VA=
1230 ARGS=()
1231 for i in "$@"
1232 do
1233 case $i in
1234 --arch)
1235 ARCH=$2
1236 VA=1
1237 shift
1238 ;;
1239 --abi)
1240 ABI=1
1241 shift
1242 ;;
1243 --build_config)
1244 BUILD_CONFIG=$2
1245 VA=1
1246 shift
1247 ;;
1248 --lto)
1249 LTO=$2
1250 VA=1
1251 shift
1252 ;;
1253 --symbol_strict)
1254 KMI_SYMBOL_LIST_STRICT_MODE=$2
1255 VA=1
1256 shift
1257 ;;
1258 --menuconfig)
1259 MENUCONFIG=1
1260 shift
1261 ;;
1262 --basicconfig)
1263 if [ "$2" = "m" ] || [ "$2" = "n" ]; then
1264 BASICCONFIG=$2
1265 else
1266 BASICCONFIG="m"
1267 fi
1268 VA=1
1269 shift
1270 ;;
1271 --image)
1272 IMAGE=1
1273 shift
1274 ;;
1275 --modules)
1276 MODULES=1
1277 shift
1278 break
1279 ;;
1280 --dtbs)
1281 DTB_BUILD=1
1282 shift
1283 ;;
1284 --build_dir)
1285 BUILD_DIR=$2
1286 VA=1
1287 shift
1288 ;;
1289 --check_defconfig)
1290 CHECK_DEFCONFIG=1
1291 shift
1292 ;;
1293 --modules_depend)
1294 MODULES_DEPEND=1
1295 shift
1296 ;;
1297 --android_project)
1298 ANDROID_PROJECT=$2
1299 VA=1
1300 shift
1301 ;;
1302 --gki_20)
1303 GKI_CONFIG=gki_20
1304 shift
1305 ;;
1306 --gki_10)
1307 GKI_CONFIG=gki_10
1308 shift
1309 ;;
1310 --gki_debug)
1311 GKI_CONFIG=gki_debug
1312 shift
1313 ;;
1314 --fast_build)
1315 FAST_BUILD=1
1316 shift
1317 ;;
1318 --upgrade)
1319 UPGRADE_PROJECT=1
1320 ANDROID_VERSION=$2
1321 VA=1
1322 shift
1323 ;;
1324 --manual_insmod_module)
1325 MANUAL_INSMOD_MODULE=1
1326 shift
1327 ;;
Dezhen Wang850c0d22023-05-31 19:26:20 +08001328 --check_gki_20)
1329 CHECK_GKI_20=1
1330 GKI_CONFIG=gki_20
1331 LTO=none
1332 shift
1333 ;;
1334 --dev_config)
1335 DEV_CONFIGS=$2
1336 VA=1
1337 shift
1338 ;;
1339 --bazel)
1340 BAZEL=1
1341 shift
1342 ;;
1343 -h|--help)
1344 show_help
1345 exit 0
1346 ;;
1347 *)
1348 if [[ -n $1 ]];
1349 then
1350 if [[ -z ${VA} ]];
1351 then
1352 ARGS+=("$1")
1353 fi
1354 fi
1355 VA=
1356 shift
1357 ;;
1358 esac
1359 done
1360}
1361
1362export -f handle_input_parameters
1363
1364function set_default_parameters () {
1365 if [ "${ARCH}" = "arm" ]; then
1366 ARGS+=("LOADADDR=0x108000")
1367 else
1368 ARCH=arm64
1369 fi
1370
1371 if [[ -z "${ABI}" ]]; then
1372 ABI=0
1373 fi
1374 if [[ -z "${LTO}" ]]; then
1375 LTO=thin
1376 fi
1377 if [[ -n ${CHECK_GKI_20} && -z ${ANDROID_PROJECT} ]]; then
1378 ANDROID_PROJECT=ohm
1379 fi
1380
1381 if [[ -z "${BUILD_CONFIG}" ]]; then
1382 if [ "${ARCH}" = "arm64" ]; then
1383 BUILD_CONFIG=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic
1384 elif [ "${ARCH}" = "arm" ]; then
1385 BUILD_CONFIG=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic32
1386 fi
1387 fi
1388 if [[ -z "${BUILD_DIR}" ]]; then
1389 BUILD_DIR=build
1390 fi
1391
1392 version_message=$(grep -rn BRANCH= ${KERNEL_DIR}/build.config.constants)
1393 version_message="common${version_message##*android}"
1394 if [[ -n ${FULL_KERNEL_VERSION} ]]; then
1395 if [[ "${FULL_KERNEL_VERSION}" != "${version_message}" ]]; then
1396 echo "kernel version is not match!!"
1397 exit
1398 fi
1399 else
1400 FULL_KERNEL_VERSION=${version_message}
1401 fi
1402
1403 if [[ -z ${BAZEL} ]]; then
Dezhen Wang20069292023-06-20 14:51:21 +08001404 [[ "${FULL_KERNEL_VERSION}" != "common13-5.15" && "${ARCH}" == "arm64" && -z ${UPGRADE_PROJECT} ]] && BAZEL=1
Dezhen Wang850c0d22023-05-31 19:26:20 +08001405 fi
1406
1407 auto_patch_to_common_dir
1408
1409 if [[ ! -f ${BUILD_DIR}/build_abi.sh ]]; then
1410 echo "The directory of build does not exist";
1411 exit
1412 fi
1413
1414 ROOT_DIR=$(readlink -f $(dirname $0))
1415 if [[ ! -f ${ROOT_DIR}/${KERNEL_DIR}/init/main.c ]]; then
1416 ROOT_DIR=`pwd`
1417 if [[ ! -f ${ROOT_DIR}/${KERNEL_DIR}/init/main.c ]]; then
1418 echo "the file path of $0 is incorrect"
1419 exit
1420 fi
1421 fi
1422 export ROOT_DIR
1423
1424 CHECK_DEFCONFIG=${CHECK_DEFCONFIG:-0}
1425 MODULES_DEPEND=${MODULES_DEPEND:-0}
1426 if [[ ! -f ${KERNEL_BUILD_VAR_FILE} ]]; then
1427 export KERNEL_BUILD_VAR_FILE=`mktemp /tmp/kernel.XXXXXXXXXXXX`
1428 RM_KERNEL_BUILD_VAR_FILE=1
1429 fi
1430
1431 GKI_CONFIG=${GKI_CONFIG:-gki_debug}
1432
1433 export CROSS_COMPILE=
1434
1435 if [ "${ABI}" -eq "1" ]; then
1436 export OUT_DIR_SUFFIX="_abi"
1437 else
1438 OUT_DIR_SUFFIX=
1439 fi
1440}
1441
1442export -f set_default_parameters
1443
1444function auto_patch_to_common_dir () {
1445 #first auto patch when param parse end
Dezhen Wang850c0d22023-05-31 19:26:20 +08001446
1447 if [[ -f ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/auto_patch/auto_patch.sh ]]; then
1448 export PATCH_PARM
1449 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/auto_patch/auto_patch.sh ${FULL_KERNEL_VERSION}
1450 fi
1451
1452 if [[ ${ONLY_PATCH} -eq "1" ]]; then
1453 cd ${CURRENT_DIR}
1454 exit
1455 fi
1456}
1457
1458export -f auto_patch_to_common_dir
1459
1460
1461# the follow functions are used for smarthome
1462function handle_input_parameters_for_smarthome () {
1463 VA=
1464 ARGS=()
1465 for i in "$@"
1466 do
1467 case $i in
1468 --savedefconfig)
1469 SAVEDEFCONFIG=1
1470 shift
1471 ;;
1472 --menuconfig)
1473 MENUCONFIG=1
1474 shift
1475 ;;
1476 --dtb)
1477 DTB=1
1478 shift
1479 ;;
1480 --manual_insmod_module)
1481 MANUAL_INSMOD_MODULE=1
1482 shift
1483 ;;
1484 --patch)
1485 ONLY_PATCH=1
1486 shift
1487 ;;
1488 -h|--help)
1489 show_help
1490 exit 0
1491 ;;
1492 *)
1493 if [[ -n $1 ]];
1494 then
1495 if [[ -z ${VA} ]];
1496 then
1497 ARGS+=("$1")
1498 fi
1499 fi
1500 VA=
1501 shift
1502 ;;
1503 esac
1504 done
1505}
1506
1507export -f handle_input_parameters_for_smarthome
1508
1509function set_default_parameters_for_smarthome () {
1510 version_message=$(grep -rn BRANCH= ${KERNEL_DIR}/build.config.constants)
1511 version_message="common${version_message##*android}"
1512 if [[ -n ${FULL_KERNEL_VERSION} ]]; then
1513 if [[ "${FULL_KERNEL_VERSION}" != "${version_message}" ]]; then
1514 echo "kernel version is not match!!"
1515 exit
1516 fi
1517 else
1518 FULL_KERNEL_VERSION=${version_message}
1519 fi
1520
1521 tool_args=()
1522 prebuilts_paths=(
1523 CLANG_PREBUILT_BIN
1524 #BUILDTOOLS_PREBUILT_BIN
1525 )
1526 echo CC_CLANG=$CC_CLANG
1527 if [[ $CC_CLANG -eq "1" ]]; then
1528 source ${ROOT_DIR}/${KERNEL_DIR}/build.config.common
1529 if [[ -n "${LLVM}" ]]; then
1530 tool_args+=("LLVM=1")
1531 fi
1532 #if [ -n "${DTC}" ]; then
1533 # tool_args+=("DTC=${DTC}")
1534 #fi
1535 for prebuilt_bin in "${prebuilts_paths[@]}"; do
1536 prebuilt_bin=\${${prebuilt_bin}}
1537 eval prebuilt_bin="${prebuilt_bin}"
1538 if [ -n "${prebuilt_bin}" ]; then
1539 PATH=${PATH//"${ROOT_DIR}\/${prebuilt_bin}:"}
1540 PATH=${ROOT_DIR}/${prebuilt_bin}:${PATH} # add the clang tool to env PATH
1541 fi
1542 done
1543 export PATH
1544 elif [[ -n $CROSS_COMPILE_TOOL ]]; then
1545 export CROSS_COMPILE=${CROSS_COMPILE_TOOL}
1546 fi
1547
1548 if [[ $ARCH == arm64 ]]; then
1549 OUTDIR=${ROOT_DIR}/out/kernel-5.15-64
1550 elif [[ $ARCH == arm ]]; then
1551 OUTDIR=${ROOT_DIR}/out/kernel-5.15-32
1552 tool_args+=("LOADADDR=0x208000")
1553 elif [[ $ARCH == riscv ]]; then
1554 OUTDIR=${ROOT_DIR}/out/riscv-kernel-5.15-64
1555 fi
1556 TOOL_ARGS="${tool_args[@]}"
1557
1558 OUT_DIR=${OUTDIR}/common
1559 mkdir -p ${OUT_DIR}
1560 if [ "${SKIP_RM_OUTDIR}" != "1" ] ; then
1561 rm -rf ${OUTDIR}
1562 fi
1563
1564 echo "========================================================"
1565 echo ""
1566 export DIST_DIR=$(readlink -m ${OUTDIR}/dist)
1567 export MODULES_STAGING_DIR=$(readlink -m ${OUTDIR}/staging)
1568 export OUT_AMLOGIC_DIR=$(readlink -m ${OUTDIR}/amlogic)
1569 echo OUTDIR=$OUTDIR DIST_DIR=$DIST_DIR MODULES_STAGING_DIR=$MODULES_STAGING_DIR KERNEL_DIR=$KERNEL_DIR
1570
1571
1572 source ${ROOT_DIR}/build/kernel/build_utils.sh
1573
1574 DTS_EXT_DIR=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/boot/dts/amlogic
1575 DTS_EXT_DIR=$(rel_path ${ROOT_DIR}/${DTS_EXT_DIR} ${KERNEL_DIR})
1576 export dtstree=${DTS_EXT_DIR}
1577 export DTC_INCLUDE=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/include
1578
1579 EXT_MODULES="
1580 ${EXT_MODULES}
1581 "
1582
1583 EXT_MODULES_CONFIG="
1584 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/ext_modules_config
1585 "
1586
1587 EXT_MODULES_PATH="
1588 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/ext_modules_path
1589 "
1590
1591 POST_KERNEL_BUILD_CMDS="prepare_module_build"
1592 EXTRA_CMDS="extra_cmds"
1593
1594 IN_KERNEL_MODULES=1
1595}
1596
1597export -f set_default_parameters_for_smarthome
1598
1599function savedefconfig_cmd_for_smarthome () {
1600 if [[ -n ${SAVEDEFCONFIG} ]]; then
1601 set -x
1602 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${DEFCONFIG}
1603 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} savedefconfig
1604 rm ${KERNEL_DIR}/arch/${ARCH}/configs/${DEFCONFIG}
1605 cp -f ${OUT_DIR}/defconfig ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/configs/${DEFCONFIG}
1606 set +x
1607 exit
1608 fi
1609}
1610
1611export -f savedefconfig_cmd_for_smarthome
1612
1613function only_build_dtb_for_smarthome () {
1614 if [[ -n ${DTB} ]]; then
1615 set -x
1616 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
1617 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs || exit
1618 set +x
1619 exit
1620 fi
1621}
1622
1623export -f only_build_dtb_for_smarthome
1624
1625function make_menuconfig_cmd_for_smarthome () {
1626 if [[ -n ${MENUCONFIG} ]]; then
1627 set -x
1628 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${DEFCONFIG}
1629 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} menuconfig
1630 set +x
1631 exit
1632 fi
1633}
1634
1635export -f make_menuconfig_cmd_for_smarthome
1636
1637function build_kernel_for_different_cpu_architecture () {
1638 set -x
1639 if [[ $ARCH == arm64 ]]; then
1640 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
1641 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} headers_install &&
1642 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} Image -j12 &&
1643 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} modules -j12 &&
1644 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 &&
1645 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs -j12 || exit
1646 rm ${ROOT_DIR}/${KERNEL_DIR}/arch/arm64/configs/${DEFCONFIG}
1647 elif [[ $ARCH == arm ]]; then
1648 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
1649 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} headers_install &&
1650 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} uImage -j12 &&
1651 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} modules -j12 &&
1652 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 &&
1653 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs -j12 || exit
1654 rm ${ROOT_DIR}/${KERNEL_DIR}/arch/arm/configs/${DEFCONFIG}
1655 elif [[ $ARCH == riscv ]]; then
1656 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
1657 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} headers_install &&
1658 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} Image -j12 &&
1659 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} modules -j12 &&
1660 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} INSTALL_MOD_PATH=${MODULES_STAGING_DIR} modules_install -j12 &&
1661 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs -j12 || exit
1662 rm ${ROOT_DIR}/${KERNEL_DIR}/arch/riscv/configs/${DEFCONFIG}
1663 fi
1664 cp ${OUT_DIR}/arch/${ARCH}/boot/Image* ${DIST_DIR}
1665 cp ${OUT_DIR}/arch/${ARCH}/boot/uImage* ${DIST_DIR}
1666 cp ${OUT_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/boot/dts/amlogic/*.dtb ${DIST_DIR}
1667 cp ${OUT_DIR}/vmlinux ${DIST_DIR}
1668 set +x
1669}
1670
1671export -f build_kernel_for_different_cpu_architecture
1672
1673function build_ext_modules() {
1674 for EXT_MOD in ${EXT_MODULES}; do
1675 EXT_MOD_REL=$(rel_path ${ROOT_DIR}/${EXT_MOD} ${KERNEL_DIR})
1676 mkdir -p ${OUT_DIR}/${EXT_MOD_REL}
1677
1678 set -x
1679 make ARCH=${ARCH} -C ${ROOT_DIR}/${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1680 O=${OUT_DIR} ${TOOL_ARGS} -j12 || exit
1681 make ARCH=${ARCH} -C ${ROOT_DIR}/${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1682 O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} \
1683 INSTALL_MOD_PATH=${MODULES_STAGING_DIR} \
1684 INSTALL_MOD_DIR="extra/${EXT_MOD}" \
1685 INSTALL_MOD_STRIP=1 \
1686 modules_install -j12 || exit
1687 set +x
1688 done
1689}
1690
1691export -f build_ext_modules
1692
1693function copy_modules_and_rebuild_rootfs_for_smarthome () {
1694 MODULES=$(find ${MODULES_STAGING_DIR} -type f -name "*.ko")
1695 if [ -n "${MODULES}" ]; then
1696 if [ -n "${IN_KERNEL_MODULES}" -o -n "${EXT_MODULES}" -o -n "${EXT_MODULES_MAKEFILE}" ]; then
1697 echo "========================================================"
1698 echo " Copying modules files"
1699 for module in ${MODULES}; do
1700 cp ${module} ${DIST_DIR}
1701 done
1702 if [ "${COMPRESS_MODULES}" = "1" ]; then
1703 echo " Archiving modules to ${MODULES_ARCHIVE}"
1704 tar --transform="s,.*/,," -czf ${DIST_DIR}/${MODULES_ARCHIVE} ${MODULES[@]}
1705 fi
1706 fi
1707
1708 if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then
1709 echo "Rebuild rootfs in order to install modules!"
1710 rebuild_rootfs ${ARCH}
1711 echo "Build success!"
1712 else
1713 echo "There's no file ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot, so don't rebuild rootfs!"
1714 fi
1715 fi
1716}
1717
1718export -f copy_modules_and_rebuild_rootfs_for_smarthome