blob: 39bde586176c74f42ab4503334cf2ea02e2179a7 [file] [log] [blame]
wanwei.jiang91776952021-11-19 13:10:32 +08001#!/bin/bash
2
3function pre_defconfig_cmds() {
wanwei.jiangff4dccd2022-08-14 01:14:51 +08004 export OUT_AMLOGIC_DIR=$(readlink -m ${COMMON_OUT_DIR}/amlogic)
Lei Zhang2853aa52022-08-23 09:40:06 +08005 if [ "${ARCH}" = "arm" ]; then
6 export PATH=${PATH}:/usr/bin/
7 fi
wanwei.jiangff4dccd2022-08-14 01:14:51 +08008
Wanwei Jiang51217812022-11-01 20:23:03 +08009 if [[ -z ${ANDROID_PROJECT} ]]; then
10 local temp_file=`mktemp /tmp/config.XXXXXXXXXXXX`
11 echo "CONFIG_AMLOGIC_SERIAL_MESON=y" > ${temp_file}
qinglin.li931a53f2022-11-23 11:09:03 +080012 echo "CONFIG_DEVTMPFS=y" >> ${temp_file}
Dezhen Wanga6806c52023-06-13 19:47:05 +080013 if [[ ${ARCH} == arm ]]; then
Wanwei Jiang51217812022-11-01 20:23:03 +080014 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${GKI_BASE_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG} ${temp_file}
Dezhen Wanga6806c52023-06-13 19:47:05 +080015 else
16 if [[ ${GKI_CONFIG} == gki_20 ]]; then
17 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${GKI_BASE_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG} ${temp_file}
Wanwei Jiange5426752023-07-03 00:56:39 +080018 else
Dezhen Wanga6806c52023-06-13 19:47:05 +080019 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${GKI_BASE_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG_GKI10} ${ROOT_DIR}/${FRAGMENT_CONFIG_DEBUG} ${temp_file}
20 fi
Wanwei Jiang51217812022-11-01 20:23:03 +080021 fi
22 rm ${temp_file}
23 else
Dezhen Wanga6806c52023-06-13 19:47:05 +080024 if [[ ${ARCH} == arm ]]; then
25 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${GKI_BASE_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG}
26 else
27 if [[ ${GKI_CONFIG} == gki_20 ]]; then
28 if [[ -n ${CHECK_GKI_20} ]]; then
29 local temp_file=`mktemp /tmp/config.XXXXXXXXXXXX`
30 echo "CONFIG_STMMAC_ETH=n" > ${temp_file}
31 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${GKI_BASE_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG} ${temp_file}
32 rm ${temp_file}
33 else
34 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${GKI_BASE_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG}
35 fi
Wanwei Jiange5426752023-07-03 00:56:39 +080036 else
Dezhen Wanga6806c52023-06-13 19:47:05 +080037 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${GKI_BASE_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG_GKI10} ${ROOT_DIR}/${FRAGMENT_CONFIG_DEBUG}
qinglin.li8d41aaf2023-02-07 19:49:44 +080038 fi
Wanwei Jiang51217812022-11-01 20:23:03 +080039 fi
wanwei.jiang6fdd3152022-08-01 20:35:05 +080040 fi
qinglin.li7a994a02022-12-05 15:04:40 +080041
qinglin.li62b23332023-06-25 10:37:41 +080042 if [[ ${UPGRADE_PROJECT} == r || ${UPGRADE_PROJECT} == R ]]; then
43 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG_UPGRADE_R}
44 fi
45 if [[ ${UPGRADE_PROJECT} == p || ${UPGRADE_PROJECT} == P ]]; then
46 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG_UPGRADE_P}
47 fi
48 if [[ ${UPGRADE_PROJECT} == s || ${UPGRADE_PROJECT} == S ]]; then
49 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG_UPGRADE_S}
50 fi
51 if [[ ${UPGRADE_PROJECT} == u || ${UPGRADE_PROJECT} == U ]]; then
52 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG_UPGRADE_U}
qinglin.li7a994a02022-12-05 15:04:40 +080053 fi
Dezhen Wangab7ba642023-03-15 14:10:44 +080054
Wanwei Jiangc65e4d32023-03-21 16:24:41 +080055 if [[ ${IN_BUILD_GKI_10} == 1 ]]; then
56 local temp_file=`mktemp /tmp/config.XXXXXXXXXXXX`
57 echo "CONFIG_MODULE_SIG_ALL=y" >> ${temp_file}
58 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${temp_file}
59 rm ${temp_file}
60 fi
Dezhen Wanga5f456a2023-05-05 17:40:31 +080061
62 if [[ -n ${DEV_CONFIGS} ]]; then
63 config_list=$(echo ${DEV_CONFIGS}|sed 's/+/ /g')
64 #verify the extra config is in the right path and merge the config
65 CONFIG_DIR=arch/${ARCH}/configs
66 for config_name in ${config_list[@]}
67 do
68 if [[ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/${CONFIG_DIR}/${config_name} ]]; then
69 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}
70 elif [[ -f ${config_name} ]]; then
71 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${config_name}
72 else
73 echo "ERROR: config file ${config_name} is not in the right path!!"
74 exit
75 fi
76 done
77 fi
wanwei.jiang91776952021-11-19 13:10:32 +080078}
79export -f pre_defconfig_cmds
80
81function post_defconfig_cmds() {
Wanwei Jiang2d4f9742022-09-13 11:22:17 +080082 rm ${ROOT_DIR}/${KCONFIG_DEFCONFIG}
wanwei.jiang91776952021-11-19 13:10:32 +080083}
84export -f post_defconfig_cmds
85
86function read_ext_module_config() {
87 ALL_LINE=""
88 while read LINE
89 do
90 if [[ $LINE != \#* && $LINE != "" ]]; then
91 ALL_LINE="$ALL_LINE"" ""$LINE"
92 fi
93 done < $1
wanwei.jiang5c861ae2022-04-21 00:51:50 +080094
95 echo "${ALL_LINE}"
wanwei.jiang91776952021-11-19 13:10:32 +080096}
97
pengzhao.liua923dea2023-06-25 09:58:20 +080098function autotest(){
99 if [[ -d ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/ ]]; then
100 if [[ ! -f ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/pre-commit ]]; then
101 cp ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/pre-commit ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/pre-commit
102 cp ${KERNEL_DIR}/scripts/amlogic/pre-commit ${KERNEL_DIR}/.git/hooks/pre-commit
103 chmod +x ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/pre-commit
104 chmod +x ${KERNEL_DIR}/.git/hooks/pre-commit
105 fi
106 fi
107}
108
wanwei.jiang91776952021-11-19 13:10:32 +0800109function read_ext_module_predefine() {
110 PRE_DEFINE=""
111
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800112 for y_config in `cat $1 | grep "^CONFIG_.*=y" | sed 's/=y//'`; do
wanwei.jiang91776952021-11-19 13:10:32 +0800113 PRE_DEFINE="$PRE_DEFINE"" -D"${y_config}
114 done
115
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800116 for m_config in `cat $1 | grep "^CONFIG_.*=m" | sed 's/=m//'`; do
wanwei.jiang91776952021-11-19 13:10:32 +0800117 PRE_DEFINE="$PRE_DEFINE"" -D"${m_config}_MODULE
118 done
119
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800120 echo "${PRE_DEFINE}"
wanwei.jiang91776952021-11-19 13:10:32 +0800121}
122
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800123top_ext_drivers=top_ext_drivers
wanwei.jiang91776952021-11-19 13:10:32 +0800124function prepare_module_build() {
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800125 local temp_file=`mktemp /tmp/kernel.XXXXXXXXXXXX`
Wanwei Jiang0a74fb12022-12-09 16:27:40 +0800126 if [[ ! `grep "CONFIG_AMLOGIC_IN_KERNEL_MODULES=y" ${ROOT_DIR}/${FRAGMENT_CONFIG}` ]]; then
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800127 sed 's:#.*$::g' ${ROOT_DIR}/${FRAGMENT_CONFIG} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
128 GKI_EXT_KERNEL_MODULE_CONFIG=$(read_ext_module_config ${temp_file})
129 GKI_EXT_KERNEL_MODULE_PREDEFINE=$(read_ext_module_predefine ${temp_file})
130 export GKI_EXT_KERNEL_MODULE_CONFIG GKI_EXT_KERNEL_MODULE_PREDEFINE
wanwei.jiang91776952021-11-19 13:10:32 +0800131 fi
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800132
133 for ext_module_config in ${EXT_MODULES_CONFIG}; do
134 sed 's:#.*$::g' ${ROOT_DIR}/${ext_module_config} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
135 GKI_EXT_MODULE_CONFIG=$(read_ext_module_config ${temp_file})
136 GKI_EXT_MODULE_PREDEFINE=$(read_ext_module_predefine ${temp_file})
137 done
138 export GKI_EXT_MODULE_CONFIG GKI_EXT_MODULE_PREDEFINE
139 echo GKI_EXT_MODULE_CONFIG=${GKI_EXT_MODULE_CONFIG}
140 echo GKI_EXT_MODULE_PREDEFINE=${GKI_EXT_MODULE_PREDEFINE}
141
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800142 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
143 if [[ -d ${top_ext_drivers} ]]; then
144 rm -rf ${top_ext_drivers}
145 fi
146 mkdir -p ${top_ext_drivers}
147 fi
148
149 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
150 extra_symbols="KBUILD_EXTRA_SYMBOLS +="
151 fi
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800152 ext_modules=
153 for ext_module in ${EXT_MODULES}; do
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800154 module_abs_path=`readlink -e ${ext_module}`
155 module_rel_path=$(rel_path ${module_abs_path} ${ROOT_DIR})
156 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
157 if [[ `echo ${module_rel_path} | grep "\.\.\/"` ]]; then
158 cp -rf ${module_abs_path} ${top_ext_drivers}
159 module_rel_path=${top_ext_drivers}/${module_abs_path##*/}
160 fi
161 fi
162 ext_modules="${ext_modules} ${module_rel_path}"
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800163 done
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800164
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800165 for ext_module_path in ${EXT_MODULES_PATH}; do
166 sed 's:#.*$::g' ${ROOT_DIR}/${ext_module_path} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800167 while read LINE
168 do
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800169 module_abs_path=`readlink -e ${LINE}`
170 module_rel_path=$(rel_path ${module_abs_path} ${ROOT_DIR})
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800171 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
172 if [[ `echo ${module_rel_path} | grep "\.\.\/"` ]]; then
173 cp -rf ${module_abs_path} ${top_ext_drivers}
174 module_rel_path=${top_ext_drivers}/${module_abs_path##*/}
175 fi
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800176 fi
177 ext_modules="${ext_modules} ${module_rel_path}"
178
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800179 done < ${temp_file}
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800180 done
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800181 EXT_MODULES=${ext_modules}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800182
183 local flag=0
184 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
185 for ext_module in ${EXT_MODULES}; do
186 ext_mod_rel=$(rel_path ${ext_module} ${KERNEL_DIR})
187 if [[ ${flag} -eq "1" ]]; then
188 sed -i "/# auto add KBUILD_EXTRA_SYMBOLS start/,/# auto add KBUILD_EXTRA_SYMBOLS end/d" ${ext_module}/Makefile
189 sed -i "2 i # auto add KBUILD_EXTRA_SYMBOLS end" ${ext_module}/Makefile
190 sed -i "2 i ${extra_symbols}" ${ext_module}/Makefile
191 sed -i "2 i # auto add KBUILD_EXTRA_SYMBOLS start" ${ext_module}/Makefile
192 echo "${ext_module}/Makefile add: ${extra_symbols}"
193 fi
194 extra_symbols="${extra_symbols} ${ext_mod_rel}/Module.symvers"
195 flag=1
196 done
197 fi
198
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800199 export EXT_MODULES
200 echo EXT_MODULES=${EXT_MODULES}
201
202 rm ${temp_file}
wanwei.jiang91776952021-11-19 13:10:32 +0800203}
wanwei.jiang91776952021-11-19 13:10:32 +0800204export -f prepare_module_build
wanwei.jiang612a8882021-11-23 17:12:23 +0800205
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800206function extra_cmds() {
Dezhen Wang1176fad2023-06-09 11:22:17 +0800207 echo "========================================================"
208 echo " Running extra build command(s):"
209
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800210 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
211 for ext_module in ${EXT_MODULES}; do
212 sed -i "/# auto add KBUILD_EXTRA_SYMBOLS start/,/# auto add KBUILD_EXTRA_SYMBOLS end/d" ${ext_module}/Makefile
213 done
214 fi
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800215
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800216 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
217 if [[ -d ${top_ext_drivers} ]]; then
218 rm -rf ${top_ext_drivers}
219 fi
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800220 fi
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800221
222 for FILE in ${FILES}; do
223 if [[ "${FILE}" =~ \.dtbo ]] && \
224 [ -n "${DTS_EXT_DIR}" ] && [ -f "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" ] ; then
225 MKDTIMG_DTBOS="${MKDTIMG_DTBOS} ${DIST_DIR}/${FILE}"
226 fi
227 done
228 export MKDTIMG_DTBOS
229
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800230 set +x
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800231 modules_install
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800232 set -x
233
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800234 local src_dir=$(echo ${MODULES_STAGING_DIR}/lib/modules/*)
235 pushd ${src_dir}
wanwei.jiangf73b2202022-07-23 16:00:44 +0800236 cp modules.order modules_order.back
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800237 : > modules.order
Wanwei Jiang571dde62022-11-17 14:37:41 +0800238 set +x
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800239 while read LINE
240 do
241 find -name ${LINE} >> modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800242 done < ${OUT_AMLOGIC_DIR}/modules/modules.order
Wanwei Jiang571dde62022-11-17 14:37:41 +0800243 set -x
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800244 sed -i "s/^\.\///" modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800245 : > ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800246 ext_modules=
247 for ext_module in ${EXT_MODULES}; do
248 if [[ ${ext_module} =~ "../" ]]; then
249 ext_module_old=${ext_module}
250 ext_module=${ext_module//\.\.\//}
251 ext_dir=$(dirname ${ext_module})
252 [[ -d extra/${ext_module} ]] && rm -rf extra/${ext_dir}
253 mkdir -p extra/${ext_dir}
254 cp -rf extra/${ext_module_old} extra/${ext_dir}
255
256 ext_modules_order_file=$(ls extra/${ext_module}/modules.order.*)
257 ext_dir_top=${ext_module%/*}
wanwei.jiangf73b2202022-07-23 16:00:44 +0800258 sed -i "s/\.\.\///g" ${ext_modules_order_file}
259 cat ${ext_modules_order_file} >> modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800260 cat ${ext_modules_order_file} | awk -F/ '{print $NF}' >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
wanwei.jiangf73b2202022-07-23 16:00:44 +0800261 : > ${ext_modules_order_file}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800262 else
263 ext_modules_order_file=$(ls extra/${ext_module}/modules.order.*)
wanwei.jiangf73b2202022-07-23 16:00:44 +0800264 cat ${ext_modules_order_file} >> modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800265 cat ${ext_modules_order_file} | awk -F/ '{print $NF}' >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
wanwei.jiangf73b2202022-07-23 16:00:44 +0800266 : > ${ext_modules_order_file}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800267 fi
268 ext_modules="${ext_modules} ${ext_module}"
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800269 done
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800270 EXT_MODULES=${ext_modules}
271 echo EXT_MODULES=${EXT_MODULES}
272 export EXT_MODULES
wanwei.jiangf73b2202022-07-23 16:00:44 +0800273
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800274 head -n ${ramdisk_last_line} modules.order > vendor_boot_modules
wanwei.jiangf73b2202022-07-23 16:00:44 +0800275 file_last_line=`sed -n "$=" modules.order`
276 let line=${file_last_line}-${ramdisk_last_line}
277 tail -n ${line} modules.order > vendor_dlkm_modules
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800278 export MODULES_LIST=${src_dir}/vendor_boot_modules
279 if [[ "${ARCH}" = "arm64" && -z ${FAST_BUILD} ]]; then
Lei Zhang96efea62022-09-02 14:55:06 +0800280 export VENDOR_DLKM_MODULES_LIST=${src_dir}/vendor_dlkm_modules
281 fi
wanwei.jiangf73b2202022-07-23 16:00:44 +0800282
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800283 popd
wanwei.jiang1d154992022-05-30 14:56:26 +0800284
Wanwei Jiang0a74fb12022-12-09 16:27:40 +0800285 if [[ -z ${ANDROID_PROJECT} ]] && [[ -d ${OUT_DIR}/${DTS_EXT_DIR} ]]; then
wanwei.jiang1d154992022-05-30 14:56:26 +0800286 FILES="$FILES `ls ${OUT_DIR}/${DTS_EXT_DIR}`"
287 fi
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800288
289 if [[ -f ${KERNEL_BUILD_VAR_FILE} ]]; then
290 : > ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiangb2ed83c2022-09-09 14:01:20 +0800291 echo "KERNEL_DIR=${KERNEL_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800292 echo "COMMON_OUT_DIR=${COMMON_OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
293 echo "OUT_DIR=${OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
294 echo "DIST_DIR=${DIST_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800295 echo "OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800296 echo "MODULES_STAGING_DIR=${MODULES_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
297 echo "MODULES_PRIVATE_DIR=${MODULES_PRIVATE_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
298 echo "INITRAMFS_STAGING_DIR=${INITRAMFS_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
299 echo "SYSTEM_DLKM_STAGING_DIR=${SYSTEM_DLKM_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
300 echo "VENDOR_DLKM_STAGING_DIR=${VENDOR_DLKM_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
301 echo "MKBOOTIMG_STAGING_DIR=${MKBOOTIMG_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800302 echo "DIST_GKI_DIR=${DIST_GKI_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
303 echo "FULL_KERNEL_VERSION=${FULL_KERNEL_VERSION}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8fe00342023-05-16 22:53:14 +0800304 echo "GKI_MODULES_LOAD_WHITE_LIST=\"${GKI_MODULES_LOAD_WHITE_LIST[*]}\"" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8042e472023-06-06 14:12:32 +0800305 echo "BAZEL=${BAZEL}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800306 fi
Wanwei Jianga07f9a52022-09-30 18:40:40 +0800307
308 for module_path in ${PREBUILT_MODULES_PATH}; do
309 find ${module_path} -type f -name "*.ko" -exec cp {} ${DIST_DIR} \;
310 done
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800311}
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800312export -f extra_cmds
313
Wanwei Jiang2218b892023-03-17 17:31:21 +0800314function bazel_extra_cmds() {
315 modules_install
316
317 if [[ -f ${KERNEL_BUILD_VAR_FILE} ]]; then
318 : > ${KERNEL_BUILD_VAR_FILE}
319 echo "KERNEL_DIR=${KERNEL_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
320 echo "COMMON_OUT_DIR=${COMMON_OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
321 echo "DIST_DIR=${DIST_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
322 echo "OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8fe00342023-05-16 22:53:14 +0800323 echo "GKI_MODULES_LOAD_WHITE_LIST=\"${GKI_MODULES_LOAD_WHITE_LIST[*]}\"" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8042e472023-06-06 14:12:32 +0800324 echo "BAZEL=${BAZEL}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang2218b892023-03-17 17:31:21 +0800325 fi
326
327 if [[ ${GKI_CONFIG} != gki_20 ]]; then
328 [[ -f ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz ]] && rm -f ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz
329 mv ${DIST_DIR}/system_dlkm_staging_archive.tar.gz ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz
330 [[ -d ${DIST_DIR}/system_dlkm_gki10 ]] && rm -rf ${DIST_DIR}/system_dlkm_gki10
331 mkdir ${DIST_DIR}/system_dlkm_gki10
332 pushd ${DIST_DIR}/system_dlkm_gki10
333 tar zxf ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz
334 find -name "*.ko" | while read module; do
Wanwei Jiang475245b2023-05-10 21:06:52 +0800335 module_name=${module##*/}
Wanwei Jiang2218b892023-03-17 17:31:21 +0800336 if [[ ! `grep "/${module_name}" ${DIST_DIR}/system_dlkm.modules.load` ]]; then
337 rm -f ${module}
338 fi
339 done
340 tar czf ${DIST_DIR}/system_dlkm_staging_archive.tar.gz lib
341 popd
342 rm -rf ${DIST_DIR}/system_dlkm_gki10
343 fi
344}
345
346export -f bazel_extra_cmds
347
wanwei.jiang612a8882021-11-23 17:12:23 +0800348function mod_probe() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800349 local ko=$1
350 local loop
qinglin.lia284a932022-09-21 18:07:38 +0800351 for loop in `grep "^$ko:" modules.dep | sed 's/.*://'`; do
Wanwei Jiang16554d02023-07-14 17:01:00 +0800352 [[ `grep $loop __install.sh` ]] && continue
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800353 mod_probe $loop
354 echo insmod $loop >> __install.sh
355 done
wanwei.jiang612a8882021-11-23 17:12:23 +0800356}
357
Wanwei Jiang571dde62022-11-17 14:37:41 +0800358function mod_probe_recovery() {
359 local ko=$1
360 local loop
361 for loop in `grep "^$ko:" modules_recovery.dep | sed 's/.*://'`; do
Wanwei Jiang16554d02023-07-14 17:01:00 +0800362 [[ `grep $loop __install_recovery.sh` ]] && continue
Wanwei Jiang571dde62022-11-17 14:37:41 +0800363 mod_probe_recovery $loop
364 echo insmod $loop >> __install_recovery.sh
365 done
366}
367
wanwei.jiangb12abc82021-12-25 22:17:10 +0800368function adjust_sequence_modules_loading() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800369 if [[ -n $1 ]]; then
370 chips=$1
wanwei.jiangb12abc82021-12-25 22:17:10 +0800371 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800372
373 source ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list
374 cp modules.dep modules.dep.temp
375
376 soc_module=()
377 for chip in ${chips[@]}; do
378 chip_module=`ls amlogic-*-soc-${chip}.ko`
379 soc_module=(${soc_module[@]} ${chip_module[@]})
380 done
381 echo soc_module=${soc_module[*]}
382
383 delete_soc_module=()
384 if [[ ${#soc_module[@]} == 0 ]]; then
385 echo "Use all soc module"
386 else
387 for module in `ls amlogic-*-soc-*`; do
388 if [[ ! "${soc_module[@]}" =~ "${module}" ]] ; then
389 echo Delete soc module: ${module}
390 sed -n "/${module}:/p" modules.dep.temp
391 sed -i "/${module}:/d" modules.dep.temp
392 delete_soc_module=(${delete_soc_module[@]} ${module})
393 fi
394 done
395 echo delete_soc_module=${delete_soc_module[*]}
396 fi
397
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800398 if [[ -n ${CLK_SOC_MODULE} ]]; then
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800399 delete_clk_soc_modules=()
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800400 for module in `ls amlogic-clk-soc-*`; do
401 if [[ "${CLK_SOC_MODULE}" != "${module}" ]] ; then
402 echo Delete clk soc module: ${module}
403 sed -n "/${module}:/p" modules.dep.temp
404 sed -i "/${module}:/d" modules.dep.temp
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800405 delete_clk_soc_modules=(${delete_clk_soc_modules[@]} ${module})
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800406 fi
407 done
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800408 echo delete_clk_soc_modules=${delete_clk_soc_modules[*]}
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800409 fi
410
411 if [[ -n ${PINCTRL_SOC_MODULE} ]]; then
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800412 delete_pinctrl_soc_modules=()
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800413 for module in `ls amlogic-pinctrl-soc-*`; do
414 if [[ "${PINCTRL_SOC_MODULE}" != "${module}" ]] ; then
415 echo Delete pinctrl soc module: ${module}
416 sed -n "/${module}:/p" modules.dep.temp
417 sed -i "/${module}:/d" modules.dep.temp
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800418 delete_pinctrl_soc_modules=(${delete_pinctrl_soc_modules[@]} ${module})
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800419 fi
420 done
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800421 echo delete_pinctrl_soc_modules=${delete_pinctrl_soc_modules[*]}
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800422 fi
423
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800424 in_line_i=a
425 delete_type_modules=()
426 echo "TYPE_MODULE_SELECT_MODULE=${TYPE_MODULE_SELECT_MODULE}"
427 mkdir temp_dir
428 cd temp_dir
429 in_temp_dir=y
430 for element in ${TYPE_MODULE_SELECT_MODULE}; do
431 if [[ ${in_temp_dir} = y ]]; then
432 cd ../
433 rm -r temp_dir
434 in_temp_dir=
435 fi
436 if [[ ${in_line_i} = a ]]; then
437 in_line_i=b
438 type_module=${element}
439 select_modules_i=0
440 select_modules_count=
441 select_modules=
442 elif [[ ${in_line_i} = b ]]; then
443 in_line_i=c
444 select_modules_count=${element}
445 else
446 let select_modules_i+=1
447 select_modules="${select_modules} ${element}"
448 if [[ ${select_modules_i} -eq ${select_modules_count} ]]; then
449 in_line_i=a
450 echo type_module=$type_module select_modules=$select_modules
451 for module in `ls ${type_module}`; do
452 dont_delete_module=0
453 for select_module in ${select_modules}; do
454 if [[ "${select_module}" == "${module}" ]] ; then
455 dont_delete_module=1
456 break;
457 fi
458 done
459 if [[ ${dont_delete_module} != 1 ]]; then
460 echo Delete module: ${module}
461 sed -n "/${module}:/p" modules.dep.temp
462 sed -i "/${module}:/d" modules.dep.temp
463 delete_type_modules=(${delete_type_modules[@]} ${module})
464 fi
465 done
466 echo delete_type_modules=${delete_type_modules[*]}
467 fi
468 fi
469 done
470 if [[ -n ${in_temp_dir} ]]; then
471 cd ../
472 rm -r temp_dir
473 fi
474
475 black_modules=()
Dezhen Wang45dfcb02023-02-13 17:41:44 +0800476 mkdir service_module
477 echo MODULES_SERVICE_LOAD_LIST=${MODULES_SERVICE_LOAD_LIST[@]}
478 BLACK_AND_SERVICE_LIST=(${MODULES_LOAD_BLACK_LIST[@]} ${MODULES_SERVICE_LOAD_LIST[@]})
479 echo ${BLACK_AND_SERVICE_LIST[@]}
480 for module in ${BLACK_AND_SERVICE_LIST[@]}; do
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800481 modules=`ls ${module}*`
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800482 black_modules=(${black_modules[@]} ${modules[@]})
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800483 done
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800484 if [[ ${#black_modules[@]} == 0 ]]; then
485 echo "black_modules is null, don't delete modules, MODULES_LOAD_BLACK_LIST=${MODULES_LOAD_BLACK_LIST[*]}"
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800486 else
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800487 echo black_modules=${black_modules[*]}
488 for module in ${black_modules[@]}; do
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800489 echo Delete module: ${module}
490 sed -n "/${module}:/p" modules.dep.temp
491 sed -i "/${module}:/d" modules.dep.temp
492 done
493 fi
494
Wanwei Jiang475245b2023-05-10 21:06:52 +0800495 GKI_MODULES_LOAD_BLACK_LIST=()
Wanwei Jiang16554d02023-07-14 17:01:00 +0800496 if [[ "${FULL_KERNEL_VERSION}" != "common13-5.15" && "${ARCH}" == "arm64" ]]; then
497 #if [[ "${FULL_KERNEL_VERSION}" != "common13-5.15" ]]; then
Wanwei Jiang475245b2023-05-10 21:06:52 +0800498 gki_modules_temp_file=`mktemp /tmp/config.XXXXXXXXXXXX`
qinglin.lieafebcf2023-06-27 12:48:22 +0800499 if [[ ${BAZEL} == "1" ]]; then
500 cp $DIST_DIR/system_dlkm.modules.load ${gki_modules_temp_file}
501 else
502 rm -f ${gki_modules_temp_file}
503 cat ${ROOT_DIR}/${KERNEL_DIR}/modules.bzl |grep ko | while read LINE
504 do
505 echo $LINE | sed 's/^[^"]*"//' | sed 's/".*$//' >> ${gki_modules_temp_file}
506 done
507 fi
Wanwei Jiang475245b2023-05-10 21:06:52 +0800508
509 for module in ${GKI_MODULES_LOAD_WHITE_LIST[@]}; do
510 sed -i "/\/${module}/d" ${gki_modules_temp_file}
511 done
512
513 for module in `cat ${gki_modules_temp_file}`; do
514 module=${module##*/}
515 GKI_MODULES_LOAD_BLACK_LIST[${#GKI_MODULES_LOAD_BLACK_LIST[*]}]=${module}
516 done
517 rm -f ${gki_modules_temp_file}
518
519 for module in ${GKI_MODULES_LOAD_BLACK_LIST[@]}; do
520 echo Delete module: ${module}
521 sed -n "/${module}:/p" modules.dep.temp
522 sed -i "/${module}:/d" modules.dep.temp
523 done
524 fi
525
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800526 cat modules.dep.temp | cut -d ':' -f 2 > modules.dep.temp1
Wanwei Jiang475245b2023-05-10 21:06:52 +0800527 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 +0800528 for module in ${delete_modules[@]}; do
Wanwei Jiang16554d02023-07-14 17:01:00 +0800529 if [[ ! -f $module ]]; then
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800530 continue
531 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800532 match=`sed -n "/${module}/=" modules.dep.temp1`
533 for match in ${match[@]}; do
534 match_count=(${match_count[@]} $match)
535 done
536 if [[ ${#match_count[@]} != 0 ]]; then
537 echo "Error ${#match_count[@]} modules depend on ${module}, please modify:"
wanwei.jiang50759e12022-03-24 12:36:17 +0800538 echo ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list:MODULES_LOAD_BLACK_LIST
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800539 exit
540 fi
Dezhen Wang45dfcb02023-02-13 17:41:44 +0800541 if [[ -n ${ANDROID_PROJECT} ]]; then
542 for service_module_temp in ${MODULES_SERVICE_LOAD_LIST[@]}; do
543 if [[ ${module} = ${service_module_temp} ]]; then
544 mv ${module} service_module
545 fi
546 done
547 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800548 rm -f ${module}
549 done
550 rm -f modules.dep.temp1
wanwei.jiangb12abc82021-12-25 22:17:10 +0800551 touch modules.dep.temp1
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800552
553 for module in ${RAMDISK_MODULES_LOAD_LIST[@]}; do
554 echo RAMDISK_MODULES_LOAD_LIST: $module
wanwei.jiangb12abc82021-12-25 22:17:10 +0800555 sed -n "/${module}:/p" modules.dep.temp
556 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1
557 sed -i "/${module}:/d" modules.dep.temp
558 sed -n "/${module}.*\.ko:/p" modules.dep.temp
559 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1
560 sed -i "/${module}.*\.ko:/d" modules.dep.temp
561 done
562
Wanwei Jiang571dde62022-11-17 14:37:41 +0800563 if [[ -n ${ANDROID_PROJECT} ]]; then
564 cp modules.dep.temp modules_recovery.dep.temp
565 cp modules.dep.temp1 modules_recovery.dep.temp1
566 fi
567
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800568 for module in ${VENDOR_MODULES_LOAD_FIRST_LIST[@]}; do
569 echo VENDOR_MODULES_LOAD_FIRST_LIST: $module
570 sed -n "/${module}:/p" modules.dep.temp
571 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1
572 sed -i "/${module}:/d" modules.dep.temp
573 sed -n "/${module}.*\.ko:/p" modules.dep.temp
574 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1
575 sed -i "/${module}.*\.ko:/d" modules.dep.temp
wanwei.jiangb12abc82021-12-25 22:17:10 +0800576 done
577
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800578 if [ -f modules.dep.temp2 ]; then
579 rm modules.dep.temp2
580 fi
581 touch modules.dep.temp2
582 for module in ${VENDOR_MODULES_LOAD_LAST_LIST[@]}; do
583 echo VENDOR_MODULES_LOAD_FIRST_LIST: $module
584 sed -n "/${module}:/p" modules.dep.temp
585 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp2
586 sed -i "/${module}:/d" modules.dep.temp
587 sed -n "/${module}.*\.ko:/p" modules.dep.temp
588 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp2
589 sed -i "/${module}.*\.ko:/d" modules.dep.temp
590 done
591
592 cat modules.dep.temp >> modules.dep.temp1
593 cat modules.dep.temp2 >> modules.dep.temp1
594
wanwei.jiangb12abc82021-12-25 22:17:10 +0800595 cp modules.dep.temp1 modules.dep
596 rm modules.dep.temp
597 rm modules.dep.temp1
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800598 rm modules.dep.temp2
Wanwei Jiang571dde62022-11-17 14:37:41 +0800599
600 if [[ -n ${ANDROID_PROJECT} ]]; then
601 for module in ${RECOVERY_MODULES_LOAD_LIST[@]}; do
602 echo RECOVERY_MODULES_LOAD_LIST: $module
603 sed -n "/${module}:/p" modules_recovery.dep.temp
604 sed -n "/${module}:/p" modules_recovery.dep.temp >> modules_recovery.dep.temp1
605 sed -i "/${module}:/d" modules_recovery.dep.temp
606 sed -n "/${module}.*\.ko:/p" modules_recovery.dep.temp
607 sed -n "/${module}.*\.ko:/p" modules_recovery.dep.temp >> modules_recovery.dep.temp1
608 sed -i "/${module}.*\.ko:/d" modules_recovery.dep.temp
609 done
610
611 cat modules_recovery.dep.temp >> modules_recovery.dep.temp1
612
613 cp modules_recovery.dep.temp1 modules_recovery.dep
614 rm modules_recovery.dep.temp
615 rm modules_recovery.dep.temp1
616 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800617}
618
Wanwei Jiang571dde62022-11-17 14:37:41 +0800619create_ramdisk_vendor_recovery() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800620 install_temp=$1
Wanwei Jiang571dde62022-11-17 14:37:41 +0800621 if [[ -n ${ANDROID_PROJECT} ]]; then
622 recovery_install_temp=$2
623 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800624 source ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list
Wanwei Jiang9173e462022-09-29 00:58:33 +0800625 ramdisk_module_i=${#RAMDISK_MODULES_LOAD_LIST[@]}
626 while [ ${ramdisk_module_i} -gt 0 ]; do
627 let ramdisk_module_i--
628 echo ramdisk_module_i=$ramdisk_module_i ${RAMDISK_MODULES_LOAD_LIST[${ramdisk_module_i}]}
629 if [[ `grep "${RAMDISK_MODULES_LOAD_LIST[${ramdisk_module_i}]}" ${install_temp}` ]]; then
630 last_ramdisk_module=${RAMDISK_MODULES_LOAD_LIST[${ramdisk_module_i}]}
631 break;
632 fi
633 done
634 # last_ramdisk_module=${RAMDISK_MODULES_LOAD_LIST[${#RAMDISK_MODULES_LOAD_LIST[@]}-1]}
qinglin.libce54712023-05-08 13:56:31 +0800635 if [[ -n ${last_ramdisk_module} ]]; then
636 last_ramdisk_module_line=`sed -n "/${last_ramdisk_module}/=" ${install_temp}`
637 for line in ${last_ramdisk_module_line}; do
638 ramdisk_last_line=${line}
639 done
640 else
641 ramdisk_last_line=1
642 fi
wanwei.jiangf73b2202022-07-23 16:00:44 +0800643 export ramdisk_last_line
Wanwei Jiang571dde62022-11-17 14:37:41 +0800644
645 if [[ -n ${ANDROID_PROJECT} ]]; then
646 recovery_module_i=${#RECOVERY_MODULES_LOAD_LIST[@]}
qinglin.lidba324f2023-03-02 19:56:21 +0800647 #when RECOVERY_MODULES_LOAD_LIST is NULL
648 if [ ${#RECOVERY_MODULES_LOAD_LIST[@]} -eq 0 ]; then
649 last_recovery_module=${last_ramdisk_module}
650 fi
Wanwei Jiang571dde62022-11-17 14:37:41 +0800651 while [ ${recovery_module_i} -gt 0 ]; do
652 let recovery_module_i--
653 echo recovery_module_i=$recovery_module_i ${RECOVERY_MODULES_LOAD_LIST[${recovery_module_i}]}
654 if [[ `grep "${RECOVERY_MODULES_LOAD_LIST[${recovery_module_i}]}" ${recovery_install_temp}` ]]; then
655 last_recovery_module=${RECOVERY_MODULES_LOAD_LIST[${recovery_module_i}]}
656 break;
657 fi
658 done
659 # last_recovery_module=${RECOVERY_MODULES_LOAD_LIST[${#RECOVERY_MODULES_LOAD_LIST[@]}-1]}
qinglin.libce54712023-05-08 13:56:31 +0800660 if [[ -n ${last_recovery_module} ]]; then
661 last_recovery_module_line=`sed -n "/${last_recovery_module}/=" ${recovery_install_temp}`
662 for line in ${last_recovery_module_line}; do
663 recovery_last_line=${line}
664 done
665 else
666 recovery_last_line=1
667 fi
Wanwei Jiang571dde62022-11-17 14:37:41 +0800668 sed -n "${ramdisk_last_line},${recovery_last_line}p" ${recovery_install_temp} > recovery_install.sh
qinglin.libce54712023-05-08 13:56:31 +0800669 if [[ -n ${last_ramdisk_module} ]]; then
670 sed -i "1d" recovery_install.sh
671 fi
Wanwei Jiang571dde62022-11-17 14:37:41 +0800672 mkdir recovery
673 cat recovery_install.sh | cut -d ' ' -f 2 > recovery/recovery_modules.order
qinglin.lidba324f2023-03-02 19:56:21 +0800674 if [ ${#RECOVERY_MODULES_LOAD_LIST[@]} -ne 0 ]; then
675 cat recovery_install.sh | cut -d ' ' -f 2 | xargs cp -t recovery/
676 fi
Wanwei Jiang571dde62022-11-17 14:37:41 +0800677 sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' recovery_install.sh
678 echo "echo Install recovery modules success!" >> recovery_install.sh
679 chmod 755 recovery_install.sh
680 mv recovery_install.sh recovery/
681 fi
682
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800683 head -n ${ramdisk_last_line} ${install_temp} > ramdisk_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800684 mkdir ramdisk
wanwei.jiangf73b2202022-07-23 16:00:44 +0800685 cat ramdisk_install.sh | cut -d ' ' -f 2 > ramdisk/ramdisk_modules.order
wanwei.jiang50759e12022-03-24 12:36:17 +0800686 cat ramdisk_install.sh | cut -d ' ' -f 2 | xargs mv -t ramdisk/
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800687
qinglin.lie5b951e2022-06-07 16:13:44 +0800688 sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' ramdisk_install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800689 echo "echo Install ramdisk modules success!" >> ramdisk_install.sh
690 chmod 755 ramdisk_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800691 mv ramdisk_install.sh ramdisk/
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800692
693 file_last_line=`sed -n "$=" ${install_temp}`
694 let line=${file_last_line}-${ramdisk_last_line}
695 tail -n ${line} ${install_temp} > vendor_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800696 mkdir vendor
wanwei.jiangf73b2202022-07-23 16:00:44 +0800697 cat vendor_install.sh | cut -d ' ' -f 2 > vendor/vendor_modules.order
wanwei.jiang50759e12022-03-24 12:36:17 +0800698 cat vendor_install.sh | cut -d ' ' -f 2 | xargs mv -t vendor/
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800699
qinglin.lie5b951e2022-06-07 16:13:44 +0800700 sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' vendor_install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800701 echo "echo Install vendor modules success!" >> vendor_install.sh
702 chmod 755 vendor_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800703 mv vendor_install.sh vendor/
wanwei.jiangb12abc82021-12-25 22:17:10 +0800704}
705
wanwei.jiang612a8882021-11-23 17:12:23 +0800706function modules_install() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800707 arg1=$1
708
Wanwei Jiang2218b892023-03-17 17:31:21 +0800709 export OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR:-$(readlink -m ${COMMON_OUT_DIR}/amlogic)}
710 echo $OUT_AMLOGIC_DIR
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800711 rm -rf ${OUT_AMLOGIC_DIR}
712 mkdir -p ${OUT_AMLOGIC_DIR}
713 mkdir -p ${OUT_AMLOGIC_DIR}/modules
714 mkdir -p ${OUT_AMLOGIC_DIR}/ext_modules
Wanwei Jiangae4d7c12023-02-17 19:22:04 +0800715 mkdir -p ${OUT_AMLOGIC_DIR}/symbols
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800716
Wanwei Jiang2218b892023-03-17 17:31:21 +0800717 if [[ ${BAZEL} == "1" ]]; then
718 local output="out/bazel/output_user_root"
719 for dir in `ls ${output}`; do
720 if [[ ${dir} =~ ^[0-9A-Fa-f]*$ ]]; then
721 digit_output=${output}/${dir}
722 break
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800723 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800724 done
725
Wanwei Jiang0df84602023-05-05 14:40:42 +0800726 while read module
727 do
Wanwei Jiang475245b2023-05-10 21:06:52 +0800728 module_name=${module##*/}
Wanwei Jiang16554d02023-07-14 17:01:00 +0800729 if [[ -z ${ANDROID_PROJECT} || `echo ${module} | grep "^kernel\/"` ]]; then
Wanwei Jiang0df84602023-05-05 14:40:42 +0800730 if [[ -f ${DIST_DIR}/${module_name} ]]; then
731 cp ${DIST_DIR}/${module_name} ${OUT_AMLOGIC_DIR}/modules
732 else
733 module=`find ${digit_output}/execroot/ -name ${module_name} | grep "amlogic"`
734 cp ${module} ${OUT_AMLOGIC_DIR}/modules
735 fi
736 elif [[ `echo ${module} | grep "^extra\/"` ]]; then
Wanwei Jiang16554d02023-07-14 17:01:00 +0800737 module=${module#*/}
738 local match=
739 for ext_module in ${EXT_MODULES_ANDROID_AUTO_LOAD}; do
740 if [[ "${module}" =~ "${ext_module}" ]]; then
741 match=1
742 break
743 fi
744 done
745 if [[ ${match} == 1 ]]; then
746 cp ${DIST_DIR}/${module_name} ${OUT_AMLOGIC_DIR}/modules
747 else
748 cp ${DIST_DIR}/${module_name} ${OUT_AMLOGIC_DIR}/ext_modules
749 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800750 else
Wanwei Jiang0df84602023-05-05 14:40:42 +0800751 echo "warning unrecognized module: ${module}"
Wanwei Jiang2218b892023-03-17 17:31:21 +0800752 fi
Wanwei Jiang0df84602023-05-05 14:40:42 +0800753 done < ${DIST_DIR}/modules.load
Wanwei Jiang2218b892023-03-17 17:31:21 +0800754
755 dep_file=`find ${digit_output}/execroot/ -name *.dep | grep "amlogic"`
756 cp ${dep_file} ${OUT_AMLOGIC_DIR}/modules/full_modules.dep
Wanwei Jiang16554d02023-07-14 17:01:00 +0800757 if [[ -n ${ANDROID_PROJECT} ]]; then
758 grep -E "^kernel\/" ${dep_file} > ${OUT_AMLOGIC_DIR}/modules/modules.dep
759 for ext_module in ${EXT_MODULES_ANDROID_AUTO_LOAD}; do
760 cat ${dep_file} | cut -d ':' -f 1 | grep -n "${ext_module}" | cut -d ':' -f 1 | while read line; do
761 sed -n ${line}p ${dep_file} >> ${OUT_AMLOGIC_DIR}/modules/modules.dep
762 done
763 done
764
765 touch ${module} ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
766 for order_file in `find ${digit_output}/execroot/ -name "modules.order.*" | grep "amlogic"`; do
767 order_file_dir=${order_file#*/extra/}
768 order_file_dir=${order_file_dir%/modules.order.*}
769 if [[ ! "${EXT_MODULES_ANDROID_AUTO_LOAD}" =~ "${order_file_dir}" ]]; then
770 echo "# ${order_file}" >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
771 cat ${order_file} >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
772 echo >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
773 fi
774 done
775 else
776 cp ${dep_file} ${OUT_AMLOGIC_DIR}/modules/modules.dep
777 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800778 else
779 local MODULES_ROOT_DIR=$(echo ${MODULES_STAGING_DIR}/lib/modules/*)
780 pushd ${MODULES_ROOT_DIR}
781 local common_drivers=${COMMON_DRIVERS_DIR##*/}
782 local modules_list=$(find -type f -name "*.ko")
783 for module in ${modules_list}; do
784 if [[ -n ${ANDROID_PROJECT} ]]; then # copy internal build modules
785 if [[ `echo ${module} | grep -E "\.\/kernel\/|\/${common_drivers}\/"` ]]; then
786 cp ${module} ${OUT_AMLOGIC_DIR}/modules/
787 else
Wanwei Jiang16554d02023-07-14 17:01:00 +0800788 local match=
789 for ext_module in ${EXT_MODULES_ANDROID_AUTO_LOAD}; do
790 if [[ "${module}" =~ "${ext_module}" ]]; then
791 match=1
792 break
793 fi
794 done
795 if [[ ${match} == 1 ]]; then
796 cp ${module} ${OUT_AMLOGIC_DIR}/modules/
797 else
798 cp ${module} ${OUT_AMLOGIC_DIR}/ext_modules/
799 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800800 fi
Wanwei Jiang16554d02023-07-14 17:01:00 +0800801 else
Wanwei Jiang2218b892023-03-17 17:31:21 +0800802 cp ${module} ${OUT_AMLOGIC_DIR}/modules/
803 fi
804 done
805
806 if [[ -n ${ANDROID_PROJECT} ]]; then # internal build modules
807 grep -E "^kernel\/|^${common_drivers}\/" modules.dep > ${OUT_AMLOGIC_DIR}/modules/modules.dep
Wanwei Jiang16554d02023-07-14 17:01:00 +0800808 dep_file=modules.dep
809 for ext_module in ${EXT_MODULES_ANDROID_AUTO_LOAD}; do
810 cat ${dep_file} | cut -d ':' -f 1 | grep -n "${ext_module}" | cut -d ':' -f 1 | while read line; do
811 sed -n ${line}p ${dep_file} >> ${OUT_AMLOGIC_DIR}/modules/modules.dep
812 done
813 done
Wanwei Jiang2218b892023-03-17 17:31:21 +0800814 else # all modules, include external modules
815 cp modules.dep ${OUT_AMLOGIC_DIR}/modules
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800816 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800817 popd
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800818 fi
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800819 pushd ${OUT_AMLOGIC_DIR}/modules
wanwei.jiang612a8882021-11-23 17:12:23 +0800820 sed -i 's#[^ ]*/##g' modules.dep
821
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800822 adjust_sequence_modules_loading "${arg1[*]}"
wanwei.jiangb12abc82021-12-25 22:17:10 +0800823
wanwei.jiang5c8d2b62021-11-26 20:36:33 +0800824 touch __install.sh
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800825 touch modules.order
wanwei.jiang612a8882021-11-23 17:12:23 +0800826 for loop in `cat modules.dep | sed 's/:.*//'`; do
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800827 echo $loop >> modules.order
Wanwei Jiang16554d02023-07-14 17:01:00 +0800828 [[ `grep $loop __install.sh` ]] && continue
829 mod_probe $loop
wanwei.jiang612a8882021-11-23 17:12:23 +0800830 echo insmod $loop >> __install.sh
831 done
832
833 cat __install.sh | awk ' {
834 if (!cnt[$2]) {
835 print $0;
836 cnt[$2]++;
837 }
838 }' > __install.sh.tmp
839
Wanwei Jiangbf119d22022-10-27 09:49:49 +0800840 cp modules.order modules.order.back
841 cut -d ' ' -f 2 __install.sh.tmp > modules.order
Wanwei Jiang571dde62022-11-17 14:37:41 +0800842
843 if [[ -n ${ANDROID_PROJECT} ]]; then
844 touch __install_recovery.sh
845 touch modules_recovery.order
846 for loop in `cat modules_recovery.dep | sed 's/:.*//'`; do
Wanwei Jiang571dde62022-11-17 14:37:41 +0800847 echo $loop >> modules_recovery.order
Wanwei Jiang16554d02023-07-14 17:01:00 +0800848 [[ `grep $loop __install_recovery.sh` ]] && continue
849 mod_probe_recovery $loop
Wanwei Jiang571dde62022-11-17 14:37:41 +0800850 echo insmod $loop >> __install_recovery.sh
851 done
852
853 cat __install_recovery.sh | awk ' {
854 if (!cnt[$2]) {
855 print $0;
856 cnt[$2]++;
857 }
858 }' > __install_recovery.sh.tmp
859
Wanwei Jiang16554d02023-07-14 17:01:00 +0800860 cp modules_recovery.order modules_recovery.order.back
Wanwei Jiang571dde62022-11-17 14:37:41 +0800861 cut -d ' ' -f 2 __install_recovery.sh.tmp > modules_recovery.order
862 fi
863 create_ramdisk_vendor_recovery __install.sh.tmp __install_recovery.sh.tmp
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800864
Dezhen Wang124ad7d2023-02-06 15:35:14 +0800865 if [[ -n ${MANUAL_INSMOD_MODULE} ]]; then
866 install_file=manual_install.sh
867 else
868 install_file=install.sh
869 fi
870 echo "#!/bin/sh" > ${install_file}
871 echo "cd ramdisk" >> ${install_file}
872 echo "./ramdisk_install.sh" >> ${install_file}
873 echo "cd ../vendor" >> ${install_file}
874 echo "./vendor_install.sh" >> ${install_file}
875 echo "cd ../" >> ${install_file}
876 chmod 755 ${install_file}
wanwei.jiang612a8882021-11-23 17:12:23 +0800877
878 echo "/modules/: all `wc -l modules.dep | awk '{print $1}'` modules."
Wanwei Jianga5977bd2022-08-24 22:43:40 +0800879 rm __install.sh __install.sh.tmp
wanwei.jiang612a8882021-11-23 17:12:23 +0800880
Wanwei Jiang571dde62022-11-17 14:37:41 +0800881 if [[ -n ${ANDROID_PROJECT} ]]; then
882 rm __install_recovery.sh __install_recovery.sh.tmp
883 fi
884
wanwei.jiang236e9a32021-12-07 16:34:14 +0800885 popd
Wanwei Jiangae4d7c12023-02-17 19:22:04 +0800886
Wanwei Jiang2218b892023-03-17 17:31:21 +0800887 if [[ ${BAZEL} == "1" ]]; then
888 cp ${DIST_DIR}/vmlinux ${OUT_AMLOGIC_DIR}/symbols
889
890 find ${digit_output}/execroot -name *.ko | grep "unstripped" | while read module; do
891 cp ${module} ${OUT_AMLOGIC_DIR}/symbols
892 chmod +w ${OUT_AMLOGIC_DIR}/symbols/$(basename ${module})
893 done
894 chmod -w ${OUT_AMLOGIC_DIR}/symbols/*.ko
895 else
896 cp ${OUT_DIR}/vmlinux ${OUT_AMLOGIC_DIR}/symbols
897 find ${OUT_DIR} -type f -name "*.ko" -exec cp {} ${OUT_AMLOGIC_DIR}/symbols \;
898 for ext_module in ${EXT_MODULES}; do
899 find ${COMMON_OUT_DIR}/${ext_module} -type f -name "*.ko" -exec cp {} ${OUT_AMLOGIC_DIR}/symbols \;
900 done
901 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800902}
wanwei.jiang236e9a32021-12-07 16:34:14 +0800903export -f modules_install
wanwei.jiang612a8882021-11-23 17:12:23 +0800904
Wanwei Jiang2218b892023-03-17 17:31:21 +0800905function rename_external_module_name() {
906 local external_coppied
Wanwei Jiang92c89432023-05-15 23:57:16 +0800907 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 +0800908 target_module_name=`echo ${module_line%%:*} | sed '/^#/d;/^$/d'`
909 modules_name=`echo ${module_line##:*} | sed '/^#/d;/^$/d'`
910 [[ -f ${OUT_AMLOGIC_DIR}/ext_modules/${target_module_name} ]] && external_coppied=1
Wanwei Jiang16554d02023-07-14 17:01:00 +0800911 echo target_module_name=$target_module_name modules_name=$modules_name external_coppied=$external_coppied
Wanwei Jiang2218b892023-03-17 17:31:21 +0800912 for module in ${modules_name}; do
913 echo module=$module
914 if [[ -f ${OUT_AMLOGIC_DIR}/ext_modules/${module} ]]; then
915 if [[ -z ${external_coppied} ]]; then
916 cp ${OUT_AMLOGIC_DIR}/ext_modules/${module} ${OUT_AMLOGIC_DIR}/ext_modules/${target_module_name}
917 external_coppied=1
918 fi
919 rm -f ${OUT_AMLOGIC_DIR}/ext_modules/${module}
920 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800921 done
922 external_coppied=
Wanwei Jiang2218b892023-03-17 17:31:21 +0800923 done
924}
925export -f rename_external_module_name
926
Dezhen Wang5ad119c2023-05-04 15:07:49 +0800927# function rebuild_rootfs can rebuild the rootfs if rootfs_base.cpio.gz.uboot exist
wanwei.jiang612a8882021-11-23 17:12:23 +0800928function rebuild_rootfs() {
Wanwei Jiang2218b892023-03-17 17:31:21 +0800929 echo
930 echo "========================================================"
931 if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then
932 echo "Rebuild rootfs in order to install modules!"
933 else
934 echo "There's no file ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot, so don't rebuild rootfs!"
935 return
936 fi
937
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800938 pushd ${OUT_AMLOGIC_DIR}
wanwei.jiang612a8882021-11-23 17:12:23 +0800939
Lei Zhang475c17b2022-03-03 11:08:50 +0800940 local ARCH=arm64
941 if [[ -n $1 ]]; then
942 ARCH=$1
943 fi
944
wanwei.jiang612a8882021-11-23 17:12:23 +0800945 rm rootfs -rf
946 mkdir rootfs
Wanwei Jiang2218b892023-03-17 17:31:21 +0800947 cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot rootfs
wanwei.jiang612a8882021-11-23 17:12:23 +0800948 cd rootfs
949 dd if=rootfs_base.cpio.gz.uboot of=rootfs_base.cpio.gz bs=64 skip=1
950 gunzip rootfs_base.cpio.gz
951 mkdir rootfs
952 cd rootfs
dongqing.li6fd83502023-06-15 09:59:40 +0800953 fakeroot cpio -i -F ../rootfs_base.cpio
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800954 if [ -d ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer ]; then
955 cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer . -rf
qinglin.li3c25dbb2022-01-14 11:23:10 +0800956 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800957 cp -rf ../../modules .
wanwei.jiang8abddcc2022-03-16 21:18:48 +0800958
dongqing.li6fd83502023-06-15 09:59:40 +0800959 find . | fakeroot cpio -o -H newc | gzip > ../rootfs_new.cpio.gz
wanwei.jiang612a8882021-11-23 17:12:23 +0800960 cd ../
Lei Zhang475c17b2022-03-03 11:08:50 +0800961 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 +0800962 mv rootfs_new.cpio.gz.uboot ../
963 cd ../
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800964 cp rootfs_new.cpio.gz.uboot ${DIST_DIR}
wanwei.jiang612a8882021-11-23 17:12:23 +0800965
966 popd
967}
968export -f rebuild_rootfs
wanwei.jiang403c9942021-11-30 18:29:02 +0800969
Dezhen Wang5ad119c2023-05-04 15:07:49 +0800970# function check_undefined_symbol can check the dependence among the modules
971# parameter:
972# --modules_depend
wanwei.jiang403c9942021-11-30 18:29:02 +0800973function check_undefined_symbol() {
Wanwei Jiang2218b892023-03-17 17:31:21 +0800974 if [[ ${MODULES_DEPEND} != "1" ]]; then
975 return
976 fi
977
978 echo "========================================================"
979 echo "print modules depend"
980
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800981 pushd ${OUT_AMLOGIC_DIR}/modules
wanwei.jiang403c9942021-11-30 18:29:02 +0800982 echo
983 echo "========================================================"
984 echo "Functions or variables not defined in this module refer to which module."
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800985 if [[ -n ${LLVM} ]]; then
986 compile_tool=${ROOT_DIR}/${CLANG_PREBUILT_BIN}/llvm-
987 elif [[ -n ${CROSS_COMPILE} ]]; then
988 compile_tool=${CROSS_COMPILE}
989 else
990 echo "can't find compile tool"
991 fi
Wanwei Jiang0a74fb12022-12-09 16:27:40 +0800992 ${compile_tool}nm ${DIST_DIR}/vmlinux | grep -E " T | D | B | R | W "> vmlinux_T.txt
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800993 # cat __install.sh | grep "insmod" | cut -d ' ' -f 2 > module_list.txt
994 cat ramdisk/ramdisk_install.sh | grep "insmod" | cut -d ' ' -f 2 > module_list.txt
995 cat vendor/vendor_install.sh | grep "insmod" | cut -d ' ' -f 2 >> module_list.txt
996 cp ramdisk/*.ko .
997 cp vendor/*.ko .
wanwei.jiang403c9942021-11-30 18:29:02 +0800998 while read LINE
999 do
1000 echo ${LINE}
wanwei.jiang2c818dc2022-03-24 17:48:00 +08001001 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 +08001002 do
1003 #echo ${U}
1004 U_v=`grep -w ${U} vmlinux_T.txt`
1005 in_vmlinux=0
1006 if [ -n "${U_v}" ];
1007 then
wanwei.jiangd7b29ef2021-12-01 19:59:41 +08001008 #printf "\t%-50s <== vmlinux\n" ${U}
wanwei.jiang403c9942021-11-30 18:29:02 +08001009 in_vmlinux=1
1010 continue
1011 fi
1012 in_module=0
1013 MODULE=
1014 while read LINE1
1015 do
wanwei.jiang2c818dc2022-03-24 17:48:00 +08001016 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 +08001017 if [ -n "${U_m}" ];
1018 then
1019 in_module=1
1020 MODULE=${LINE1}
1021 fi
1022 done < module_list.txt
1023 if [ ${in_module} -eq "1" ];
1024 then
1025 printf "\t%-50s <== %s\n" ${U} ${MODULE}
1026 continue
1027 else
1028 printf "\t%-50s <== none\n" ${U}
1029 fi
1030 done
1031 echo
1032 echo
1033 done < module_list.txt
1034 rm vmlinux_T.txt
1035 rm module_list.txt
wanwei.jiang2c818dc2022-03-24 17:48:00 +08001036 rm *.ko
wanwei.jiang403c9942021-11-30 18:29:02 +08001037 popd
1038}
1039export -f check_undefined_symbol
Dezhen Wangd40fa552023-04-11 16:13:27 +08001040
1041function reorganized_abi_symbol_list_file() { # delete the extra information but symbol
1042 cat $@ | sed '/^$/d' >> ${symbol_tmp} # remove blank lines
1043 sed -i '/^\[/d' ${symbol_tmp} # remove the title
1044 sed -i '/^\#/d' ${symbol_tmp} # remove the comment
1045}
1046export -f reorganized_abi_symbol_list_file
1047
1048function abi_symbol_list_detect () { # detect symbol information that should be submitted or fix
Dezhen Wang3e94b292023-07-10 20:14:57 +08001049 if [[ "${FULL_KERNEL_VERSION}" = "common13-5.15" ]]; then
1050 symbol_file1=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic
1051 symbol_file2=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.10
1052 symbol_file3=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.debug
1053 symbol_file4=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.illegal
1054 else
1055 symbol_file1=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic
1056 symbol_file2=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic.10
1057 symbol_file3=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic.debug
1058 symbol_file4=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic.illegal
1059 fi
Dezhen Wangd40fa552023-04-11 16:13:27 +08001060
1061 file_list=("${symbol_file1} ${symbol_file2} ${symbol_file3} ${symbol_file4}")
1062 for file in ${file_list}
1063 do
1064 local symbol_tmp=`mktemp tmp.XXXXXXXXXXXX`
1065 reorganized_abi_symbol_list_file "${file}"
1066
1067 if [[ -s ${symbol_tmp} ]]; then
1068 if [[ ${file} =~ abi_gki_aarch64_amlogic.illegal ]]; then
1069 echo "WARNING: The symbols in ${file} are illegal, please deal with them as soon as possible!!!"
1070 else
1071 echo "WARNING: The symbols in ${file} should be submit to google!!!"
1072 fi
1073 cat ${symbol_tmp}
1074 echo -e "\n------------------------------------------------------------"
1075 fi
1076 rm ${symbol_tmp}
1077 done
1078}
1079export -f abi_symbol_list_detect
1080
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001081# adjust_config_action concerns three types of cmd:
1082# parameters:
1083# --menuconfig: make menuconfig manually based on different gki standard
1084# --basicconfig: only config kernel with google original gki_defconfig as base
1085# --check_defconfig: contrast the defconfig generated in out directory with gki_defconfig and show the difference
1086function adjust_config_action () {
1087 if [[ -n ${MENUCONFIG} ]] || [[ -n ${BASICCONFIG} ]] || [[ ${CHECK_DEFCONFIG} -eq "1" ]]; then
1088 # ${ROOT_DIR}/${BUILD_DIR}/config.sh menuconfig
1089 HERMETIC_TOOLCHAIN=0
Dezhen Wang2edb5232023-07-06 14:15:33 +08001090
1091 if [[ "${FULL_KERNEL_VERSION}" = "common13-5.15" ]]; then
1092 source "${ROOT_DIR}/${BUILD_DIR}/build_utils.sh"
1093 source "${ROOT_DIR}/${BUILD_DIR}/_setup_env.sh"
1094 else
1095 source ${ROOT_DIR}/${BUILD_CONFIG}
1096 export COMMON_OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out${OUT_DIR_SUFFIX}/${BRANCH}})
1097 export OUT_DIR=$(readlink -m ${COMMON_OUT_DIR}/${KERNEL_DIR})
1098 fi
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001099
1100 orig_config=$(mktemp)
1101 orig_defconfig=$(mktemp)
1102 out_config="${OUT_DIR}/.config"
1103 out_defconfig="${OUT_DIR}/defconfig"
1104 changed_config=$(mktemp)
1105 changed_defconfig=$(mktemp)
1106
1107 if [[ -n ${BASICCONFIG} ]]; then # config kernel with gki_defconfig or make menuconfig based on it
1108 set -x
1109 defconfig_name=`basename ${GKI_BASE_CONFIG}`
1110 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${defconfig_name})
1111 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1112 cp ${out_config} ${orig_config}
1113 cp ${out_defconfig} ${orig_defconfig}
1114 if [ "${BASICCONFIG}" = "m" ]; then # make menuconfig based on gki_defconfig
1115 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" menuconfig)
1116 fi
1117 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1118 ${KERNEL_DIR}/scripts/diffconfig ${orig_config} ${out_config} > ${changed_config}
1119 ${KERNEL_DIR}/scripts/diffconfig ${orig_defconfig} ${out_defconfig} > ${changed_defconfig}
1120 if [ "${ARCH}" = "arm" ]; then
1121 cp ${out_defconfig} ${GKI_BASE_CONFIG}
1122 fi
1123 set +x # show the difference between the gki_defconfig and the config after make menuconfig
1124 echo
1125 echo "========================================================"
1126 echo "==================== .config diff ===================="
1127 cat ${changed_config}
1128 echo "==================== defconfig diff ===================="
1129 cat ${changed_defconfig}
1130 echo "========================================================"
1131 echo
1132 elif [[ ${CHECK_DEFCONFIG} -eq "1" ]]; then # compare the defconfig generated in out directory with gki_defconfig
1133 set -x
1134 pre_defconfig_cmds
1135 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
1136 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig) # export the defconfig to out directory
1137 diff -u ${ROOT_DIR}/${GKI_BASE_CONFIG} ${OUT_DIR}/defconfig
1138 post_defconfig_cmds
1139 set +x
1140 else # make menuconfig based on config with different gki standard
1141 set -x
1142 pre_defconfig_cmds
1143 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
1144 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1145 cp ${out_config} ${orig_config}
1146 cp ${out_defconfig} ${orig_defconfig}
1147 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" menuconfig)
1148 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1149 ${KERNEL_DIR}/scripts/diffconfig ${orig_config} ${out_config} > ${changed_config}
1150 ${KERNEL_DIR}/scripts/diffconfig ${orig_defconfig} ${out_defconfig} > ${changed_defconfig}
1151 post_defconfig_cmds
1152 set +x
1153 echo
1154 echo "========================================================"
1155 echo "if the config follows GKI2.0, please add it to the file amlogic_gki.fragment manually"
1156 echo "if the config follows GKI1.0 optimize, please add it to the file amlogic_gki.10 manually"
1157 echo "if the config follows GKI1.0 debug, please add it to the file amlogic_gki.debug manually"
1158 echo "==================== .config diff ===================="
1159 cat ${changed_config}
1160 echo "==================== defconfig diff ===================="
1161 cat ${changed_defconfig}
1162 echo "========================================================"
1163 echo
1164 fi
1165 rm -f ${orig_config} ${changed_config} ${orig_defconfig} ${changed_defconfig}
1166 exit
1167 fi
1168}
1169export -f adjust_config_action
1170
Dezhen Wangc5c95c32023-07-09 23:14:12 +08001171if [[ "${FULL_KERNEL_VERSION}" != "common13-5.15" ]]; then
1172 function rel_path() {
1173 echo "WARNING: rel_path is deprecated. For Kleaf builds, use 'realpath $1 --relative-to $2' instead." >&2
1174 ${ROOT_DIR}/build/kernel/build-tools/path/linux-x86/realpath "$1" --relative-to="$2"
1175 }
1176fi
1177
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001178# function build_part_of_kernel can only build part of kernel such as image modules or dtbs
1179# parameter:
1180# --image: only build image
1181# --modules: only build kernel modules
1182# --dtbs: only build dtbs
1183function build_part_of_kernel () {
1184 if [[ -n ${IMAGE} ]] || [[ -n ${MODULES} ]] || [[ -n ${DTB_BUILD} ]]; then
1185 old_path=${PATH}
Dezhen Wangc5c95c32023-07-09 23:14:12 +08001186 if [[ "${FULL_KERNEL_VERSION}" = "common13-5.15" ]]; then
1187 source "${ROOT_DIR}/${BUILD_DIR}/build_utils.sh"
1188 source "${ROOT_DIR}/${BUILD_DIR}/_setup_env.sh"
1189 else
1190 source ${ROOT_DIR}/${BUILD_CONFIG}
1191 export COMMON_OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out${OUT_DIR_SUFFIX}/${BRANCH}})
1192 export OUT_DIR=$(readlink -m ${COMMON_OUT_DIR}/${KERNEL_DIR})
1193 export DIST_DIR=$(readlink -m ${DIST_DIR:-${COMMON_OUT_DIR}/dist})
1194 tool_args+=("LLVM=1")
1195 tool_args+=("DEPMOD=${DEPMOD}")
1196 fi
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001197
1198 if [[ ! -f ${OUT_DIR}/.config ]]; then
1199 pre_defconfig_cmds
1200 set -x
1201 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
1202 set +x
1203 post_defconfig_cmds
1204 fi
1205
1206 if [[ -n ${IMAGE} ]]; then
1207 set -x
1208 if [ "${ARCH}" = "arm64" ]; then
1209 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) Image)
1210 elif [ "${ARCH}" = "arm" ]; then
1211 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) LOADADDR=0x108000 uImage)
1212 fi
1213 set +x
1214 fi
1215 mkdir -p ${DIST_DIR}
1216 if [[ -n ${DTB_BUILD} ]]; then
1217 set -x
1218 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) dtbs)
1219 set +x
1220 fi
1221 if [[ -n ${MODULES} ]]; then
1222 export MODULES_STAGING_DIR=$(readlink -m ${COMMON_OUT_DIR}/staging)
1223 rm -rf ${MODULES_STAGING_DIR}
1224 mkdir -p ${MODULES_STAGING_DIR}
1225 if [ "${DO_NOT_STRIP_MODULES}" != "1" ]; then
1226 MODULE_STRIP_FLAG="INSTALL_MOD_STRIP=1"
1227 fi
1228 if [[ `grep "CONFIG_AMLOGIC_IN_KERNEL_MODULES=y" ${ROOT_DIR}/${FRAGMENT_CONFIG}` ]]; then
1229 set -x
1230 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) modules)
1231 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} INSTALL_MOD_PATH=${MODULES_STAGING_DIR} "${MAKE_ARGS[@]}" modules_install)
1232 set +x
1233 fi
1234 echo EXT_MODULES=$EXT_MODULES
1235 prepare_module_build
1236 if [[ -z "${SKIP_EXT_MODULES}" ]] && [[ -n "${EXT_MODULES}" ]]; then
1237 echo "========================================================"
1238 echo " Building external modules and installing them into staging directory"
1239 KERNEL_UAPI_HEADERS_DIR=$(readlink -m ${COMMON_OUT_DIR}/kernel_uapi_headers)
1240 for EXT_MOD in ${EXT_MODULES}; do
1241 EXT_MOD_REL=$(rel_path ${ROOT_DIR}/${EXT_MOD} ${KERNEL_DIR})
1242 mkdir -p ${OUT_DIR}/${EXT_MOD_REL}
1243 set -x
1244 make -C ${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1245 O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}"
1246 make -C ${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1247 O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} \
1248 INSTALL_MOD_PATH=${MODULES_STAGING_DIR} \
1249 INSTALL_MOD_DIR="extra/${EXT_MOD}" \
1250 INSTALL_HDR_PATH="${KERNEL_UAPI_HEADERS_DIR}/usr" \
1251 "${MAKE_ARGS[@]}" modules_install
1252 set +x
1253 done
1254 fi
1255 export OUT_AMLOGIC_DIR=$(readlink -m ${COMMON_OUT_DIR}/amlogic)
1256 set -x
1257 extra_cmds
1258 set +x
1259 MODULES=$(find ${MODULES_STAGING_DIR} -type f -name "*.ko")
1260 cp -p ${MODULES} ${DIST_DIR}
1261
1262 new_path=${PATH}
1263 PATH=${old_path}
1264 echo "========================================================"
1265 if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then
1266 echo "Rebuild rootfs in order to install modules!"
1267 rebuild_rootfs ${ARCH}
1268 else
1269 echo "There's no file ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot, so don't rebuild rootfs!"
1270 fi
1271 PATH=${new_path}
1272 fi
1273 if [ -n "${DTS_EXT_DIR}" ]; then
1274 if [ -d "${ROOT_DIR}/${DTS_EXT_DIR}" ]; then
1275 DTS_EXT_DIR=$(rel_path ${ROOT_DIR}/${DTS_EXT_DIR} ${KERNEL_DIR})
1276 if [ -d ${OUT_DIR}/${DTS_EXT_DIR} ]; then
1277 FILES="$FILES `ls ${OUT_DIR}/${DTS_EXT_DIR}`"
1278 fi
1279 fi
1280 fi
1281 for FILE in ${FILES}; do
1282 if [ -f ${OUT_DIR}/${FILE} ]; then
1283 echo " $FILE"
1284 cp -p ${OUT_DIR}/${FILE} ${DIST_DIR}/
1285 elif [[ "${FILE}" =~ \.dtb|\.dtbo ]] && \
1286 [ -n "${DTS_EXT_DIR}" ] && [ -f "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" ] ; then
1287 # DTS_EXT_DIR is recalculated before to be relative to KERNEL_DIR
1288 echo " $FILE"
1289 cp -p "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" "${DIST_DIR}/"
1290 else
1291 echo " $FILE is not a file, skipping"
1292 fi
1293 done
1294 exit
1295 fi
1296}
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001297export -f build_part_of_kernel
1298
1299function export_env_variable () {
1300 export ABI BUILD_CONFIG LTO KMI_SYMBOL_LIST_STRICT_MODE CHECK_DEFCONFIG MANUAL_INSMOD_MODULE ARCH
qinglin.libce54712023-05-08 13:56:31 +08001301 export KERNEL_DIR COMMON_DRIVERS_DIR BUILD_DIR ANDROID_PROJECT GKI_CONFIG UPGRADE_PROJECT ANDROID_VERSION FAST_BUILD CHECK_GKI_20 DEV_CONFIGS
qinglin.li7cf37c02023-07-04 16:06:04 +08001302 export FULL_KERNEL_VERSION BAZEL PREBUILT_GKI KASAN
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001303
1304 echo ROOT_DIR=$ROOT_DIR
1305 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 +08001306 echo KERNEL_DIR=${KERNEL_DIR} COMMON_DRIVERS_DIR=${COMMON_DRIVERS_DIR} BUILD_DIR=${BUILD_DIR} ANDROID_PROJECT=${ANDROID_PROJECT} GKI_CONFIG=${GKI_CONFIG} UPGRADE_PROJECT=${UPGRADE_PROJECT} ANDROID_VERSION=${ANDROID_VERSION} FAST_BUILD=${FAST_BUILD} CHECK_GKI_20=${CHECK_GKI_20}
qinglin.li7cf37c02023-07-04 16:06:04 +08001307 echo FULL_KERNEL_VERSION=${FULL_KERNEL_VERSION} BAZEL=${BAZEL} PREBUILT_GKI=${PREBUILT_GKI} KASAN=${KASAN}
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001308 echo MENUCONFIG=${MENUCONFIG} BASICCONFIG=${BASICCONFIG} IMAGE=${IMAGE} MODULES=${MODULES} DTB_BUILD=${DTB_BUILD}
1309}
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001310export -f export_env_variable
Dezhen Wang850c0d22023-05-31 19:26:20 +08001311
1312function handle_input_parameters () {
1313 VA=
1314 ARGS=()
1315 for i in "$@"
1316 do
1317 case $i in
1318 --arch)
1319 ARCH=$2
1320 VA=1
1321 shift
1322 ;;
1323 --abi)
1324 ABI=1
1325 shift
1326 ;;
1327 --build_config)
1328 BUILD_CONFIG=$2
1329 VA=1
1330 shift
1331 ;;
1332 --lto)
1333 LTO=$2
1334 VA=1
1335 shift
1336 ;;
1337 --symbol_strict)
1338 KMI_SYMBOL_LIST_STRICT_MODE=$2
1339 VA=1
1340 shift
1341 ;;
1342 --menuconfig)
1343 MENUCONFIG=1
1344 shift
1345 ;;
1346 --basicconfig)
1347 if [ "$2" = "m" ] || [ "$2" = "n" ]; then
1348 BASICCONFIG=$2
1349 else
1350 BASICCONFIG="m"
1351 fi
1352 VA=1
1353 shift
1354 ;;
1355 --image)
1356 IMAGE=1
1357 shift
1358 ;;
1359 --modules)
1360 MODULES=1
1361 shift
1362 break
1363 ;;
1364 --dtbs)
1365 DTB_BUILD=1
1366 shift
1367 ;;
1368 --build_dir)
1369 BUILD_DIR=$2
1370 VA=1
1371 shift
1372 ;;
1373 --check_defconfig)
1374 CHECK_DEFCONFIG=1
1375 shift
1376 ;;
1377 --modules_depend)
1378 MODULES_DEPEND=1
1379 shift
1380 ;;
1381 --android_project)
1382 ANDROID_PROJECT=$2
1383 VA=1
1384 shift
1385 ;;
1386 --gki_20)
1387 GKI_CONFIG=gki_20
1388 shift
1389 ;;
1390 --gki_10)
1391 GKI_CONFIG=gki_10
1392 shift
1393 ;;
Dezhen Wang850c0d22023-05-31 19:26:20 +08001394 --fast_build)
1395 FAST_BUILD=1
1396 shift
1397 ;;
1398 --upgrade)
qinglin.li62b23332023-06-25 10:37:41 +08001399 UPGRADE_PROJECT=$2
Dezhen Wang850c0d22023-05-31 19:26:20 +08001400 ANDROID_VERSION=$2
qinglin.li62b23332023-06-25 10:37:41 +08001401 GKI_CONFIG=
Dezhen Wang850c0d22023-05-31 19:26:20 +08001402 VA=1
1403 shift
1404 ;;
1405 --manual_insmod_module)
1406 MANUAL_INSMOD_MODULE=1
1407 shift
1408 ;;
Dezhen Wang850c0d22023-05-31 19:26:20 +08001409 --check_gki_20)
1410 CHECK_GKI_20=1
1411 GKI_CONFIG=gki_20
1412 LTO=none
1413 shift
1414 ;;
1415 --dev_config)
1416 DEV_CONFIGS=$2
1417 VA=1
1418 shift
1419 ;;
Wanwei Jiang0a519f62023-06-30 16:56:28 +08001420 --use_prebuilt_gki)
1421 PREBUILT_GKI=$2
1422 VA=1
Dezhen Wang850c0d22023-05-31 19:26:20 +08001423 shift
1424 ;;
qinglin.li7cf37c02023-07-04 16:06:04 +08001425 --kasan)
1426 KASAN=1
1427 LTO=none
1428 shift
1429 ;;
Dezhen Wang850c0d22023-05-31 19:26:20 +08001430 -h|--help)
1431 show_help
1432 exit 0
1433 ;;
1434 *)
1435 if [[ -n $1 ]];
1436 then
1437 if [[ -z ${VA} ]];
1438 then
1439 ARGS+=("$1")
1440 fi
1441 fi
1442 VA=
1443 shift
1444 ;;
1445 esac
1446 done
1447}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001448export -f handle_input_parameters
1449
1450function set_default_parameters () {
1451 if [ "${ARCH}" = "arm" ]; then
1452 ARGS+=("LOADADDR=0x108000")
1453 else
1454 ARCH=arm64
1455 fi
1456
1457 if [[ -z "${ABI}" ]]; then
1458 ABI=0
1459 fi
1460 if [[ -z "${LTO}" ]]; then
1461 LTO=thin
1462 fi
1463 if [[ -n ${CHECK_GKI_20} && -z ${ANDROID_PROJECT} ]]; then
1464 ANDROID_PROJECT=ohm
1465 fi
1466
1467 if [[ -z "${BUILD_CONFIG}" ]]; then
1468 if [ "${ARCH}" = "arm64" ]; then
1469 BUILD_CONFIG=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic
1470 elif [ "${ARCH}" = "arm" ]; then
1471 BUILD_CONFIG=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic32
1472 fi
1473 fi
1474 if [[ -z "${BUILD_DIR}" ]]; then
1475 BUILD_DIR=build
1476 fi
1477
1478 version_message=$(grep -rn BRANCH= ${KERNEL_DIR}/build.config.constants)
1479 version_message="common${version_message##*android}"
1480 if [[ -n ${FULL_KERNEL_VERSION} ]]; then
1481 if [[ "${FULL_KERNEL_VERSION}" != "${version_message}" ]]; then
1482 echo "kernel version is not match!!"
1483 exit
1484 fi
1485 else
1486 FULL_KERNEL_VERSION=${version_message}
1487 fi
1488
1489 if [[ -z ${BAZEL} ]]; then
qinglin.li62b23332023-06-25 10:37:41 +08001490 [[ "${FULL_KERNEL_VERSION}" != "common13-5.15" && "${ARCH}" == "arm64" ]] && BAZEL=1
Dezhen Wang850c0d22023-05-31 19:26:20 +08001491 fi
1492
1493 auto_patch_to_common_dir
1494
qinglin.lieafebcf2023-06-27 12:48:22 +08001495 if [[ ! -f ${BUILD_DIR}/build_abi.sh && ${BAZEL} == 0 ]]; then
Dezhen Wang850c0d22023-05-31 19:26:20 +08001496 echo "The directory of build does not exist";
1497 exit
1498 fi
1499
1500 ROOT_DIR=$(readlink -f $(dirname $0))
1501 if [[ ! -f ${ROOT_DIR}/${KERNEL_DIR}/init/main.c ]]; then
1502 ROOT_DIR=`pwd`
1503 if [[ ! -f ${ROOT_DIR}/${KERNEL_DIR}/init/main.c ]]; then
1504 echo "the file path of $0 is incorrect"
1505 exit
1506 fi
1507 fi
1508 export ROOT_DIR
1509
1510 CHECK_DEFCONFIG=${CHECK_DEFCONFIG:-0}
1511 MODULES_DEPEND=${MODULES_DEPEND:-0}
1512 if [[ ! -f ${KERNEL_BUILD_VAR_FILE} ]]; then
1513 export KERNEL_BUILD_VAR_FILE=`mktemp /tmp/kernel.XXXXXXXXXXXX`
1514 RM_KERNEL_BUILD_VAR_FILE=1
1515 fi
1516
Dezhen Wang850c0d22023-05-31 19:26:20 +08001517 export CROSS_COMPILE=
1518
1519 if [ "${ABI}" -eq "1" ]; then
1520 export OUT_DIR_SUFFIX="_abi"
1521 else
1522 OUT_DIR_SUFFIX=
1523 fi
1524}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001525export -f set_default_parameters
1526
1527function auto_patch_to_common_dir () {
1528 #first auto patch when param parse end
Dezhen Wang850c0d22023-05-31 19:26:20 +08001529
1530 if [[ -f ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/auto_patch/auto_patch.sh ]]; then
1531 export PATCH_PARM
1532 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/auto_patch/auto_patch.sh ${FULL_KERNEL_VERSION}
Dezhen Wang4e608102023-07-05 18:55:30 +08001533 if [[ $? -ne 0 ]]; then
1534 echo "auto patch error!"
1535 exit 1
1536 fi
Dezhen Wang850c0d22023-05-31 19:26:20 +08001537 fi
1538
1539 if [[ ${ONLY_PATCH} -eq "1" ]]; then
1540 cd ${CURRENT_DIR}
1541 exit
1542 fi
1543}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001544export -f auto_patch_to_common_dir
1545
Dezhen Wang850c0d22023-05-31 19:26:20 +08001546function handle_input_parameters_for_smarthome () {
1547 VA=
1548 ARGS=()
1549 for i in "$@"
1550 do
1551 case $i in
1552 --savedefconfig)
1553 SAVEDEFCONFIG=1
1554 shift
1555 ;;
1556 --menuconfig)
1557 MENUCONFIG=1
1558 shift
1559 ;;
1560 --dtb)
1561 DTB=1
1562 shift
1563 ;;
1564 --manual_insmod_module)
1565 MANUAL_INSMOD_MODULE=1
1566 shift
1567 ;;
1568 --patch)
1569 ONLY_PATCH=1
1570 shift
1571 ;;
1572 -h|--help)
1573 show_help
1574 exit 0
1575 ;;
1576 *)
1577 if [[ -n $1 ]];
1578 then
1579 if [[ -z ${VA} ]];
1580 then
1581 ARGS+=("$1")
1582 fi
1583 fi
1584 VA=
1585 shift
1586 ;;
1587 esac
1588 done
1589}
1590
1591export -f handle_input_parameters_for_smarthome
1592
1593function set_default_parameters_for_smarthome () {
1594 version_message=$(grep -rn BRANCH= ${KERNEL_DIR}/build.config.constants)
1595 version_message="common${version_message##*android}"
1596 if [[ -n ${FULL_KERNEL_VERSION} ]]; then
1597 if [[ "${FULL_KERNEL_VERSION}" != "${version_message}" ]]; then
1598 echo "kernel version is not match!!"
1599 exit
1600 fi
1601 else
1602 FULL_KERNEL_VERSION=${version_message}
1603 fi
1604
1605 tool_args=()
1606 prebuilts_paths=(
1607 CLANG_PREBUILT_BIN
1608 #BUILDTOOLS_PREBUILT_BIN
1609 )
1610 echo CC_CLANG=$CC_CLANG
1611 if [[ $CC_CLANG -eq "1" ]]; then
1612 source ${ROOT_DIR}/${KERNEL_DIR}/build.config.common
1613 if [[ -n "${LLVM}" ]]; then
1614 tool_args+=("LLVM=1")
1615 fi
1616 #if [ -n "${DTC}" ]; then
1617 # tool_args+=("DTC=${DTC}")
1618 #fi
1619 for prebuilt_bin in "${prebuilts_paths[@]}"; do
1620 prebuilt_bin=\${${prebuilt_bin}}
1621 eval prebuilt_bin="${prebuilt_bin}"
1622 if [ -n "${prebuilt_bin}" ]; then
1623 PATH=${PATH//"${ROOT_DIR}\/${prebuilt_bin}:"}
1624 PATH=${ROOT_DIR}/${prebuilt_bin}:${PATH} # add the clang tool to env PATH
1625 fi
1626 done
1627 export PATH
1628 elif [[ -n $CROSS_COMPILE_TOOL ]]; then
1629 export CROSS_COMPILE=${CROSS_COMPILE_TOOL}
1630 fi
1631
1632 if [[ $ARCH == arm64 ]]; then
1633 OUTDIR=${ROOT_DIR}/out/kernel-5.15-64
1634 elif [[ $ARCH == arm ]]; then
1635 OUTDIR=${ROOT_DIR}/out/kernel-5.15-32
Dezhen Wang1176fad2023-06-09 11:22:17 +08001636 tool_args+=("LOADADDR=0x108000")
Dezhen Wang850c0d22023-05-31 19:26:20 +08001637 elif [[ $ARCH == riscv ]]; then
1638 OUTDIR=${ROOT_DIR}/out/riscv-kernel-5.15-64
1639 fi
1640 TOOL_ARGS="${tool_args[@]}"
1641
1642 OUT_DIR=${OUTDIR}/common
1643 mkdir -p ${OUT_DIR}
1644 if [ "${SKIP_RM_OUTDIR}" != "1" ] ; then
1645 rm -rf ${OUTDIR}
1646 fi
1647
1648 echo "========================================================"
1649 echo ""
1650 export DIST_DIR=$(readlink -m ${OUTDIR}/dist)
1651 export MODULES_STAGING_DIR=$(readlink -m ${OUTDIR}/staging)
1652 export OUT_AMLOGIC_DIR=$(readlink -m ${OUTDIR}/amlogic)
1653 echo OUTDIR=$OUTDIR DIST_DIR=$DIST_DIR MODULES_STAGING_DIR=$MODULES_STAGING_DIR KERNEL_DIR=$KERNEL_DIR
1654
1655
1656 source ${ROOT_DIR}/build/kernel/build_utils.sh
1657
1658 DTS_EXT_DIR=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/boot/dts/amlogic
1659 DTS_EXT_DIR=$(rel_path ${ROOT_DIR}/${DTS_EXT_DIR} ${KERNEL_DIR})
1660 export dtstree=${DTS_EXT_DIR}
1661 export DTC_INCLUDE=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/include
1662
1663 EXT_MODULES="
1664 ${EXT_MODULES}
1665 "
1666
1667 EXT_MODULES_CONFIG="
1668 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/ext_modules_config
1669 "
1670
1671 EXT_MODULES_PATH="
1672 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/ext_modules_path
1673 "
1674
1675 POST_KERNEL_BUILD_CMDS="prepare_module_build"
1676 EXTRA_CMDS="extra_cmds"
1677
1678 IN_KERNEL_MODULES=1
1679}
1680
1681export -f set_default_parameters_for_smarthome
1682
1683function savedefconfig_cmd_for_smarthome () {
1684 if [[ -n ${SAVEDEFCONFIG} ]]; then
1685 set -x
1686 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${DEFCONFIG}
1687 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} savedefconfig
Dezhen Wang1176fad2023-06-09 11:22:17 +08001688 rm ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/configs/${DEFCONFIG}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001689 cp -f ${OUT_DIR}/defconfig ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/configs/${DEFCONFIG}
1690 set +x
1691 exit
1692 fi
1693}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001694export -f savedefconfig_cmd_for_smarthome
1695
1696function only_build_dtb_for_smarthome () {
1697 if [[ -n ${DTB} ]]; then
1698 set -x
1699 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
1700 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs || exit
1701 set +x
1702 exit
1703 fi
1704}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001705export -f only_build_dtb_for_smarthome
1706
1707function make_menuconfig_cmd_for_smarthome () {
1708 if [[ -n ${MENUCONFIG} ]]; then
1709 set -x
1710 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${DEFCONFIG}
1711 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} menuconfig
1712 set +x
1713 exit
1714 fi
1715}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001716export -f make_menuconfig_cmd_for_smarthome
1717
1718function build_kernel_for_different_cpu_architecture () {
1719 set -x
1720 if [[ $ARCH == arm64 ]]; then
1721 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
1722 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} headers_install &&
1723 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} Image -j12 &&
1724 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} modules -j12 &&
1725 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 &&
1726 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs -j12 || exit
Dezhen Wang850c0d22023-05-31 19:26:20 +08001727 elif [[ $ARCH == arm ]]; then
1728 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
1729 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} headers_install &&
1730 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} uImage -j12 &&
1731 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} modules -j12 &&
1732 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 &&
1733 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs -j12 || exit
Dezhen Wang850c0d22023-05-31 19:26:20 +08001734 elif [[ $ARCH == riscv ]]; then
1735 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
1736 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} headers_install &&
1737 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} Image -j12 &&
1738 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} modules -j12 &&
1739 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} INSTALL_MOD_PATH=${MODULES_STAGING_DIR} modules_install -j12 &&
1740 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs -j12 || exit
Dezhen Wang850c0d22023-05-31 19:26:20 +08001741 fi
1742 cp ${OUT_DIR}/arch/${ARCH}/boot/Image* ${DIST_DIR}
1743 cp ${OUT_DIR}/arch/${ARCH}/boot/uImage* ${DIST_DIR}
1744 cp ${OUT_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/boot/dts/amlogic/*.dtb ${DIST_DIR}
1745 cp ${OUT_DIR}/vmlinux ${DIST_DIR}
1746 set +x
1747}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001748export -f build_kernel_for_different_cpu_architecture
1749
1750function build_ext_modules() {
1751 for EXT_MOD in ${EXT_MODULES}; do
1752 EXT_MOD_REL=$(rel_path ${ROOT_DIR}/${EXT_MOD} ${KERNEL_DIR})
1753 mkdir -p ${OUT_DIR}/${EXT_MOD_REL}
1754
1755 set -x
1756 make ARCH=${ARCH} -C ${ROOT_DIR}/${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1757 O=${OUT_DIR} ${TOOL_ARGS} -j12 || exit
1758 make ARCH=${ARCH} -C ${ROOT_DIR}/${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1759 O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} \
1760 INSTALL_MOD_PATH=${MODULES_STAGING_DIR} \
1761 INSTALL_MOD_DIR="extra/${EXT_MOD}" \
1762 INSTALL_MOD_STRIP=1 \
1763 modules_install -j12 || exit
1764 set +x
1765 done
1766}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001767export -f build_ext_modules
1768
1769function copy_modules_and_rebuild_rootfs_for_smarthome () {
Dezhen Wang1176fad2023-06-09 11:22:17 +08001770
1771 copy_modules_files_to_dist_dir
1772
1773 if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then
1774 echo "========================================================"
1775 echo "Rebuild rootfs in order to install modules!"
1776 rebuild_rootfs ${ARCH}
1777 echo "Build success!"
1778 else
1779 echo "There's no file ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot, so don't rebuild rootfs!"
1780 fi
1781}
1782export -f copy_modules_and_rebuild_rootfs_for_smarthome
1783
1784function copy_modules_files_to_dist_dir () {
Dezhen Wang850c0d22023-05-31 19:26:20 +08001785 MODULES=$(find ${MODULES_STAGING_DIR} -type f -name "*.ko")
1786 if [ -n "${MODULES}" ]; then
1787 if [ -n "${IN_KERNEL_MODULES}" -o -n "${EXT_MODULES}" -o -n "${EXT_MODULES_MAKEFILE}" ]; then
1788 echo "========================================================"
1789 echo " Copying modules files"
1790 for module in ${MODULES}; do
1791 cp ${module} ${DIST_DIR}
1792 done
1793 if [ "${COMPRESS_MODULES}" = "1" ]; then
1794 echo " Archiving modules to ${MODULES_ARCHIVE}"
1795 tar --transform="s,.*/,," -czf ${DIST_DIR}/${MODULES_ARCHIVE} ${MODULES[@]}
1796 fi
1797 fi
Dezhen Wang850c0d22023-05-31 19:26:20 +08001798 fi
1799}
Dezhen Wang1176fad2023-06-09 11:22:17 +08001800export -f copy_modules_files_to_dist_dir
Dezhen Wang850c0d22023-05-31 19:26:20 +08001801
Dezhen Wang1176fad2023-06-09 11:22:17 +08001802function copy_files_to_dist_dir () {
1803 echo "========================================================"
1804 echo " Copying files"
1805 for FILE in ${FILES}; do
1806 if [ -f ${OUT_DIR}/${FILE} ]; then
1807 echo " $FILE"
1808 cp -p ${OUT_DIR}/${FILE} ${DIST_DIR}/
1809 elif [[ "${FILE}" =~ \.dtb|\.dtbo ]] && \
1810 [ -n "${DTS_EXT_DIR}" ] && [ -f "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" ] ; then
1811 # DTS_EXT_DIR is recalculated before to be relative to KERNEL_DIR
1812 echo " $FILE"
1813 cp -p "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" "${DIST_DIR}/"
1814 else
1815 echo " $FILE is not a file, skipping"
1816 fi
1817 done
1818}
1819export -f copy_files_to_dist_dir
1820
1821function make_dtbo() {
1822 if [[ -n "${BUILD_DTBO_IMG}" ]]; then
1823 echo "========================================================"
1824 echo " Creating dtbo image at ${DIST_DIR}/dtbo.img"
1825 (
1826 cd ${OUT_DIR}
1827 mkdtimg create "${DIST_DIR}"/dtbo.img ${MKDTIMG_FLAGS} ${MKDTIMG_DTBOS}
1828 )
1829 fi
1830}
1831export -f make_dtbo
1832
1833function installing_UAPI_kernel_headers () {
1834 if [ -z "${SKIP_CP_KERNEL_HDR}" ]; then
1835 echo "========================================================"
1836 echo " Installing UAPI kernel headers:"
1837 mkdir -p "${KERNEL_UAPI_HEADERS_DIR}/usr"
1838 make -C ${OUT_DIR} O=${OUT_DIR} ${TOOL_ARGS} \
1839 INSTALL_HDR_PATH="${KERNEL_UAPI_HEADERS_DIR}/usr" "${MAKE_ARGS[@]}" \
1840 headers_install
1841 # The kernel makefiles create files named ..install.cmd and .install which
1842 # are only side products. We don't want those. Let's delete them.
1843 find ${KERNEL_UAPI_HEADERS_DIR} \( -name ..install.cmd -o -name .install \) -exec rm '{}' +
1844 KERNEL_UAPI_HEADERS_TAR=${DIST_DIR}/kernel-uapi-headers.tar.gz
1845 echo " Copying kernel UAPI headers to ${KERNEL_UAPI_HEADERS_TAR}"
1846 tar -czf ${KERNEL_UAPI_HEADERS_TAR} --directory=${KERNEL_UAPI_HEADERS_DIR} usr/
1847 fi
1848}
1849export -f installing_UAPI_kernel_headers
1850
1851function copy_kernel_headers_to_compress () {
1852 if [ -z "${SKIP_CP_KERNEL_HDR}" ] ; then
1853 echo "========================================================"
1854 KERNEL_HEADERS_TAR=${DIST_DIR}/kernel-headers.tar.gz
1855 echo " Copying kernel headers to ${KERNEL_HEADERS_TAR}"
1856 pushd $ROOT_DIR/$KERNEL_DIR
1857 find arch include $OUT_DIR -name *.h -print0 \
1858 | tar -czf $KERNEL_HEADERS_TAR \
1859 --absolute-names \
1860 --dereference \
1861 --transform "s,.*$OUT_DIR,," \
1862 --transform "s,^,kernel-headers/," \
1863 --null -T -
1864 popd
1865 fi
1866}
1867export -f copy_kernel_headers_to_compress
1868
1869function set_default_parameters_for_32bit () {
1870 tool_args=()
1871 prebuilts_paths=(
1872 CLANG_PREBUILT_BIN
1873 CLANGTOOLS_PREBUILT_BIN
1874 RUST_PREBUILT_BIN
1875 LZ4_PREBUILTS_BIN
1876 DTC_PREBUILTS_BIN
1877 LIBUFDT_PREBUILTS_BIN
1878 BUILDTOOLS_PREBUILT_BIN
1879 )
1880 echo CC_CLANG=$CC_CLANG
1881 if [[ $CC_CLANG -eq "1" ]]; then
1882 source ${ROOT_DIR}/${KERNEL_DIR}/build.config.common
1883 if [[ -n "${LLVM}" ]]; then
1884 tool_args+=("LLVM=1")
1885 # Reset a bunch of variables that the kernel's top level Makefile does, just
1886 # in case someone tries to use these binaries in this script such as in
1887 # initramfs generation below.
1888 HOSTCC=clang
1889 HOSTCXX=clang++
1890 CC=clang
1891 LD=ld.lld
1892 AR=llvm-ar
1893 NM=llvm-nm
1894 OBJCOPY=llvm-objcopy
1895 OBJDUMP=llvm-objdump
1896 OBJSIZE=llvm-size
1897 READELF=llvm-readelf
1898 STRIP=llvm-strip
1899 else
1900 if [ -n "${HOSTCC}" ]; then
1901 tool_args+=("HOSTCC=${HOSTCC}")
1902 fi
1903
1904 if [ -n "${CC}" ]; then
1905 tool_args+=("CC=${CC}")
1906 if [ -z "${HOSTCC}" ]; then
1907 tool_args+=("HOSTCC=${CC}")
1908 fi
1909 fi
1910
1911 if [ -n "${LD}" ]; then
1912 tool_args+=("LD=${LD}" "HOSTLD=${LD}")
1913 fi
1914
1915 if [ -n "${NM}" ]; then
1916 tool_args+=("NM=${NM}")
1917 fi
1918
1919 if [ -n "${OBJCOPY}" ]; then
1920 tool_args+=("OBJCOPY=${OBJCOPY}")
1921 fi
1922 fi
1923
1924 if [ -n "${DTC}" ]; then
1925 tool_args+=("DTC=${DTC}")
1926 fi
1927 for prebuilt_bin in "${prebuilts_paths[@]}"; do
1928 prebuilt_bin=\${${prebuilt_bin}}
1929 eval prebuilt_bin="${prebuilt_bin}"
1930 if [ -n "${prebuilt_bin}" ]; then
1931 PATH=${PATH//"${ROOT_DIR}\/${prebuilt_bin}:"}
1932 PATH=${ROOT_DIR}/${prebuilt_bin}:${PATH} # add the clang tool to env PATH
1933 fi
1934 done
1935 export PATH
1936 elif [[ -n $CROSS_COMPILE_TOOL ]]; then
1937 export CROSS_COMPILE=${CROSS_COMPILE_TOOL}
1938 fi
1939
1940 # Have host compiler use LLD and compiler-rt.
1941 LLD_COMPILER_RT="-fuse-ld=lld --rtlib=compiler-rt"
1942 if [[ -n "${NDK_TRIPLE}" ]]; then
1943 NDK_DIR=${ROOT_DIR}/prebuilts/ndk-r23
1944
1945 if [[ ! -d "${NDK_DIR}" ]]; then
1946 # Kleaf/Bazel will checkout the ndk to a different directory than
1947 # build.sh.
1948 NDK_DIR=${ROOT_DIR}/external/prebuilt_ndk
1949 if [[ ! -d "${NDK_DIR}" ]]; then
1950 echo "ERROR: NDK_TRIPLE set, but unable to find prebuilts/ndk." 1>&2
1951 echo "Did you forget to checkout prebuilts/ndk?" 1>&2
1952 exit 1
1953 fi
1954 fi
1955 USERCFLAGS="--target=${NDK_TRIPLE} "
1956 USERCFLAGS+="--sysroot=${NDK_DIR}/toolchains/llvm/prebuilt/linux-x86_64/sysroot "
1957 # Some kernel headers trigger -Wunused-function for unused static functions
1958 # with clang; GCC does not warn about unused static inline functions. The
1959 # kernel sets __attribute__((maybe_unused)) on such functions when W=1 is
1960 # not set.
1961 USERCFLAGS+="-Wno-unused-function "
1962 # To help debug these flags, consider commenting back in the following, and
1963 # add `echo $@ > /tmp/log.txt` and `2>>/tmp/log.txt` to the invocation of $@
1964 # in scripts/cc-can-link.sh.
1965 #USERCFLAGS+=" -Wl,--verbose -v"
1966 # We need to set -fuse-ld=lld for Android's build env since AOSP LLVM's
1967 # clang is not configured to use LLD by default, and BFD has been
1968 # intentionally removed. This way CC_CAN_LINK can properly link the test in
1969 # scripts/cc-can-link.sh.
1970 USERLDFLAGS="${LLD_COMPILER_RT} "
1971 USERLDFLAGS+="--target=${NDK_TRIPLE} "
1972 else
1973 USERCFLAGS="--sysroot=/dev/null"
1974 fi
1975
1976 #setting_the_default_output_dir
1977 export COMMON_OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out${OUT_DIR_SUFFIX}/${BRANCH}})
1978 export OUT_DIR=$(readlink -m ${COMMON_OUT_DIR}/${KERNEL_DIR})
1979 export DIST_DIR=$(readlink -m ${DIST_DIR:-${COMMON_OUT_DIR}/dist})
1980 export UNSTRIPPED_DIR=${DIST_DIR}/unstripped
1981 export UNSTRIPPED_MODULES_ARCHIVE=unstripped_modules.tar.gz
1982 export MODULES_ARCHIVE=modules.tar.gz
1983 export MODULES_STAGING_DIR=$(readlink -m ${COMMON_OUT_DIR}/staging)
1984 export MODULES_PRIVATE_DIR=$(readlink -m ${COMMON_OUT_DIR}/private)
1985 export KERNEL_UAPI_HEADERS_DIR=$(readlink -m ${COMMON_OUT_DIR}/kernel_uapi_headers)
1986 export INITRAMFS_STAGING_DIR=${MODULES_STAGING_DIR}/initramfs_staging
1987 export SYSTEM_DLKM_STAGING_DIR=${MODULES_STAGING_DIR}/system_dlkm_staging
1988 export VENDOR_DLKM_STAGING_DIR=${MODULES_STAGING_DIR}/vendor_dlkm_staging
1989 export MKBOOTIMG_STAGING_DIR="${MODULES_STAGING_DIR}/mkbootimg_staging"
1990 export OUT_AMLOGIC_DIR=$(readlink -m ${COMMON_OUT_DIR}/amlogic)
1991
1992 tool_args+=("LOADADDR=0x108000")
1993 tool_args+=("DEPMOD=depmod")
Wanwei Jiang0bde3122023-07-20 10:24:07 +08001994 tool_args+=("KCONFIG_EXT_MODULES_PREFIX=${KCONFIG_EXT_MODULES_PREFIX}")
1995 tool_args+=("KCONFIG_EXT_PREFIX=${KCONFIG_EXT_PREFIX}")
Dezhen Wang1176fad2023-06-09 11:22:17 +08001996 TOOL_ARGS="${tool_args[@]}"
1997
1998 mkdir -p ${OUT_DIR}
1999 if [ "${SKIP_RM_OUTDIR}" != "1" ] ; then
2000 rm -rf ${COMMON_OUT_DIR}
2001 fi
2002
2003 source ${ROOT_DIR}/build/kernel/build_utils.sh
2004
2005 DTS_EXT_DIR=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/boot/dts/amlogic
2006 DTS_EXT_DIR=$(rel_path ${ROOT_DIR}/${DTS_EXT_DIR} ${KERNEL_DIR})
2007 export dtstree=${DTS_EXT_DIR}
2008 export DTC_INCLUDE=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/include
2009
2010 EXT_MODULES="
2011 ${EXT_MODULES}
2012 "
2013
2014 EXT_MODULES_CONFIG="
2015 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/ext_modules_config
2016 "
2017
2018 EXT_MODULES_PATH="
2019 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/ext_modules_path
2020 "
2021
2022 POST_KERNEL_BUILD_CMDS="prepare_module_build"
2023 EXTRA_CMDS="extra_cmds"
2024
2025 IN_KERNEL_MODULES=1
2026}
2027export -f set_default_parameters_for_32bit
2028
2029function generating_test_mappings_zip () {
2030 echo "========================================================"
2031 echo " Generating test_mappings.zip"
2032 TEST_MAPPING_FILES=${OUT_DIR}/test_mapping_files.txt
2033 find ${ROOT_DIR} -name TEST_MAPPING \
2034 -not -path "${ROOT_DIR}/\.git*" \
2035 -not -path "${ROOT_DIR}/\.repo*" \
2036 -not -path "${ROOT_DIR}/out*" \
2037 > ${TEST_MAPPING_FILES}
2038 soong_zip -o ${DIST_DIR}/test_mappings.zip -C ${ROOT_DIR} -l ${TEST_MAPPING_FILES}
2039}
2040export -f generating_test_mappings_zip
2041