blob: b6f84b1984934d52590a278ea06b0dd1b31c9fda [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
yao zhang1a0c556a2023-06-27 10:32:14 +080056 if [[ ${ANDROID_VERSION} == u || ${ANDROID_VERSION} == U ]]; 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_U}
58 fi
qinglin.li7a994a02022-12-05 15:04:40 +080059 fi
Dezhen Wangab7ba642023-03-15 14:10:44 +080060
Wanwei Jiangc65e4d32023-03-21 16:24:41 +080061 if [[ ${IN_BUILD_GKI_10} == 1 ]]; then
62 local temp_file=`mktemp /tmp/config.XXXXXXXXXXXX`
63 echo "CONFIG_MODULE_SIG_ALL=y" >> ${temp_file}
64 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${temp_file}
65 rm ${temp_file}
66 fi
Dezhen Wanga5f456a2023-05-05 17:40:31 +080067
68 if [[ -n ${DEV_CONFIGS} ]]; then
69 config_list=$(echo ${DEV_CONFIGS}|sed 's/+/ /g')
70 #verify the extra config is in the right path and merge the config
71 CONFIG_DIR=arch/${ARCH}/configs
72 for config_name in ${config_list[@]}
73 do
74 if [[ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/${CONFIG_DIR}/${config_name} ]]; then
75 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}
76 elif [[ -f ${config_name} ]]; then
77 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${config_name}
78 else
79 echo "ERROR: config file ${config_name} is not in the right path!!"
80 exit
81 fi
82 done
83 fi
wanwei.jiang91776952021-11-19 13:10:32 +080084}
85export -f pre_defconfig_cmds
86
87function post_defconfig_cmds() {
Wanwei Jiang2d4f9742022-09-13 11:22:17 +080088 rm ${ROOT_DIR}/${KCONFIG_DEFCONFIG}
wanwei.jiang91776952021-11-19 13:10:32 +080089}
90export -f post_defconfig_cmds
91
92function read_ext_module_config() {
93 ALL_LINE=""
94 while read LINE
95 do
96 if [[ $LINE != \#* && $LINE != "" ]]; then
97 ALL_LINE="$ALL_LINE"" ""$LINE"
98 fi
99 done < $1
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800100
101 echo "${ALL_LINE}"
wanwei.jiang91776952021-11-19 13:10:32 +0800102}
103
pengzhao.liua923dea2023-06-25 09:58:20 +0800104function autotest(){
105 if [[ -d ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/ ]]; then
106 if [[ ! -f ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/pre-commit ]]; then
107 cp ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/pre-commit ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/pre-commit
108 cp ${KERNEL_DIR}/scripts/amlogic/pre-commit ${KERNEL_DIR}/.git/hooks/pre-commit
109 chmod +x ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/pre-commit
110 chmod +x ${KERNEL_DIR}/.git/hooks/pre-commit
111 fi
112 fi
113}
114
wanwei.jiang91776952021-11-19 13:10:32 +0800115function read_ext_module_predefine() {
116 PRE_DEFINE=""
117
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800118 for y_config in `cat $1 | grep "^CONFIG_.*=y" | sed 's/=y//'`; do
wanwei.jiang91776952021-11-19 13:10:32 +0800119 PRE_DEFINE="$PRE_DEFINE"" -D"${y_config}
120 done
121
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800122 for m_config in `cat $1 | grep "^CONFIG_.*=m" | sed 's/=m//'`; do
wanwei.jiang91776952021-11-19 13:10:32 +0800123 PRE_DEFINE="$PRE_DEFINE"" -D"${m_config}_MODULE
124 done
125
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800126 echo "${PRE_DEFINE}"
wanwei.jiang91776952021-11-19 13:10:32 +0800127}
128
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800129top_ext_drivers=top_ext_drivers
wanwei.jiang91776952021-11-19 13:10:32 +0800130function prepare_module_build() {
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800131 local temp_file=`mktemp /tmp/kernel.XXXXXXXXXXXX`
Wanwei Jiang0a74fb12022-12-09 16:27:40 +0800132 if [[ ! `grep "CONFIG_AMLOGIC_IN_KERNEL_MODULES=y" ${ROOT_DIR}/${FRAGMENT_CONFIG}` ]]; then
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800133 sed 's:#.*$::g' ${ROOT_DIR}/${FRAGMENT_CONFIG} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
134 GKI_EXT_KERNEL_MODULE_CONFIG=$(read_ext_module_config ${temp_file})
135 GKI_EXT_KERNEL_MODULE_PREDEFINE=$(read_ext_module_predefine ${temp_file})
136 export GKI_EXT_KERNEL_MODULE_CONFIG GKI_EXT_KERNEL_MODULE_PREDEFINE
wanwei.jiang91776952021-11-19 13:10:32 +0800137 fi
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800138
139 for ext_module_config in ${EXT_MODULES_CONFIG}; do
140 sed 's:#.*$::g' ${ROOT_DIR}/${ext_module_config} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
141 GKI_EXT_MODULE_CONFIG=$(read_ext_module_config ${temp_file})
142 GKI_EXT_MODULE_PREDEFINE=$(read_ext_module_predefine ${temp_file})
143 done
144 export GKI_EXT_MODULE_CONFIG GKI_EXT_MODULE_PREDEFINE
145 echo GKI_EXT_MODULE_CONFIG=${GKI_EXT_MODULE_CONFIG}
146 echo GKI_EXT_MODULE_PREDEFINE=${GKI_EXT_MODULE_PREDEFINE}
147
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800148 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
149 if [[ -d ${top_ext_drivers} ]]; then
150 rm -rf ${top_ext_drivers}
151 fi
152 mkdir -p ${top_ext_drivers}
153 fi
154
155 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
156 extra_symbols="KBUILD_EXTRA_SYMBOLS +="
157 fi
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800158 ext_modules=
159 for ext_module in ${EXT_MODULES}; do
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800160 module_abs_path=`readlink -e ${ext_module}`
161 module_rel_path=$(rel_path ${module_abs_path} ${ROOT_DIR})
162 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
163 if [[ `echo ${module_rel_path} | grep "\.\.\/"` ]]; then
164 cp -rf ${module_abs_path} ${top_ext_drivers}
165 module_rel_path=${top_ext_drivers}/${module_abs_path##*/}
166 fi
167 fi
168 ext_modules="${ext_modules} ${module_rel_path}"
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800169 done
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800170
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800171 for ext_module_path in ${EXT_MODULES_PATH}; do
172 sed 's:#.*$::g' ${ROOT_DIR}/${ext_module_path} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800173 while read LINE
174 do
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800175 module_abs_path=`readlink -e ${LINE}`
176 module_rel_path=$(rel_path ${module_abs_path} ${ROOT_DIR})
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800177 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
178 if [[ `echo ${module_rel_path} | grep "\.\.\/"` ]]; then
179 cp -rf ${module_abs_path} ${top_ext_drivers}
180 module_rel_path=${top_ext_drivers}/${module_abs_path##*/}
181 fi
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800182 fi
183 ext_modules="${ext_modules} ${module_rel_path}"
184
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800185 done < ${temp_file}
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800186 done
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800187 EXT_MODULES=${ext_modules}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800188
189 local flag=0
190 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
191 for ext_module in ${EXT_MODULES}; do
192 ext_mod_rel=$(rel_path ${ext_module} ${KERNEL_DIR})
193 if [[ ${flag} -eq "1" ]]; then
194 sed -i "/# auto add KBUILD_EXTRA_SYMBOLS start/,/# auto add KBUILD_EXTRA_SYMBOLS end/d" ${ext_module}/Makefile
195 sed -i "2 i # auto add KBUILD_EXTRA_SYMBOLS end" ${ext_module}/Makefile
196 sed -i "2 i ${extra_symbols}" ${ext_module}/Makefile
197 sed -i "2 i # auto add KBUILD_EXTRA_SYMBOLS start" ${ext_module}/Makefile
198 echo "${ext_module}/Makefile add: ${extra_symbols}"
199 fi
200 extra_symbols="${extra_symbols} ${ext_mod_rel}/Module.symvers"
201 flag=1
202 done
203 fi
204
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800205 export EXT_MODULES
206 echo EXT_MODULES=${EXT_MODULES}
207
208 rm ${temp_file}
wanwei.jiang91776952021-11-19 13:10:32 +0800209}
210
211export -f prepare_module_build
wanwei.jiang612a8882021-11-23 17:12:23 +0800212
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800213function extra_cmds() {
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800214 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
215 for ext_module in ${EXT_MODULES}; do
216 sed -i "/# auto add KBUILD_EXTRA_SYMBOLS start/,/# auto add KBUILD_EXTRA_SYMBOLS end/d" ${ext_module}/Makefile
217 done
218 fi
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800219
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800220 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
221 if [[ -d ${top_ext_drivers} ]]; then
222 rm -rf ${top_ext_drivers}
223 fi
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800224 fi
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800225
226 for FILE in ${FILES}; do
227 if [[ "${FILE}" =~ \.dtbo ]] && \
228 [ -n "${DTS_EXT_DIR}" ] && [ -f "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" ] ; then
229 MKDTIMG_DTBOS="${MKDTIMG_DTBOS} ${DIST_DIR}/${FILE}"
230 fi
231 done
232 export MKDTIMG_DTBOS
233
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800234 set +x
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800235 modules_install
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800236 set -x
237
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800238 local src_dir=$(echo ${MODULES_STAGING_DIR}/lib/modules/*)
239 pushd ${src_dir}
wanwei.jiangf73b2202022-07-23 16:00:44 +0800240 cp modules.order modules_order.back
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800241 : > modules.order
Wanwei Jiang571dde62022-11-17 14:37:41 +0800242 set +x
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800243 while read LINE
244 do
245 find -name ${LINE} >> modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800246 done < ${OUT_AMLOGIC_DIR}/modules/modules.order
Wanwei Jiang571dde62022-11-17 14:37:41 +0800247 set -x
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800248 sed -i "s/^\.\///" modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800249 : > ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800250 ext_modules=
251 for ext_module in ${EXT_MODULES}; do
252 if [[ ${ext_module} =~ "../" ]]; then
253 ext_module_old=${ext_module}
254 ext_module=${ext_module//\.\.\//}
255 ext_dir=$(dirname ${ext_module})
256 [[ -d extra/${ext_module} ]] && rm -rf extra/${ext_dir}
257 mkdir -p extra/${ext_dir}
258 cp -rf extra/${ext_module_old} extra/${ext_dir}
259
260 ext_modules_order_file=$(ls extra/${ext_module}/modules.order.*)
261 ext_dir_top=${ext_module%/*}
wanwei.jiangf73b2202022-07-23 16:00:44 +0800262 sed -i "s/\.\.\///g" ${ext_modules_order_file}
263 cat ${ext_modules_order_file} >> modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800264 cat ${ext_modules_order_file} | awk -F/ '{print $NF}' >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
wanwei.jiangf73b2202022-07-23 16:00:44 +0800265 : > ${ext_modules_order_file}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800266 else
267 ext_modules_order_file=$(ls extra/${ext_module}/modules.order.*)
wanwei.jiangf73b2202022-07-23 16:00:44 +0800268 cat ${ext_modules_order_file} >> modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800269 cat ${ext_modules_order_file} | awk -F/ '{print $NF}' >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
wanwei.jiangf73b2202022-07-23 16:00:44 +0800270 : > ${ext_modules_order_file}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800271 fi
272 ext_modules="${ext_modules} ${ext_module}"
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800273 done
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800274 EXT_MODULES=${ext_modules}
275 echo EXT_MODULES=${EXT_MODULES}
276 export EXT_MODULES
wanwei.jiangf73b2202022-07-23 16:00:44 +0800277
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800278 head -n ${ramdisk_last_line} modules.order > vendor_boot_modules
wanwei.jiangf73b2202022-07-23 16:00:44 +0800279 file_last_line=`sed -n "$=" modules.order`
280 let line=${file_last_line}-${ramdisk_last_line}
281 tail -n ${line} modules.order > vendor_dlkm_modules
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800282 export MODULES_LIST=${src_dir}/vendor_boot_modules
283 if [[ "${ARCH}" = "arm64" && -z ${FAST_BUILD} ]]; then
Lei Zhang96efea62022-09-02 14:55:06 +0800284 export VENDOR_DLKM_MODULES_LIST=${src_dir}/vendor_dlkm_modules
285 fi
wanwei.jiangf73b2202022-07-23 16:00:44 +0800286
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800287 popd
wanwei.jiang1d154992022-05-30 14:56:26 +0800288
Wanwei Jiang0a74fb12022-12-09 16:27:40 +0800289 if [[ -z ${ANDROID_PROJECT} ]] && [[ -d ${OUT_DIR}/${DTS_EXT_DIR} ]]; then
wanwei.jiang1d154992022-05-30 14:56:26 +0800290 FILES="$FILES `ls ${OUT_DIR}/${DTS_EXT_DIR}`"
291 fi
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800292
293 if [[ -f ${KERNEL_BUILD_VAR_FILE} ]]; then
294 : > ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiangb2ed83c2022-09-09 14:01:20 +0800295 echo "KERNEL_DIR=${KERNEL_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800296 echo "COMMON_OUT_DIR=${COMMON_OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
297 echo "OUT_DIR=${OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
298 echo "DIST_DIR=${DIST_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800299 echo "OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800300 echo "MODULES_STAGING_DIR=${MODULES_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
301 echo "MODULES_PRIVATE_DIR=${MODULES_PRIVATE_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
302 echo "INITRAMFS_STAGING_DIR=${INITRAMFS_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
303 echo "SYSTEM_DLKM_STAGING_DIR=${SYSTEM_DLKM_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
304 echo "VENDOR_DLKM_STAGING_DIR=${VENDOR_DLKM_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
305 echo "MKBOOTIMG_STAGING_DIR=${MKBOOTIMG_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800306 echo "DIST_GKI_DIR=${DIST_GKI_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
307 echo "FULL_KERNEL_VERSION=${FULL_KERNEL_VERSION}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8fe00342023-05-16 22:53:14 +0800308 echo "GKI_MODULES_LOAD_WHITE_LIST=\"${GKI_MODULES_LOAD_WHITE_LIST[*]}\"" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8042e472023-06-06 14:12:32 +0800309 echo "BAZEL=${BAZEL}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800310 fi
Wanwei Jianga07f9a52022-09-30 18:40:40 +0800311
312 for module_path in ${PREBUILT_MODULES_PATH}; do
313 find ${module_path} -type f -name "*.ko" -exec cp {} ${DIST_DIR} \;
314 done
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800315}
316
317export -f extra_cmds
318
Wanwei Jiang2218b892023-03-17 17:31:21 +0800319function bazel_extra_cmds() {
320 modules_install
321
322 if [[ -f ${KERNEL_BUILD_VAR_FILE} ]]; then
323 : > ${KERNEL_BUILD_VAR_FILE}
324 echo "KERNEL_DIR=${KERNEL_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
325 echo "COMMON_OUT_DIR=${COMMON_OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
326 echo "DIST_DIR=${DIST_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
327 echo "OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8fe00342023-05-16 22:53:14 +0800328 echo "GKI_MODULES_LOAD_WHITE_LIST=\"${GKI_MODULES_LOAD_WHITE_LIST[*]}\"" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8042e472023-06-06 14:12:32 +0800329 echo "BAZEL=${BAZEL}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang2218b892023-03-17 17:31:21 +0800330 fi
331
332 if [[ ${GKI_CONFIG} != gki_20 ]]; then
333 [[ -f ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz ]] && rm -f ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz
334 mv ${DIST_DIR}/system_dlkm_staging_archive.tar.gz ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz
335 [[ -d ${DIST_DIR}/system_dlkm_gki10 ]] && rm -rf ${DIST_DIR}/system_dlkm_gki10
336 mkdir ${DIST_DIR}/system_dlkm_gki10
337 pushd ${DIST_DIR}/system_dlkm_gki10
338 tar zxf ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz
339 find -name "*.ko" | while read module; do
Wanwei Jiang475245b2023-05-10 21:06:52 +0800340 module_name=${module##*/}
Wanwei Jiang2218b892023-03-17 17:31:21 +0800341 if [[ ! `grep "/${module_name}" ${DIST_DIR}/system_dlkm.modules.load` ]]; then
342 rm -f ${module}
343 fi
344 done
345 tar czf ${DIST_DIR}/system_dlkm_staging_archive.tar.gz lib
346 popd
347 rm -rf ${DIST_DIR}/system_dlkm_gki10
348 fi
349}
350
351export -f bazel_extra_cmds
352
wanwei.jiang612a8882021-11-23 17:12:23 +0800353function mod_probe() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800354 local ko=$1
355 local loop
qinglin.lia284a932022-09-21 18:07:38 +0800356 for loop in `grep "^$ko:" modules.dep | sed 's/.*://'`; do
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800357 mod_probe $loop
358 echo insmod $loop >> __install.sh
359 done
wanwei.jiang612a8882021-11-23 17:12:23 +0800360}
361
Wanwei Jiang571dde62022-11-17 14:37:41 +0800362function mod_probe_recovery() {
363 local ko=$1
364 local loop
365 for loop in `grep "^$ko:" modules_recovery.dep | sed 's/.*://'`; do
366 mod_probe_recovery $loop
367 echo insmod $loop >> __install_recovery.sh
368 done
369}
370
wanwei.jiangb12abc82021-12-25 22:17:10 +0800371function adjust_sequence_modules_loading() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800372 if [[ -n $1 ]]; then
373 chips=$1
wanwei.jiangb12abc82021-12-25 22:17:10 +0800374 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800375
376 source ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list
377 cp modules.dep modules.dep.temp
378
379 soc_module=()
380 for chip in ${chips[@]}; do
381 chip_module=`ls amlogic-*-soc-${chip}.ko`
382 soc_module=(${soc_module[@]} ${chip_module[@]})
383 done
384 echo soc_module=${soc_module[*]}
385
386 delete_soc_module=()
387 if [[ ${#soc_module[@]} == 0 ]]; then
388 echo "Use all soc module"
389 else
390 for module in `ls amlogic-*-soc-*`; do
391 if [[ ! "${soc_module[@]}" =~ "${module}" ]] ; then
392 echo Delete soc module: ${module}
393 sed -n "/${module}:/p" modules.dep.temp
394 sed -i "/${module}:/d" modules.dep.temp
395 delete_soc_module=(${delete_soc_module[@]} ${module})
396 fi
397 done
398 echo delete_soc_module=${delete_soc_module[*]}
399 fi
400
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800401 if [[ -n ${CLK_SOC_MODULE} ]]; then
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800402 delete_clk_soc_modules=()
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800403 for module in `ls amlogic-clk-soc-*`; do
404 if [[ "${CLK_SOC_MODULE}" != "${module}" ]] ; then
405 echo Delete clk soc module: ${module}
406 sed -n "/${module}:/p" modules.dep.temp
407 sed -i "/${module}:/d" modules.dep.temp
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800408 delete_clk_soc_modules=(${delete_clk_soc_modules[@]} ${module})
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800409 fi
410 done
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800411 echo delete_clk_soc_modules=${delete_clk_soc_modules[*]}
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800412 fi
413
414 if [[ -n ${PINCTRL_SOC_MODULE} ]]; then
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800415 delete_pinctrl_soc_modules=()
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800416 for module in `ls amlogic-pinctrl-soc-*`; do
417 if [[ "${PINCTRL_SOC_MODULE}" != "${module}" ]] ; then
418 echo Delete pinctrl soc module: ${module}
419 sed -n "/${module}:/p" modules.dep.temp
420 sed -i "/${module}:/d" modules.dep.temp
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800421 delete_pinctrl_soc_modules=(${delete_pinctrl_soc_modules[@]} ${module})
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800422 fi
423 done
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800424 echo delete_pinctrl_soc_modules=${delete_pinctrl_soc_modules[*]}
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800425 fi
426
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800427 in_line_i=a
428 delete_type_modules=()
429 echo "TYPE_MODULE_SELECT_MODULE=${TYPE_MODULE_SELECT_MODULE}"
430 mkdir temp_dir
431 cd temp_dir
432 in_temp_dir=y
433 for element in ${TYPE_MODULE_SELECT_MODULE}; do
434 if [[ ${in_temp_dir} = y ]]; then
435 cd ../
436 rm -r temp_dir
437 in_temp_dir=
438 fi
439 if [[ ${in_line_i} = a ]]; then
440 in_line_i=b
441 type_module=${element}
442 select_modules_i=0
443 select_modules_count=
444 select_modules=
445 elif [[ ${in_line_i} = b ]]; then
446 in_line_i=c
447 select_modules_count=${element}
448 else
449 let select_modules_i+=1
450 select_modules="${select_modules} ${element}"
451 if [[ ${select_modules_i} -eq ${select_modules_count} ]]; then
452 in_line_i=a
453 echo type_module=$type_module select_modules=$select_modules
454 for module in `ls ${type_module}`; do
455 dont_delete_module=0
456 for select_module in ${select_modules}; do
457 if [[ "${select_module}" == "${module}" ]] ; then
458 dont_delete_module=1
459 break;
460 fi
461 done
462 if [[ ${dont_delete_module} != 1 ]]; then
463 echo Delete module: ${module}
464 sed -n "/${module}:/p" modules.dep.temp
465 sed -i "/${module}:/d" modules.dep.temp
466 delete_type_modules=(${delete_type_modules[@]} ${module})
467 fi
468 done
469 echo delete_type_modules=${delete_type_modules[*]}
470 fi
471 fi
472 done
473 if [[ -n ${in_temp_dir} ]]; then
474 cd ../
475 rm -r temp_dir
476 fi
477
478 black_modules=()
Dezhen Wang45dfcb02023-02-13 17:41:44 +0800479 mkdir service_module
480 echo MODULES_SERVICE_LOAD_LIST=${MODULES_SERVICE_LOAD_LIST[@]}
481 BLACK_AND_SERVICE_LIST=(${MODULES_LOAD_BLACK_LIST[@]} ${MODULES_SERVICE_LOAD_LIST[@]})
482 echo ${BLACK_AND_SERVICE_LIST[@]}
483 for module in ${BLACK_AND_SERVICE_LIST[@]}; do
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800484 modules=`ls ${module}*`
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800485 black_modules=(${black_modules[@]} ${modules[@]})
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800486 done
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800487 if [[ ${#black_modules[@]} == 0 ]]; then
488 echo "black_modules is null, don't delete modules, MODULES_LOAD_BLACK_LIST=${MODULES_LOAD_BLACK_LIST[*]}"
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800489 else
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800490 echo black_modules=${black_modules[*]}
491 for module in ${black_modules[@]}; do
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800492 echo Delete module: ${module}
493 sed -n "/${module}:/p" modules.dep.temp
494 sed -i "/${module}:/d" modules.dep.temp
495 done
496 fi
497
Wanwei Jiang475245b2023-05-10 21:06:52 +0800498 GKI_MODULES_LOAD_BLACK_LIST=()
499 if [[ "${FULL_KERNEL_VERSION}" != "common13-5.15" ]]; then
500 gki_modules_temp_file=`mktemp /tmp/config.XXXXXXXXXXXX`
qinglin.lieafebcf2023-06-27 12:48:22 +0800501 if [[ ${BAZEL} == "1" ]]; then
502 cp $DIST_DIR/system_dlkm.modules.load ${gki_modules_temp_file}
503 else
504 rm -f ${gki_modules_temp_file}
505 cat ${ROOT_DIR}/${KERNEL_DIR}/modules.bzl |grep ko | while read LINE
506 do
507 echo $LINE | sed 's/^[^"]*"//' | sed 's/".*$//' >> ${gki_modules_temp_file}
508 done
509 fi
Wanwei Jiang475245b2023-05-10 21:06:52 +0800510
511 for module in ${GKI_MODULES_LOAD_WHITE_LIST[@]}; do
512 sed -i "/\/${module}/d" ${gki_modules_temp_file}
513 done
514
515 for module in `cat ${gki_modules_temp_file}`; do
516 module=${module##*/}
517 GKI_MODULES_LOAD_BLACK_LIST[${#GKI_MODULES_LOAD_BLACK_LIST[*]}]=${module}
518 done
519 rm -f ${gki_modules_temp_file}
520
521 for module in ${GKI_MODULES_LOAD_BLACK_LIST[@]}; do
522 echo Delete module: ${module}
523 sed -n "/${module}:/p" modules.dep.temp
524 sed -i "/${module}:/d" modules.dep.temp
525 done
526 fi
527
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800528 cat modules.dep.temp | cut -d ':' -f 2 > modules.dep.temp1
Wanwei Jiang475245b2023-05-10 21:06:52 +0800529 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 +0800530 for module in ${delete_modules[@]}; do
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800531 if [[ ! `ls $module` ]]; then
532 continue
533 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800534 match=`sed -n "/${module}/=" modules.dep.temp1`
535 for match in ${match[@]}; do
536 match_count=(${match_count[@]} $match)
537 done
538 if [[ ${#match_count[@]} != 0 ]]; then
539 echo "Error ${#match_count[@]} modules depend on ${module}, please modify:"
wanwei.jiang50759e12022-03-24 12:36:17 +0800540 echo ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list:MODULES_LOAD_BLACK_LIST
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800541 exit
542 fi
Dezhen Wang45dfcb02023-02-13 17:41:44 +0800543 if [[ -n ${ANDROID_PROJECT} ]]; then
544 for service_module_temp in ${MODULES_SERVICE_LOAD_LIST[@]}; do
545 if [[ ${module} = ${service_module_temp} ]]; then
546 mv ${module} service_module
547 fi
548 done
549 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800550 rm -f ${module}
551 done
552 rm -f modules.dep.temp1
wanwei.jiangb12abc82021-12-25 22:17:10 +0800553 touch modules.dep.temp1
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800554
555 for module in ${RAMDISK_MODULES_LOAD_LIST[@]}; do
556 echo RAMDISK_MODULES_LOAD_LIST: $module
wanwei.jiangb12abc82021-12-25 22:17:10 +0800557 sed -n "/${module}:/p" modules.dep.temp
558 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1
559 sed -i "/${module}:/d" modules.dep.temp
560 sed -n "/${module}.*\.ko:/p" modules.dep.temp
561 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1
562 sed -i "/${module}.*\.ko:/d" modules.dep.temp
563 done
564
Wanwei Jiang571dde62022-11-17 14:37:41 +0800565 if [[ -n ${ANDROID_PROJECT} ]]; then
566 cp modules.dep.temp modules_recovery.dep.temp
567 cp modules.dep.temp1 modules_recovery.dep.temp1
568 fi
569
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800570 for module in ${VENDOR_MODULES_LOAD_FIRST_LIST[@]}; do
571 echo VENDOR_MODULES_LOAD_FIRST_LIST: $module
572 sed -n "/${module}:/p" modules.dep.temp
573 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1
574 sed -i "/${module}:/d" modules.dep.temp
575 sed -n "/${module}.*\.ko:/p" modules.dep.temp
576 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1
577 sed -i "/${module}.*\.ko:/d" modules.dep.temp
wanwei.jiangb12abc82021-12-25 22:17:10 +0800578 done
579
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800580 if [ -f modules.dep.temp2 ]; then
581 rm modules.dep.temp2
582 fi
583 touch modules.dep.temp2
584 for module in ${VENDOR_MODULES_LOAD_LAST_LIST[@]}; do
585 echo VENDOR_MODULES_LOAD_FIRST_LIST: $module
586 sed -n "/${module}:/p" modules.dep.temp
587 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp2
588 sed -i "/${module}:/d" modules.dep.temp
589 sed -n "/${module}.*\.ko:/p" modules.dep.temp
590 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp2
591 sed -i "/${module}.*\.ko:/d" modules.dep.temp
592 done
593
594 cat modules.dep.temp >> modules.dep.temp1
595 cat modules.dep.temp2 >> modules.dep.temp1
596
wanwei.jiangb12abc82021-12-25 22:17:10 +0800597 cp modules.dep.temp1 modules.dep
598 rm modules.dep.temp
599 rm modules.dep.temp1
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800600 rm modules.dep.temp2
Wanwei Jiang571dde62022-11-17 14:37:41 +0800601
602 if [[ -n ${ANDROID_PROJECT} ]]; then
603 for module in ${RECOVERY_MODULES_LOAD_LIST[@]}; do
604 echo RECOVERY_MODULES_LOAD_LIST: $module
605 sed -n "/${module}:/p" modules_recovery.dep.temp
606 sed -n "/${module}:/p" modules_recovery.dep.temp >> modules_recovery.dep.temp1
607 sed -i "/${module}:/d" modules_recovery.dep.temp
608 sed -n "/${module}.*\.ko:/p" modules_recovery.dep.temp
609 sed -n "/${module}.*\.ko:/p" modules_recovery.dep.temp >> modules_recovery.dep.temp1
610 sed -i "/${module}.*\.ko:/d" modules_recovery.dep.temp
611 done
612
613 cat modules_recovery.dep.temp >> modules_recovery.dep.temp1
614
615 cp modules_recovery.dep.temp1 modules_recovery.dep
616 rm modules_recovery.dep.temp
617 rm modules_recovery.dep.temp1
618 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800619}
620
Wanwei Jiang571dde62022-11-17 14:37:41 +0800621create_ramdisk_vendor_recovery() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800622 install_temp=$1
Wanwei Jiang571dde62022-11-17 14:37:41 +0800623 if [[ -n ${ANDROID_PROJECT} ]]; then
624 recovery_install_temp=$2
625 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800626 source ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list
Wanwei Jiang9173e462022-09-29 00:58:33 +0800627 ramdisk_module_i=${#RAMDISK_MODULES_LOAD_LIST[@]}
628 while [ ${ramdisk_module_i} -gt 0 ]; do
629 let ramdisk_module_i--
630 echo ramdisk_module_i=$ramdisk_module_i ${RAMDISK_MODULES_LOAD_LIST[${ramdisk_module_i}]}
631 if [[ `grep "${RAMDISK_MODULES_LOAD_LIST[${ramdisk_module_i}]}" ${install_temp}` ]]; then
632 last_ramdisk_module=${RAMDISK_MODULES_LOAD_LIST[${ramdisk_module_i}]}
633 break;
634 fi
635 done
636 # last_ramdisk_module=${RAMDISK_MODULES_LOAD_LIST[${#RAMDISK_MODULES_LOAD_LIST[@]}-1]}
qinglin.libce54712023-05-08 13:56:31 +0800637 if [[ -n ${last_ramdisk_module} ]]; then
638 last_ramdisk_module_line=`sed -n "/${last_ramdisk_module}/=" ${install_temp}`
639 for line in ${last_ramdisk_module_line}; do
640 ramdisk_last_line=${line}
641 done
642 else
643 ramdisk_last_line=1
644 fi
wanwei.jiangf73b2202022-07-23 16:00:44 +0800645 export ramdisk_last_line
Wanwei Jiang571dde62022-11-17 14:37:41 +0800646
647 if [[ -n ${ANDROID_PROJECT} ]]; then
648 recovery_module_i=${#RECOVERY_MODULES_LOAD_LIST[@]}
qinglin.lidba324f2023-03-02 19:56:21 +0800649 #when RECOVERY_MODULES_LOAD_LIST is NULL
650 if [ ${#RECOVERY_MODULES_LOAD_LIST[@]} -eq 0 ]; then
651 last_recovery_module=${last_ramdisk_module}
652 fi
Wanwei Jiang571dde62022-11-17 14:37:41 +0800653 while [ ${recovery_module_i} -gt 0 ]; do
654 let recovery_module_i--
655 echo recovery_module_i=$recovery_module_i ${RECOVERY_MODULES_LOAD_LIST[${recovery_module_i}]}
656 if [[ `grep "${RECOVERY_MODULES_LOAD_LIST[${recovery_module_i}]}" ${recovery_install_temp}` ]]; then
657 last_recovery_module=${RECOVERY_MODULES_LOAD_LIST[${recovery_module_i}]}
658 break;
659 fi
660 done
661 # last_recovery_module=${RECOVERY_MODULES_LOAD_LIST[${#RECOVERY_MODULES_LOAD_LIST[@]}-1]}
qinglin.libce54712023-05-08 13:56:31 +0800662 if [[ -n ${last_recovery_module} ]]; then
663 last_recovery_module_line=`sed -n "/${last_recovery_module}/=" ${recovery_install_temp}`
664 for line in ${last_recovery_module_line}; do
665 recovery_last_line=${line}
666 done
667 else
668 recovery_last_line=1
669 fi
Wanwei Jiang571dde62022-11-17 14:37:41 +0800670 sed -n "${ramdisk_last_line},${recovery_last_line}p" ${recovery_install_temp} > recovery_install.sh
qinglin.libce54712023-05-08 13:56:31 +0800671 if [[ -n ${last_ramdisk_module} ]]; then
672 sed -i "1d" recovery_install.sh
673 fi
Wanwei Jiang571dde62022-11-17 14:37:41 +0800674 mkdir recovery
675 cat recovery_install.sh | cut -d ' ' -f 2 > recovery/recovery_modules.order
qinglin.lidba324f2023-03-02 19:56:21 +0800676 if [ ${#RECOVERY_MODULES_LOAD_LIST[@]} -ne 0 ]; then
677 cat recovery_install.sh | cut -d ' ' -f 2 | xargs cp -t recovery/
678 fi
Wanwei Jiang571dde62022-11-17 14:37:41 +0800679 sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' recovery_install.sh
680 echo "echo Install recovery modules success!" >> recovery_install.sh
681 chmod 755 recovery_install.sh
682 mv recovery_install.sh recovery/
683 fi
684
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800685 head -n ${ramdisk_last_line} ${install_temp} > ramdisk_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800686 mkdir ramdisk
wanwei.jiangf73b2202022-07-23 16:00:44 +0800687 cat ramdisk_install.sh | cut -d ' ' -f 2 > ramdisk/ramdisk_modules.order
wanwei.jiang50759e12022-03-24 12:36:17 +0800688 cat ramdisk_install.sh | cut -d ' ' -f 2 | xargs mv -t ramdisk/
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800689
qinglin.lie5b951e2022-06-07 16:13:44 +0800690 sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' ramdisk_install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800691 echo "echo Install ramdisk modules success!" >> ramdisk_install.sh
692 chmod 755 ramdisk_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800693 mv ramdisk_install.sh ramdisk/
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800694
695 file_last_line=`sed -n "$=" ${install_temp}`
696 let line=${file_last_line}-${ramdisk_last_line}
697 tail -n ${line} ${install_temp} > vendor_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800698 mkdir vendor
wanwei.jiangf73b2202022-07-23 16:00:44 +0800699 cat vendor_install.sh | cut -d ' ' -f 2 > vendor/vendor_modules.order
wanwei.jiang50759e12022-03-24 12:36:17 +0800700 cat vendor_install.sh | cut -d ' ' -f 2 | xargs mv -t vendor/
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800701
qinglin.lie5b951e2022-06-07 16:13:44 +0800702 sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' vendor_install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800703 echo "echo Install vendor modules success!" >> vendor_install.sh
704 chmod 755 vendor_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800705 mv vendor_install.sh vendor/
wanwei.jiangb12abc82021-12-25 22:17:10 +0800706}
707
wanwei.jiang612a8882021-11-23 17:12:23 +0800708function modules_install() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800709 arg1=$1
710
Wanwei Jiang2218b892023-03-17 17:31:21 +0800711 export OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR:-$(readlink -m ${COMMON_OUT_DIR}/amlogic)}
712 echo $OUT_AMLOGIC_DIR
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800713 rm -rf ${OUT_AMLOGIC_DIR}
714 mkdir -p ${OUT_AMLOGIC_DIR}
715 mkdir -p ${OUT_AMLOGIC_DIR}/modules
716 mkdir -p ${OUT_AMLOGIC_DIR}/ext_modules
Wanwei Jiangae4d7c12023-02-17 19:22:04 +0800717 mkdir -p ${OUT_AMLOGIC_DIR}/symbols
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800718
Wanwei Jiang2218b892023-03-17 17:31:21 +0800719 if [[ ${BAZEL} == "1" ]]; then
720 local output="out/bazel/output_user_root"
721 for dir in `ls ${output}`; do
722 if [[ ${dir} =~ ^[0-9A-Fa-f]*$ ]]; then
723 digit_output=${output}/${dir}
724 break
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800725 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800726 done
727
Wanwei Jiang0df84602023-05-05 14:40:42 +0800728 while read module
729 do
Wanwei Jiang475245b2023-05-10 21:06:52 +0800730 module_name=${module##*/}
Wanwei Jiang0df84602023-05-05 14:40:42 +0800731 if [[ `echo ${module} | grep "^kernel\/"` ]]; then
732 if [[ -f ${DIST_DIR}/${module_name} ]]; then
733 cp ${DIST_DIR}/${module_name} ${OUT_AMLOGIC_DIR}/modules
734 else
735 module=`find ${digit_output}/execroot/ -name ${module_name} | grep "amlogic"`
736 cp ${module} ${OUT_AMLOGIC_DIR}/modules
737 fi
738 elif [[ `echo ${module} | grep "^extra\/"` ]]; then
739 cp ${DIST_DIR}/${module_name} ${OUT_AMLOGIC_DIR}/ext_modules
Wanwei Jiang2218b892023-03-17 17:31:21 +0800740 else
Wanwei Jiang0df84602023-05-05 14:40:42 +0800741 echo "warning unrecognized module: ${module}"
Wanwei Jiang2218b892023-03-17 17:31:21 +0800742 fi
Wanwei Jiang0df84602023-05-05 14:40:42 +0800743 done < ${DIST_DIR}/modules.load
Wanwei Jiang2218b892023-03-17 17:31:21 +0800744
745 dep_file=`find ${digit_output}/execroot/ -name *.dep | grep "amlogic"`
746 cp ${dep_file} ${OUT_AMLOGIC_DIR}/modules/full_modules.dep
Wanwei Jiang0df84602023-05-05 14:40:42 +0800747 grep -E "^kernel\/" ${dep_file} > ${OUT_AMLOGIC_DIR}/modules/modules.dep
Wanwei Jiang2218b892023-03-17 17:31:21 +0800748 touch ${module} ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
749 for order_file in `find ${digit_output}/execroot/ -name "modules.order.*" | grep "amlogic"`; do
750 echo "# ${order_file}" >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
751 cat ${order_file} >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
752 echo >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
753 done
754 else
755 local MODULES_ROOT_DIR=$(echo ${MODULES_STAGING_DIR}/lib/modules/*)
756 pushd ${MODULES_ROOT_DIR}
757 local common_drivers=${COMMON_DRIVERS_DIR##*/}
758 local modules_list=$(find -type f -name "*.ko")
759 for module in ${modules_list}; do
760 if [[ -n ${ANDROID_PROJECT} ]]; then # copy internal build modules
761 if [[ `echo ${module} | grep -E "\.\/kernel\/|\/${common_drivers}\/"` ]]; then
762 cp ${module} ${OUT_AMLOGIC_DIR}/modules/
763 else
764 cp ${module} ${OUT_AMLOGIC_DIR}/ext_modules/
765 fi
766 else # copy all modules, include external modules
767 cp ${module} ${OUT_AMLOGIC_DIR}/modules/
768 fi
769 done
770
771 if [[ -n ${ANDROID_PROJECT} ]]; then # internal build modules
772 grep -E "^kernel\/|^${common_drivers}\/" modules.dep > ${OUT_AMLOGIC_DIR}/modules/modules.dep
773 else # all modules, include external modules
774 cp modules.dep ${OUT_AMLOGIC_DIR}/modules
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800775 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800776 popd
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800777 fi
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800778 pushd ${OUT_AMLOGIC_DIR}/modules
wanwei.jiang612a8882021-11-23 17:12:23 +0800779 sed -i 's#[^ ]*/##g' modules.dep
780
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800781 adjust_sequence_modules_loading "${arg1[*]}"
wanwei.jiangb12abc82021-12-25 22:17:10 +0800782
wanwei.jiang5c8d2b62021-11-26 20:36:33 +0800783 touch __install.sh
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800784 touch modules.order
wanwei.jiang612a8882021-11-23 17:12:23 +0800785 for loop in `cat modules.dep | sed 's/:.*//'`; do
786 mod_probe $loop
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800787 echo $loop >> modules.order
wanwei.jiang612a8882021-11-23 17:12:23 +0800788 echo insmod $loop >> __install.sh
789 done
790
791 cat __install.sh | awk ' {
792 if (!cnt[$2]) {
793 print $0;
794 cnt[$2]++;
795 }
796 }' > __install.sh.tmp
797
Wanwei Jiangbf119d22022-10-27 09:49:49 +0800798 cp modules.order modules.order.back
799 cut -d ' ' -f 2 __install.sh.tmp > modules.order
Wanwei Jiang571dde62022-11-17 14:37:41 +0800800
801 if [[ -n ${ANDROID_PROJECT} ]]; then
802 touch __install_recovery.sh
803 touch modules_recovery.order
804 for loop in `cat modules_recovery.dep | sed 's/:.*//'`; do
805 mod_probe_recovery $loop
806 echo $loop >> modules_recovery.order
807 echo insmod $loop >> __install_recovery.sh
808 done
809
810 cat __install_recovery.sh | awk ' {
811 if (!cnt[$2]) {
812 print $0;
813 cnt[$2]++;
814 }
815 }' > __install_recovery.sh.tmp
816
817 cut -d ' ' -f 2 __install_recovery.sh.tmp > modules_recovery.order
818 fi
819 create_ramdisk_vendor_recovery __install.sh.tmp __install_recovery.sh.tmp
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800820
Dezhen Wang124ad7d2023-02-06 15:35:14 +0800821 if [[ -n ${MANUAL_INSMOD_MODULE} ]]; then
822 install_file=manual_install.sh
823 else
824 install_file=install.sh
825 fi
826 echo "#!/bin/sh" > ${install_file}
827 echo "cd ramdisk" >> ${install_file}
828 echo "./ramdisk_install.sh" >> ${install_file}
829 echo "cd ../vendor" >> ${install_file}
830 echo "./vendor_install.sh" >> ${install_file}
831 echo "cd ../" >> ${install_file}
832 chmod 755 ${install_file}
wanwei.jiang612a8882021-11-23 17:12:23 +0800833
834 echo "/modules/: all `wc -l modules.dep | awk '{print $1}'` modules."
Wanwei Jianga5977bd2022-08-24 22:43:40 +0800835 rm __install.sh __install.sh.tmp
wanwei.jiang612a8882021-11-23 17:12:23 +0800836
Wanwei Jiang571dde62022-11-17 14:37:41 +0800837 if [[ -n ${ANDROID_PROJECT} ]]; then
838 rm __install_recovery.sh __install_recovery.sh.tmp
839 fi
840
wanwei.jiang236e9a32021-12-07 16:34:14 +0800841 popd
Wanwei Jiangae4d7c12023-02-17 19:22:04 +0800842
Wanwei Jiang2218b892023-03-17 17:31:21 +0800843 if [[ ${BAZEL} == "1" ]]; then
844 cp ${DIST_DIR}/vmlinux ${OUT_AMLOGIC_DIR}/symbols
845
846 find ${digit_output}/execroot -name *.ko | grep "unstripped" | while read module; do
847 cp ${module} ${OUT_AMLOGIC_DIR}/symbols
848 chmod +w ${OUT_AMLOGIC_DIR}/symbols/$(basename ${module})
849 done
850 chmod -w ${OUT_AMLOGIC_DIR}/symbols/*.ko
851 else
852 cp ${OUT_DIR}/vmlinux ${OUT_AMLOGIC_DIR}/symbols
853 find ${OUT_DIR} -type f -name "*.ko" -exec cp {} ${OUT_AMLOGIC_DIR}/symbols \;
854 for ext_module in ${EXT_MODULES}; do
855 find ${COMMON_OUT_DIR}/${ext_module} -type f -name "*.ko" -exec cp {} ${OUT_AMLOGIC_DIR}/symbols \;
856 done
857 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800858}
wanwei.jiang236e9a32021-12-07 16:34:14 +0800859export -f modules_install
wanwei.jiang612a8882021-11-23 17:12:23 +0800860
Wanwei Jiang2218b892023-03-17 17:31:21 +0800861function rename_external_module_name() {
862 local external_coppied
863 local vendor_coppied
Wanwei Jiang92c89432023-05-15 23:57:16 +0800864 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 +0800865 target_module_name=`echo ${module_line%%:*} | sed '/^#/d;/^$/d'`
866 modules_name=`echo ${module_line##:*} | sed '/^#/d;/^$/d'`
867 [[ -f ${OUT_AMLOGIC_DIR}/ext_modules/${target_module_name} ]] && external_coppied=1
868 [[ -f ${OUT_AMLOGIC_DIR}/modules/vendor/${target_module_name} ]] && vendor_coppied=1
869 echo target_module_name=$target_module_name modules_name=$modules_name external_coppied=$external_coppied vendor_coppied=$vendor_coppied
870 for module in ${modules_name}; do
871 echo module=$module
872 if [[ -f ${OUT_AMLOGIC_DIR}/ext_modules/${module} ]]; then
873 if [[ -z ${external_coppied} ]]; then
874 cp ${OUT_AMLOGIC_DIR}/ext_modules/${module} ${OUT_AMLOGIC_DIR}/ext_modules/${target_module_name}
875 external_coppied=1
876 fi
877 rm -f ${OUT_AMLOGIC_DIR}/ext_modules/${module}
878 fi
879 if [[ -f ${OUT_AMLOGIC_DIR}/modules/vendor/${module} ]]; then
880 if [[ -z ${vendor_coppied} ]]; then
881 cp ${OUT_AMLOGIC_DIR}/modules/vendor/${module} ${OUT_AMLOGIC_DIR}/modules/vendor/${target_module_name}
882 vendor_coppied=1
883 fi
884 rm -f ${OUT_AMLOGIC_DIR}/modules/vendor/${module}
885 fi
886 done
887 external_coppied=
888 vendor_coppied=
889 done
890}
891export -f rename_external_module_name
892
Dezhen Wang5ad119c2023-05-04 15:07:49 +0800893# function rebuild_rootfs can rebuild the rootfs if rootfs_base.cpio.gz.uboot exist
wanwei.jiang612a8882021-11-23 17:12:23 +0800894function rebuild_rootfs() {
Wanwei Jiang2218b892023-03-17 17:31:21 +0800895 echo
896 echo "========================================================"
897 if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then
898 echo "Rebuild rootfs in order to install modules!"
899 else
900 echo "There's no file ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot, so don't rebuild rootfs!"
901 return
902 fi
903
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800904 pushd ${OUT_AMLOGIC_DIR}
wanwei.jiang612a8882021-11-23 17:12:23 +0800905
Lei Zhang475c17b2022-03-03 11:08:50 +0800906 local ARCH=arm64
907 if [[ -n $1 ]]; then
908 ARCH=$1
909 fi
910
wanwei.jiang612a8882021-11-23 17:12:23 +0800911 rm rootfs -rf
912 mkdir rootfs
Wanwei Jiang2218b892023-03-17 17:31:21 +0800913 cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot rootfs
wanwei.jiang612a8882021-11-23 17:12:23 +0800914 cd rootfs
915 dd if=rootfs_base.cpio.gz.uboot of=rootfs_base.cpio.gz bs=64 skip=1
916 gunzip rootfs_base.cpio.gz
917 mkdir rootfs
918 cd rootfs
dongqing.li6fd83502023-06-15 09:59:40 +0800919 fakeroot cpio -i -F ../rootfs_base.cpio
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800920 if [ -d ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer ]; then
921 cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer . -rf
qinglin.li3c25dbb2022-01-14 11:23:10 +0800922 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800923 cp -rf ../../modules .
wanwei.jiang8abddcc2022-03-16 21:18:48 +0800924
dongqing.li6fd83502023-06-15 09:59:40 +0800925 find . | fakeroot cpio -o -H newc | gzip > ../rootfs_new.cpio.gz
wanwei.jiang612a8882021-11-23 17:12:23 +0800926 cd ../
Lei Zhang475c17b2022-03-03 11:08:50 +0800927 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 +0800928 mv rootfs_new.cpio.gz.uboot ../
929 cd ../
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800930 cp rootfs_new.cpio.gz.uboot ${DIST_DIR}
wanwei.jiang612a8882021-11-23 17:12:23 +0800931
932 popd
933}
934export -f rebuild_rootfs
wanwei.jiang403c9942021-11-30 18:29:02 +0800935
Dezhen Wang5ad119c2023-05-04 15:07:49 +0800936# function check_undefined_symbol can check the dependence among the modules
937# parameter:
938# --modules_depend
wanwei.jiang403c9942021-11-30 18:29:02 +0800939function check_undefined_symbol() {
Wanwei Jiang2218b892023-03-17 17:31:21 +0800940 if [[ ${MODULES_DEPEND} != "1" ]]; then
941 return
942 fi
943
944 echo "========================================================"
945 echo "print modules depend"
946
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800947 pushd ${OUT_AMLOGIC_DIR}/modules
wanwei.jiang403c9942021-11-30 18:29:02 +0800948 echo
949 echo "========================================================"
950 echo "Functions or variables not defined in this module refer to which module."
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800951 if [[ -n ${LLVM} ]]; then
952 compile_tool=${ROOT_DIR}/${CLANG_PREBUILT_BIN}/llvm-
953 elif [[ -n ${CROSS_COMPILE} ]]; then
954 compile_tool=${CROSS_COMPILE}
955 else
956 echo "can't find compile tool"
957 fi
Wanwei Jiang0a74fb12022-12-09 16:27:40 +0800958 ${compile_tool}nm ${DIST_DIR}/vmlinux | grep -E " T | D | B | R | W "> vmlinux_T.txt
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800959 # cat __install.sh | grep "insmod" | cut -d ' ' -f 2 > module_list.txt
960 cat ramdisk/ramdisk_install.sh | grep "insmod" | cut -d ' ' -f 2 > module_list.txt
961 cat vendor/vendor_install.sh | grep "insmod" | cut -d ' ' -f 2 >> module_list.txt
962 cp ramdisk/*.ko .
963 cp vendor/*.ko .
wanwei.jiang403c9942021-11-30 18:29:02 +0800964 while read LINE
965 do
966 echo ${LINE}
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800967 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 +0800968 do
969 #echo ${U}
970 U_v=`grep -w ${U} vmlinux_T.txt`
971 in_vmlinux=0
972 if [ -n "${U_v}" ];
973 then
wanwei.jiangd7b29ef2021-12-01 19:59:41 +0800974 #printf "\t%-50s <== vmlinux\n" ${U}
wanwei.jiang403c9942021-11-30 18:29:02 +0800975 in_vmlinux=1
976 continue
977 fi
978 in_module=0
979 MODULE=
980 while read LINE1
981 do
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800982 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 +0800983 if [ -n "${U_m}" ];
984 then
985 in_module=1
986 MODULE=${LINE1}
987 fi
988 done < module_list.txt
989 if [ ${in_module} -eq "1" ];
990 then
991 printf "\t%-50s <== %s\n" ${U} ${MODULE}
992 continue
993 else
994 printf "\t%-50s <== none\n" ${U}
995 fi
996 done
997 echo
998 echo
999 done < module_list.txt
1000 rm vmlinux_T.txt
1001 rm module_list.txt
wanwei.jiang2c818dc2022-03-24 17:48:00 +08001002 rm *.ko
wanwei.jiang403c9942021-11-30 18:29:02 +08001003 popd
1004}
1005export -f check_undefined_symbol
Dezhen Wangd40fa552023-04-11 16:13:27 +08001006
1007function reorganized_abi_symbol_list_file() { # delete the extra information but symbol
1008 cat $@ | sed '/^$/d' >> ${symbol_tmp} # remove blank lines
1009 sed -i '/^\[/d' ${symbol_tmp} # remove the title
1010 sed -i '/^\#/d' ${symbol_tmp} # remove the comment
1011}
1012export -f reorganized_abi_symbol_list_file
1013
1014function abi_symbol_list_detect () { # detect symbol information that should be submitted or fix
1015 symbol_file1=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic
1016 symbol_file2=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.10
1017 symbol_file3=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.debug
1018 symbol_file4=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.illegal
1019
1020 file_list=("${symbol_file1} ${symbol_file2} ${symbol_file3} ${symbol_file4}")
1021 for file in ${file_list}
1022 do
1023 local symbol_tmp=`mktemp tmp.XXXXXXXXXXXX`
1024 reorganized_abi_symbol_list_file "${file}"
1025
1026 if [[ -s ${symbol_tmp} ]]; then
1027 if [[ ${file} =~ abi_gki_aarch64_amlogic.illegal ]]; then
1028 echo "WARNING: The symbols in ${file} are illegal, please deal with them as soon as possible!!!"
1029 else
1030 echo "WARNING: The symbols in ${file} should be submit to google!!!"
1031 fi
1032 cat ${symbol_tmp}
1033 echo -e "\n------------------------------------------------------------"
1034 fi
1035 rm ${symbol_tmp}
1036 done
1037}
1038export -f abi_symbol_list_detect
1039
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001040# adjust_config_action concerns three types of cmd:
1041# parameters:
1042# --menuconfig: make menuconfig manually based on different gki standard
1043# --basicconfig: only config kernel with google original gki_defconfig as base
1044# --check_defconfig: contrast the defconfig generated in out directory with gki_defconfig and show the difference
1045function adjust_config_action () {
1046 if [[ -n ${MENUCONFIG} ]] || [[ -n ${BASICCONFIG} ]] || [[ ${CHECK_DEFCONFIG} -eq "1" ]]; then
1047 # ${ROOT_DIR}/${BUILD_DIR}/config.sh menuconfig
1048 HERMETIC_TOOLCHAIN=0
1049 source "${ROOT_DIR}/${BUILD_DIR}/build_utils.sh"
1050 source "${ROOT_DIR}/${BUILD_DIR}/_setup_env.sh"
1051
1052 orig_config=$(mktemp)
1053 orig_defconfig=$(mktemp)
1054 out_config="${OUT_DIR}/.config"
1055 out_defconfig="${OUT_DIR}/defconfig"
1056 changed_config=$(mktemp)
1057 changed_defconfig=$(mktemp)
1058
1059 if [[ -n ${BASICCONFIG} ]]; then # config kernel with gki_defconfig or make menuconfig based on it
1060 set -x
1061 defconfig_name=`basename ${GKI_BASE_CONFIG}`
1062 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${defconfig_name})
1063 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1064 cp ${out_config} ${orig_config}
1065 cp ${out_defconfig} ${orig_defconfig}
1066 if [ "${BASICCONFIG}" = "m" ]; then # make menuconfig based on gki_defconfig
1067 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" menuconfig)
1068 fi
1069 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1070 ${KERNEL_DIR}/scripts/diffconfig ${orig_config} ${out_config} > ${changed_config}
1071 ${KERNEL_DIR}/scripts/diffconfig ${orig_defconfig} ${out_defconfig} > ${changed_defconfig}
1072 if [ "${ARCH}" = "arm" ]; then
1073 cp ${out_defconfig} ${GKI_BASE_CONFIG}
1074 fi
1075 set +x # show the difference between the gki_defconfig and the config after make menuconfig
1076 echo
1077 echo "========================================================"
1078 echo "==================== .config diff ===================="
1079 cat ${changed_config}
1080 echo "==================== defconfig diff ===================="
1081 cat ${changed_defconfig}
1082 echo "========================================================"
1083 echo
1084 elif [[ ${CHECK_DEFCONFIG} -eq "1" ]]; then # compare the defconfig generated in out directory with gki_defconfig
1085 set -x
1086 pre_defconfig_cmds
1087 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
1088 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig) # export the defconfig to out directory
1089 diff -u ${ROOT_DIR}/${GKI_BASE_CONFIG} ${OUT_DIR}/defconfig
1090 post_defconfig_cmds
1091 set +x
1092 else # make menuconfig based on config with different gki standard
1093 set -x
1094 pre_defconfig_cmds
1095 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
1096 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1097 cp ${out_config} ${orig_config}
1098 cp ${out_defconfig} ${orig_defconfig}
1099 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" menuconfig)
1100 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1101 ${KERNEL_DIR}/scripts/diffconfig ${orig_config} ${out_config} > ${changed_config}
1102 ${KERNEL_DIR}/scripts/diffconfig ${orig_defconfig} ${out_defconfig} > ${changed_defconfig}
1103 post_defconfig_cmds
1104 set +x
1105 echo
1106 echo "========================================================"
1107 echo "if the config follows GKI2.0, please add it to the file amlogic_gki.fragment manually"
1108 echo "if the config follows GKI1.0 optimize, please add it to the file amlogic_gki.10 manually"
1109 echo "if the config follows GKI1.0 debug, please add it to the file amlogic_gki.debug manually"
1110 echo "==================== .config diff ===================="
1111 cat ${changed_config}
1112 echo "==================== defconfig diff ===================="
1113 cat ${changed_defconfig}
1114 echo "========================================================"
1115 echo
1116 fi
1117 rm -f ${orig_config} ${changed_config} ${orig_defconfig} ${changed_defconfig}
1118 exit
1119 fi
1120}
1121export -f adjust_config_action
1122
1123# function build_part_of_kernel can only build part of kernel such as image modules or dtbs
1124# parameter:
1125# --image: only build image
1126# --modules: only build kernel modules
1127# --dtbs: only build dtbs
1128function build_part_of_kernel () {
1129 if [[ -n ${IMAGE} ]] || [[ -n ${MODULES} ]] || [[ -n ${DTB_BUILD} ]]; then
1130 old_path=${PATH}
1131 source "${ROOT_DIR}/${BUILD_DIR}/build_utils.sh"
1132 source "${ROOT_DIR}/${BUILD_DIR}/_setup_env.sh"
1133
1134 if [[ ! -f ${OUT_DIR}/.config ]]; then
1135 pre_defconfig_cmds
1136 set -x
1137 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
1138 set +x
1139 post_defconfig_cmds
1140 fi
1141
1142 if [[ -n ${IMAGE} ]]; then
1143 set -x
1144 if [ "${ARCH}" = "arm64" ]; then
1145 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) Image)
1146 elif [ "${ARCH}" = "arm" ]; then
1147 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) LOADADDR=0x108000 uImage)
1148 fi
1149 set +x
1150 fi
1151 mkdir -p ${DIST_DIR}
1152 if [[ -n ${DTB_BUILD} ]]; then
1153 set -x
1154 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) dtbs)
1155 set +x
1156 fi
1157 if [[ -n ${MODULES} ]]; then
1158 export MODULES_STAGING_DIR=$(readlink -m ${COMMON_OUT_DIR}/staging)
1159 rm -rf ${MODULES_STAGING_DIR}
1160 mkdir -p ${MODULES_STAGING_DIR}
1161 if [ "${DO_NOT_STRIP_MODULES}" != "1" ]; then
1162 MODULE_STRIP_FLAG="INSTALL_MOD_STRIP=1"
1163 fi
1164 if [[ `grep "CONFIG_AMLOGIC_IN_KERNEL_MODULES=y" ${ROOT_DIR}/${FRAGMENT_CONFIG}` ]]; then
1165 set -x
1166 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) modules)
1167 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} INSTALL_MOD_PATH=${MODULES_STAGING_DIR} "${MAKE_ARGS[@]}" modules_install)
1168 set +x
1169 fi
1170 echo EXT_MODULES=$EXT_MODULES
1171 prepare_module_build
1172 if [[ -z "${SKIP_EXT_MODULES}" ]] && [[ -n "${EXT_MODULES}" ]]; then
1173 echo "========================================================"
1174 echo " Building external modules and installing them into staging directory"
1175 KERNEL_UAPI_HEADERS_DIR=$(readlink -m ${COMMON_OUT_DIR}/kernel_uapi_headers)
1176 for EXT_MOD in ${EXT_MODULES}; do
1177 EXT_MOD_REL=$(rel_path ${ROOT_DIR}/${EXT_MOD} ${KERNEL_DIR})
1178 mkdir -p ${OUT_DIR}/${EXT_MOD_REL}
1179 set -x
1180 make -C ${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1181 O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}"
1182 make -C ${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1183 O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} \
1184 INSTALL_MOD_PATH=${MODULES_STAGING_DIR} \
1185 INSTALL_MOD_DIR="extra/${EXT_MOD}" \
1186 INSTALL_HDR_PATH="${KERNEL_UAPI_HEADERS_DIR}/usr" \
1187 "${MAKE_ARGS[@]}" modules_install
1188 set +x
1189 done
1190 fi
1191 export OUT_AMLOGIC_DIR=$(readlink -m ${COMMON_OUT_DIR}/amlogic)
1192 set -x
1193 extra_cmds
1194 set +x
1195 MODULES=$(find ${MODULES_STAGING_DIR} -type f -name "*.ko")
1196 cp -p ${MODULES} ${DIST_DIR}
1197
1198 new_path=${PATH}
1199 PATH=${old_path}
1200 echo "========================================================"
1201 if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then
1202 echo "Rebuild rootfs in order to install modules!"
1203 rebuild_rootfs ${ARCH}
1204 else
1205 echo "There's no file ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot, so don't rebuild rootfs!"
1206 fi
1207 PATH=${new_path}
1208 fi
1209 if [ -n "${DTS_EXT_DIR}" ]; then
1210 if [ -d "${ROOT_DIR}/${DTS_EXT_DIR}" ]; then
1211 DTS_EXT_DIR=$(rel_path ${ROOT_DIR}/${DTS_EXT_DIR} ${KERNEL_DIR})
1212 if [ -d ${OUT_DIR}/${DTS_EXT_DIR} ]; then
1213 FILES="$FILES `ls ${OUT_DIR}/${DTS_EXT_DIR}`"
1214 fi
1215 fi
1216 fi
1217 for FILE in ${FILES}; do
1218 if [ -f ${OUT_DIR}/${FILE} ]; then
1219 echo " $FILE"
1220 cp -p ${OUT_DIR}/${FILE} ${DIST_DIR}/
1221 elif [[ "${FILE}" =~ \.dtb|\.dtbo ]] && \
1222 [ -n "${DTS_EXT_DIR}" ] && [ -f "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" ] ; then
1223 # DTS_EXT_DIR is recalculated before to be relative to KERNEL_DIR
1224 echo " $FILE"
1225 cp -p "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" "${DIST_DIR}/"
1226 else
1227 echo " $FILE is not a file, skipping"
1228 fi
1229 done
1230 exit
1231 fi
1232}
1233
1234export -f build_part_of_kernel
1235
1236function export_env_variable () {
1237 export ABI BUILD_CONFIG LTO KMI_SYMBOL_LIST_STRICT_MODE CHECK_DEFCONFIG MANUAL_INSMOD_MODULE ARCH
qinglin.libce54712023-05-08 13:56:31 +08001238 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 +08001239 export FULL_KERNEL_VERSION BAZEL
1240
1241 echo ROOT_DIR=$ROOT_DIR
1242 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 +08001243 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 +08001244 echo FULL_KERNEL_VERSION=${FULL_KERNEL_VERSION} BAZEL=${BAZEL}
1245 echo MENUCONFIG=${MENUCONFIG} BASICCONFIG=${BASICCONFIG} IMAGE=${IMAGE} MODULES=${MODULES} DTB_BUILD=${DTB_BUILD}
1246}
1247
1248export -f export_env_variable
Dezhen Wang850c0d22023-05-31 19:26:20 +08001249
1250function handle_input_parameters () {
1251 VA=
1252 ARGS=()
1253 for i in "$@"
1254 do
1255 case $i in
1256 --arch)
1257 ARCH=$2
1258 VA=1
1259 shift
1260 ;;
1261 --abi)
1262 ABI=1
1263 shift
1264 ;;
1265 --build_config)
1266 BUILD_CONFIG=$2
1267 VA=1
1268 shift
1269 ;;
1270 --lto)
1271 LTO=$2
1272 VA=1
1273 shift
1274 ;;
1275 --symbol_strict)
1276 KMI_SYMBOL_LIST_STRICT_MODE=$2
1277 VA=1
1278 shift
1279 ;;
1280 --menuconfig)
1281 MENUCONFIG=1
1282 shift
1283 ;;
1284 --basicconfig)
1285 if [ "$2" = "m" ] || [ "$2" = "n" ]; then
1286 BASICCONFIG=$2
1287 else
1288 BASICCONFIG="m"
1289 fi
1290 VA=1
1291 shift
1292 ;;
1293 --image)
1294 IMAGE=1
1295 shift
1296 ;;
1297 --modules)
1298 MODULES=1
1299 shift
1300 break
1301 ;;
1302 --dtbs)
1303 DTB_BUILD=1
1304 shift
1305 ;;
1306 --build_dir)
1307 BUILD_DIR=$2
1308 VA=1
1309 shift
1310 ;;
1311 --check_defconfig)
1312 CHECK_DEFCONFIG=1
1313 shift
1314 ;;
1315 --modules_depend)
1316 MODULES_DEPEND=1
1317 shift
1318 ;;
1319 --android_project)
1320 ANDROID_PROJECT=$2
1321 VA=1
1322 shift
1323 ;;
1324 --gki_20)
1325 GKI_CONFIG=gki_20
1326 shift
1327 ;;
1328 --gki_10)
1329 GKI_CONFIG=gki_10
1330 shift
1331 ;;
1332 --gki_debug)
1333 GKI_CONFIG=gki_debug
1334 shift
1335 ;;
1336 --fast_build)
1337 FAST_BUILD=1
1338 shift
1339 ;;
1340 --upgrade)
1341 UPGRADE_PROJECT=1
1342 ANDROID_VERSION=$2
1343 VA=1
1344 shift
1345 ;;
1346 --manual_insmod_module)
1347 MANUAL_INSMOD_MODULE=1
1348 shift
1349 ;;
Dezhen Wang850c0d22023-05-31 19:26:20 +08001350 --check_gki_20)
1351 CHECK_GKI_20=1
1352 GKI_CONFIG=gki_20
1353 LTO=none
1354 shift
1355 ;;
1356 --dev_config)
1357 DEV_CONFIGS=$2
1358 VA=1
1359 shift
1360 ;;
1361 --bazel)
1362 BAZEL=1
1363 shift
1364 ;;
1365 -h|--help)
1366 show_help
1367 exit 0
1368 ;;
1369 *)
1370 if [[ -n $1 ]];
1371 then
1372 if [[ -z ${VA} ]];
1373 then
1374 ARGS+=("$1")
1375 fi
1376 fi
1377 VA=
1378 shift
1379 ;;
1380 esac
1381 done
1382}
1383
1384export -f handle_input_parameters
1385
1386function set_default_parameters () {
1387 if [ "${ARCH}" = "arm" ]; then
1388 ARGS+=("LOADADDR=0x108000")
1389 else
1390 ARCH=arm64
1391 fi
1392
1393 if [[ -z "${ABI}" ]]; then
1394 ABI=0
1395 fi
1396 if [[ -z "${LTO}" ]]; then
1397 LTO=thin
1398 fi
1399 if [[ -n ${CHECK_GKI_20} && -z ${ANDROID_PROJECT} ]]; then
1400 ANDROID_PROJECT=ohm
1401 fi
1402
1403 if [[ -z "${BUILD_CONFIG}" ]]; then
1404 if [ "${ARCH}" = "arm64" ]; then
1405 BUILD_CONFIG=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic
1406 elif [ "${ARCH}" = "arm" ]; then
1407 BUILD_CONFIG=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic32
1408 fi
1409 fi
1410 if [[ -z "${BUILD_DIR}" ]]; then
1411 BUILD_DIR=build
1412 fi
1413
1414 version_message=$(grep -rn BRANCH= ${KERNEL_DIR}/build.config.constants)
1415 version_message="common${version_message##*android}"
1416 if [[ -n ${FULL_KERNEL_VERSION} ]]; then
1417 if [[ "${FULL_KERNEL_VERSION}" != "${version_message}" ]]; then
1418 echo "kernel version is not match!!"
1419 exit
1420 fi
1421 else
1422 FULL_KERNEL_VERSION=${version_message}
1423 fi
1424
1425 if [[ -z ${BAZEL} ]]; then
Dezhen Wang20069292023-06-20 14:51:21 +08001426 [[ "${FULL_KERNEL_VERSION}" != "common13-5.15" && "${ARCH}" == "arm64" && -z ${UPGRADE_PROJECT} ]] && BAZEL=1
Dezhen Wang850c0d22023-05-31 19:26:20 +08001427 fi
1428
1429 auto_patch_to_common_dir
1430
qinglin.lieafebcf2023-06-27 12:48:22 +08001431 if [[ ! -f ${BUILD_DIR}/build_abi.sh && ${BAZEL} == 0 ]]; then
Dezhen Wang850c0d22023-05-31 19:26:20 +08001432 echo "The directory of build does not exist";
1433 exit
1434 fi
1435
1436 ROOT_DIR=$(readlink -f $(dirname $0))
1437 if [[ ! -f ${ROOT_DIR}/${KERNEL_DIR}/init/main.c ]]; then
1438 ROOT_DIR=`pwd`
1439 if [[ ! -f ${ROOT_DIR}/${KERNEL_DIR}/init/main.c ]]; then
1440 echo "the file path of $0 is incorrect"
1441 exit
1442 fi
1443 fi
1444 export ROOT_DIR
1445
1446 CHECK_DEFCONFIG=${CHECK_DEFCONFIG:-0}
1447 MODULES_DEPEND=${MODULES_DEPEND:-0}
1448 if [[ ! -f ${KERNEL_BUILD_VAR_FILE} ]]; then
1449 export KERNEL_BUILD_VAR_FILE=`mktemp /tmp/kernel.XXXXXXXXXXXX`
1450 RM_KERNEL_BUILD_VAR_FILE=1
1451 fi
1452
1453 GKI_CONFIG=${GKI_CONFIG:-gki_debug}
1454
1455 export CROSS_COMPILE=
1456
1457 if [ "${ABI}" -eq "1" ]; then
1458 export OUT_DIR_SUFFIX="_abi"
1459 else
1460 OUT_DIR_SUFFIX=
1461 fi
1462}
1463
1464export -f set_default_parameters
1465
1466function auto_patch_to_common_dir () {
1467 #first auto patch when param parse end
Dezhen Wang850c0d22023-05-31 19:26:20 +08001468
1469 if [[ -f ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/auto_patch/auto_patch.sh ]]; then
1470 export PATCH_PARM
1471 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/auto_patch/auto_patch.sh ${FULL_KERNEL_VERSION}
1472 fi
1473
1474 if [[ ${ONLY_PATCH} -eq "1" ]]; then
1475 cd ${CURRENT_DIR}
1476 exit
1477 fi
1478}
1479
1480export -f auto_patch_to_common_dir
1481
1482
1483# the follow functions are used for smarthome
1484function handle_input_parameters_for_smarthome () {
1485 VA=
1486 ARGS=()
1487 for i in "$@"
1488 do
1489 case $i in
1490 --savedefconfig)
1491 SAVEDEFCONFIG=1
1492 shift
1493 ;;
1494 --menuconfig)
1495 MENUCONFIG=1
1496 shift
1497 ;;
1498 --dtb)
1499 DTB=1
1500 shift
1501 ;;
1502 --manual_insmod_module)
1503 MANUAL_INSMOD_MODULE=1
1504 shift
1505 ;;
1506 --patch)
1507 ONLY_PATCH=1
1508 shift
1509 ;;
1510 -h|--help)
1511 show_help
1512 exit 0
1513 ;;
1514 *)
1515 if [[ -n $1 ]];
1516 then
1517 if [[ -z ${VA} ]];
1518 then
1519 ARGS+=("$1")
1520 fi
1521 fi
1522 VA=
1523 shift
1524 ;;
1525 esac
1526 done
1527}
1528
1529export -f handle_input_parameters_for_smarthome
1530
1531function set_default_parameters_for_smarthome () {
1532 version_message=$(grep -rn BRANCH= ${KERNEL_DIR}/build.config.constants)
1533 version_message="common${version_message##*android}"
1534 if [[ -n ${FULL_KERNEL_VERSION} ]]; then
1535 if [[ "${FULL_KERNEL_VERSION}" != "${version_message}" ]]; then
1536 echo "kernel version is not match!!"
1537 exit
1538 fi
1539 else
1540 FULL_KERNEL_VERSION=${version_message}
1541 fi
1542
1543 tool_args=()
1544 prebuilts_paths=(
1545 CLANG_PREBUILT_BIN
1546 #BUILDTOOLS_PREBUILT_BIN
1547 )
1548 echo CC_CLANG=$CC_CLANG
1549 if [[ $CC_CLANG -eq "1" ]]; then
1550 source ${ROOT_DIR}/${KERNEL_DIR}/build.config.common
1551 if [[ -n "${LLVM}" ]]; then
1552 tool_args+=("LLVM=1")
1553 fi
1554 #if [ -n "${DTC}" ]; then
1555 # tool_args+=("DTC=${DTC}")
1556 #fi
1557 for prebuilt_bin in "${prebuilts_paths[@]}"; do
1558 prebuilt_bin=\${${prebuilt_bin}}
1559 eval prebuilt_bin="${prebuilt_bin}"
1560 if [ -n "${prebuilt_bin}" ]; then
1561 PATH=${PATH//"${ROOT_DIR}\/${prebuilt_bin}:"}
1562 PATH=${ROOT_DIR}/${prebuilt_bin}:${PATH} # add the clang tool to env PATH
1563 fi
1564 done
1565 export PATH
1566 elif [[ -n $CROSS_COMPILE_TOOL ]]; then
1567 export CROSS_COMPILE=${CROSS_COMPILE_TOOL}
1568 fi
1569
1570 if [[ $ARCH == arm64 ]]; then
1571 OUTDIR=${ROOT_DIR}/out/kernel-5.15-64
1572 elif [[ $ARCH == arm ]]; then
1573 OUTDIR=${ROOT_DIR}/out/kernel-5.15-32
1574 tool_args+=("LOADADDR=0x208000")
1575 elif [[ $ARCH == riscv ]]; then
1576 OUTDIR=${ROOT_DIR}/out/riscv-kernel-5.15-64
1577 fi
1578 TOOL_ARGS="${tool_args[@]}"
1579
1580 OUT_DIR=${OUTDIR}/common
1581 mkdir -p ${OUT_DIR}
1582 if [ "${SKIP_RM_OUTDIR}" != "1" ] ; then
1583 rm -rf ${OUTDIR}
1584 fi
1585
1586 echo "========================================================"
1587 echo ""
1588 export DIST_DIR=$(readlink -m ${OUTDIR}/dist)
1589 export MODULES_STAGING_DIR=$(readlink -m ${OUTDIR}/staging)
1590 export OUT_AMLOGIC_DIR=$(readlink -m ${OUTDIR}/amlogic)
1591 echo OUTDIR=$OUTDIR DIST_DIR=$DIST_DIR MODULES_STAGING_DIR=$MODULES_STAGING_DIR KERNEL_DIR=$KERNEL_DIR
1592
1593
1594 source ${ROOT_DIR}/build/kernel/build_utils.sh
1595
1596 DTS_EXT_DIR=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/boot/dts/amlogic
1597 DTS_EXT_DIR=$(rel_path ${ROOT_DIR}/${DTS_EXT_DIR} ${KERNEL_DIR})
1598 export dtstree=${DTS_EXT_DIR}
1599 export DTC_INCLUDE=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/include
1600
1601 EXT_MODULES="
1602 ${EXT_MODULES}
1603 "
1604
1605 EXT_MODULES_CONFIG="
1606 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/ext_modules_config
1607 "
1608
1609 EXT_MODULES_PATH="
1610 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/ext_modules_path
1611 "
1612
1613 POST_KERNEL_BUILD_CMDS="prepare_module_build"
1614 EXTRA_CMDS="extra_cmds"
1615
1616 IN_KERNEL_MODULES=1
1617}
1618
1619export -f set_default_parameters_for_smarthome
1620
1621function savedefconfig_cmd_for_smarthome () {
1622 if [[ -n ${SAVEDEFCONFIG} ]]; then
1623 set -x
1624 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${DEFCONFIG}
1625 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} savedefconfig
1626 rm ${KERNEL_DIR}/arch/${ARCH}/configs/${DEFCONFIG}
1627 cp -f ${OUT_DIR}/defconfig ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/configs/${DEFCONFIG}
1628 set +x
1629 exit
1630 fi
1631}
1632
1633export -f savedefconfig_cmd_for_smarthome
1634
1635function only_build_dtb_for_smarthome () {
1636 if [[ -n ${DTB} ]]; then
1637 set -x
1638 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
1639 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs || exit
1640 set +x
1641 exit
1642 fi
1643}
1644
1645export -f only_build_dtb_for_smarthome
1646
1647function make_menuconfig_cmd_for_smarthome () {
1648 if [[ -n ${MENUCONFIG} ]]; then
1649 set -x
1650 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${DEFCONFIG}
1651 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} menuconfig
1652 set +x
1653 exit
1654 fi
1655}
1656
1657export -f make_menuconfig_cmd_for_smarthome
1658
1659function build_kernel_for_different_cpu_architecture () {
1660 set -x
1661 if [[ $ARCH == arm64 ]]; then
1662 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
1663 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} headers_install &&
1664 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} Image -j12 &&
1665 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} modules -j12 &&
1666 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 &&
1667 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs -j12 || exit
1668 rm ${ROOT_DIR}/${KERNEL_DIR}/arch/arm64/configs/${DEFCONFIG}
1669 elif [[ $ARCH == arm ]]; then
1670 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
1671 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} headers_install &&
1672 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} uImage -j12 &&
1673 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} modules -j12 &&
1674 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 &&
1675 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs -j12 || exit
1676 rm ${ROOT_DIR}/${KERNEL_DIR}/arch/arm/configs/${DEFCONFIG}
1677 elif [[ $ARCH == riscv ]]; then
1678 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
1679 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} headers_install &&
1680 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} Image -j12 &&
1681 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} modules -j12 &&
1682 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} INSTALL_MOD_PATH=${MODULES_STAGING_DIR} modules_install -j12 &&
1683 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs -j12 || exit
1684 rm ${ROOT_DIR}/${KERNEL_DIR}/arch/riscv/configs/${DEFCONFIG}
1685 fi
1686 cp ${OUT_DIR}/arch/${ARCH}/boot/Image* ${DIST_DIR}
1687 cp ${OUT_DIR}/arch/${ARCH}/boot/uImage* ${DIST_DIR}
1688 cp ${OUT_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/boot/dts/amlogic/*.dtb ${DIST_DIR}
1689 cp ${OUT_DIR}/vmlinux ${DIST_DIR}
1690 set +x
1691}
1692
1693export -f build_kernel_for_different_cpu_architecture
1694
1695function build_ext_modules() {
1696 for EXT_MOD in ${EXT_MODULES}; do
1697 EXT_MOD_REL=$(rel_path ${ROOT_DIR}/${EXT_MOD} ${KERNEL_DIR})
1698 mkdir -p ${OUT_DIR}/${EXT_MOD_REL}
1699
1700 set -x
1701 make ARCH=${ARCH} -C ${ROOT_DIR}/${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1702 O=${OUT_DIR} ${TOOL_ARGS} -j12 || exit
1703 make ARCH=${ARCH} -C ${ROOT_DIR}/${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1704 O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} \
1705 INSTALL_MOD_PATH=${MODULES_STAGING_DIR} \
1706 INSTALL_MOD_DIR="extra/${EXT_MOD}" \
1707 INSTALL_MOD_STRIP=1 \
1708 modules_install -j12 || exit
1709 set +x
1710 done
1711}
1712
1713export -f build_ext_modules
1714
1715function copy_modules_and_rebuild_rootfs_for_smarthome () {
1716 MODULES=$(find ${MODULES_STAGING_DIR} -type f -name "*.ko")
1717 if [ -n "${MODULES}" ]; then
1718 if [ -n "${IN_KERNEL_MODULES}" -o -n "${EXT_MODULES}" -o -n "${EXT_MODULES_MAKEFILE}" ]; then
1719 echo "========================================================"
1720 echo " Copying modules files"
1721 for module in ${MODULES}; do
1722 cp ${module} ${DIST_DIR}
1723 done
1724 if [ "${COMPRESS_MODULES}" = "1" ]; then
1725 echo " Archiving modules to ${MODULES_ARCHIVE}"
1726 tar --transform="s,.*/,," -czf ${DIST_DIR}/${MODULES_ARCHIVE} ${MODULES[@]}
1727 fi
1728 fi
1729
1730 if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then
1731 echo "Rebuild rootfs in order to install modules!"
1732 rebuild_rootfs ${ARCH}
1733 echo "Build success!"
1734 else
1735 echo "There's no file ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot, so don't rebuild rootfs!"
1736 fi
1737 fi
1738}
1739
1740export -f copy_modules_and_rebuild_rootfs_for_smarthome