blob: 0de3fa825b8a7262cd5e20c275012525744fe206 [file] [log] [blame]
wanwei.jiang91776952021-11-19 13:10:32 +08001#!/bin/bash
2
3function pre_defconfig_cmds() {
wanwei.jiang6fdd3152022-08-01 20:35:05 +08004 if [[ ${GKI_CONFIG} == gki ]]; then
5 KCONFIG_CONFIG=${ROOT_DIR}/${KERNEL_DIR}/arch/arm64/configs/${DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KERNEL_DIR}/arch/arm64/configs/gki_defconfig ${ROOT_DIR}/${FRAGMENT_CONFIG}
6 elif [[ ${GKI_CONFIG} == gki_user ]]; then
7 KCONFIG_CONFIG=${ROOT_DIR}/${KERNEL_DIR}/arch/arm64/configs/${DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KERNEL_DIR}/arch/arm64/configs/gki_defconfig ${ROOT_DIR}/${FRAGMENT_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG_OPTIMIZE}
8 elif [[ ${GKI_CONFIG} == gki_userdebug ]]; then
9 KCONFIG_CONFIG=${ROOT_DIR}/${KERNEL_DIR}/arch/arm64/configs/${DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KERNEL_DIR}/arch/arm64/configs/gki_defconfig ${ROOT_DIR}/${FRAGMENT_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG_OPTIMIZE} ${ROOT_DIR}/${FRAGMENT_CONFIG_DEBUG}
10 fi
wanwei.jiang91776952021-11-19 13:10:32 +080011}
12export -f pre_defconfig_cmds
13
14function post_defconfig_cmds() {
wanwei.jiang1482c872022-05-13 20:33:51 +080015 if [[ ${CHECK_DEFCONFIG} -eq "1" ]]; then
16 check_defconfig
17 fi
wanwei.jiang91776952021-11-19 13:10:32 +080018 rm ${ROOT_DIR}/${KERNEL_DIR}/arch/arm64/configs/${DEFCONFIG}
wanwei.jiang91776952021-11-19 13:10:32 +080019}
20export -f post_defconfig_cmds
21
22function read_ext_module_config() {
23 ALL_LINE=""
24 while read LINE
25 do
26 if [[ $LINE != \#* && $LINE != "" ]]; then
27 ALL_LINE="$ALL_LINE"" ""$LINE"
28 fi
29 done < $1
wanwei.jiang5c861ae2022-04-21 00:51:50 +080030
31 echo "${ALL_LINE}"
wanwei.jiang91776952021-11-19 13:10:32 +080032}
33
34function read_ext_module_predefine() {
35 PRE_DEFINE=""
36
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +080037 for y_config in `cat $1 | grep "^CONFIG_.*=y" | sed 's/=y//'`; do
wanwei.jiang91776952021-11-19 13:10:32 +080038 PRE_DEFINE="$PRE_DEFINE"" -D"${y_config}
39 done
40
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +080041 for m_config in `cat $1 | grep "^CONFIG_.*=m" | sed 's/=m//'`; do
wanwei.jiang91776952021-11-19 13:10:32 +080042 PRE_DEFINE="$PRE_DEFINE"" -D"${m_config}_MODULE
43 done
44
wanwei.jiang5c861ae2022-04-21 00:51:50 +080045 echo "${PRE_DEFINE}"
wanwei.jiang91776952021-11-19 13:10:32 +080046}
47
wanwei.jiang8d4a5132022-04-28 16:43:54 +080048top_ext_drivers=top_ext_drivers
wanwei.jiang91776952021-11-19 13:10:32 +080049function prepare_module_build() {
wanwei.jiang5c861ae2022-04-21 00:51:50 +080050 local temp_file=`mktemp /tmp/kernel.XXXXXXXXXXXX`
wanwei.jiangb9ad1ef2021-12-27 15:23:30 +080051 if [[ -z ${IN_KERNEL_MODULES} ]]; then
wanwei.jiang5c861ae2022-04-21 00:51:50 +080052 sed 's:#.*$::g' ${ROOT_DIR}/${FRAGMENT_CONFIG} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
53 GKI_EXT_KERNEL_MODULE_CONFIG=$(read_ext_module_config ${temp_file})
54 GKI_EXT_KERNEL_MODULE_PREDEFINE=$(read_ext_module_predefine ${temp_file})
55 export GKI_EXT_KERNEL_MODULE_CONFIG GKI_EXT_KERNEL_MODULE_PREDEFINE
wanwei.jiang91776952021-11-19 13:10:32 +080056 fi
wanwei.jiang5c861ae2022-04-21 00:51:50 +080057
58 for ext_module_config in ${EXT_MODULES_CONFIG}; do
59 sed 's:#.*$::g' ${ROOT_DIR}/${ext_module_config} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
60 GKI_EXT_MODULE_CONFIG=$(read_ext_module_config ${temp_file})
61 GKI_EXT_MODULE_PREDEFINE=$(read_ext_module_predefine ${temp_file})
62 done
63 export GKI_EXT_MODULE_CONFIG GKI_EXT_MODULE_PREDEFINE
64 echo GKI_EXT_MODULE_CONFIG=${GKI_EXT_MODULE_CONFIG}
65 echo GKI_EXT_MODULE_PREDEFINE=${GKI_EXT_MODULE_PREDEFINE}
66
wanwei.jiangc663c4c2022-06-16 14:41:23 +080067 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
68 if [[ -d ${top_ext_drivers} ]]; then
69 rm -rf ${top_ext_drivers}
70 fi
71 mkdir -p ${top_ext_drivers}
72 fi
73
74 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
75 extra_symbols="KBUILD_EXTRA_SYMBOLS +="
76 fi
wanwei.jiangcb5c4c82022-04-25 16:47:24 +080077 ext_modules=
78 for ext_module in ${EXT_MODULES}; do
wanwei.jiangc663c4c2022-06-16 14:41:23 +080079 module_abs_path=`readlink -e ${ext_module}`
80 module_rel_path=$(rel_path ${module_abs_path} ${ROOT_DIR})
81 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
82 if [[ `echo ${module_rel_path} | grep "\.\.\/"` ]]; then
83 cp -rf ${module_abs_path} ${top_ext_drivers}
84 module_rel_path=${top_ext_drivers}/${module_abs_path##*/}
85 fi
86 fi
87 ext_modules="${ext_modules} ${module_rel_path}"
wanwei.jiangcb5c4c82022-04-25 16:47:24 +080088 done
wanwei.jiangc663c4c2022-06-16 14:41:23 +080089
wanwei.jiang5c861ae2022-04-21 00:51:50 +080090 for ext_module_path in ${EXT_MODULES_PATH}; do
91 sed 's:#.*$::g' ${ROOT_DIR}/${ext_module_path} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
wanwei.jiang5c861ae2022-04-21 00:51:50 +080092 while read LINE
93 do
wanwei.jiang8d4a5132022-04-28 16:43:54 +080094 module_abs_path=`readlink -e ${LINE}`
95 module_rel_path=$(rel_path ${module_abs_path} ${ROOT_DIR})
wanwei.jiangc663c4c2022-06-16 14:41:23 +080096 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
97 if [[ `echo ${module_rel_path} | grep "\.\.\/"` ]]; then
98 cp -rf ${module_abs_path} ${top_ext_drivers}
99 module_rel_path=${top_ext_drivers}/${module_abs_path##*/}
100 fi
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800101 fi
102 ext_modules="${ext_modules} ${module_rel_path}"
103
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800104 done < ${temp_file}
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800105 done
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800106 EXT_MODULES=${ext_modules}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800107
108 local flag=0
109 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
110 for ext_module in ${EXT_MODULES}; do
111 ext_mod_rel=$(rel_path ${ext_module} ${KERNEL_DIR})
112 if [[ ${flag} -eq "1" ]]; then
113 sed -i "/# auto add KBUILD_EXTRA_SYMBOLS start/,/# auto add KBUILD_EXTRA_SYMBOLS end/d" ${ext_module}/Makefile
114 sed -i "2 i # auto add KBUILD_EXTRA_SYMBOLS end" ${ext_module}/Makefile
115 sed -i "2 i ${extra_symbols}" ${ext_module}/Makefile
116 sed -i "2 i # auto add KBUILD_EXTRA_SYMBOLS start" ${ext_module}/Makefile
117 echo "${ext_module}/Makefile add: ${extra_symbols}"
118 fi
119 extra_symbols="${extra_symbols} ${ext_mod_rel}/Module.symvers"
120 flag=1
121 done
122 fi
123
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800124 export EXT_MODULES
125 echo EXT_MODULES=${EXT_MODULES}
126
127 rm ${temp_file}
wanwei.jiang91776952021-11-19 13:10:32 +0800128}
129
130export -f prepare_module_build
wanwei.jiang612a8882021-11-23 17:12:23 +0800131
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800132function extra_cmds() {
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800133 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
134 for ext_module in ${EXT_MODULES}; do
135 sed -i "/# auto add KBUILD_EXTRA_SYMBOLS start/,/# auto add KBUILD_EXTRA_SYMBOLS end/d" ${ext_module}/Makefile
136 done
137 fi
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800138
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800139 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
140 if [[ -d ${top_ext_drivers} ]]; then
141 rm -rf ${top_ext_drivers}
142 fi
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800143 fi
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800144
145 for FILE in ${FILES}; do
146 if [[ "${FILE}" =~ \.dtbo ]] && \
147 [ -n "${DTS_EXT_DIR}" ] && [ -f "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" ] ; then
148 MKDTIMG_DTBOS="${MKDTIMG_DTBOS} ${DIST_DIR}/${FILE}"
149 fi
150 done
151 export MKDTIMG_DTBOS
152
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800153 set +x
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800154 modules_install
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800155 set -x
156
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800157 local src_dir=$(echo ${MODULES_STAGING_DIR}/lib/modules/*)
158 pushd ${src_dir}
wanwei.jiangf73b2202022-07-23 16:00:44 +0800159 cp modules.order modules_order.back
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800160 : > modules.order
161 while read LINE
162 do
163 find -name ${LINE} >> modules.order
164 done < ${DIST_DIR}/modules/modules.order
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800165 sed -i "s/^\.\///" modules.order
wanwei.jiangf73b2202022-07-23 16:00:44 +0800166 : > ${DIST_DIR}/ext_modules/ext_modules.order
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800167 ext_modules=
168 for ext_module in ${EXT_MODULES}; do
169 if [[ ${ext_module} =~ "../" ]]; then
170 ext_module_old=${ext_module}
171 ext_module=${ext_module//\.\.\//}
172 ext_dir=$(dirname ${ext_module})
173 [[ -d extra/${ext_module} ]] && rm -rf extra/${ext_dir}
174 mkdir -p extra/${ext_dir}
175 cp -rf extra/${ext_module_old} extra/${ext_dir}
176
177 ext_modules_order_file=$(ls extra/${ext_module}/modules.order.*)
178 ext_dir_top=${ext_module%/*}
wanwei.jiangf73b2202022-07-23 16:00:44 +0800179 sed -i "s/\.\.\///g" ${ext_modules_order_file}
180 cat ${ext_modules_order_file} >> modules.order
181 cat ${ext_modules_order_file} | awk -F/ '{print $NF}' >> ${DIST_DIR}/ext_modules/ext_modules.order
182 : > ${ext_modules_order_file}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800183 else
184 ext_modules_order_file=$(ls extra/${ext_module}/modules.order.*)
wanwei.jiangf73b2202022-07-23 16:00:44 +0800185 cat ${ext_modules_order_file} >> modules.order
186 cat ${ext_modules_order_file} | awk -F/ '{print $NF}' >> ${DIST_DIR}/ext_modules/ext_modules.order
187 : > ${ext_modules_order_file}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800188 fi
189 ext_modules="${ext_modules} ${ext_module}"
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800190 done
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800191 EXT_MODULES=${ext_modules}
192 echo EXT_MODULES=${EXT_MODULES}
193 export EXT_MODULES
wanwei.jiangf73b2202022-07-23 16:00:44 +0800194
195 head -n ${ramdisk_last_line} modules.order > system_dlkm_modules
196 file_last_line=`sed -n "$=" modules.order`
197 let line=${file_last_line}-${ramdisk_last_line}
198 tail -n ${line} modules.order > vendor_dlkm_modules
199 export MODULES_LIST=${src_dir}/system_dlkm_modules
200 export VENDOR_DLKM_MODULES_LIST=${src_dir}/vendor_dlkm_modules
201
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800202 popd
wanwei.jiang1d154992022-05-30 14:56:26 +0800203
204 if [[ -z ${ANDROID_PROJECT} ]]; then
205 FILES="$FILES `ls ${OUT_DIR}/${DTS_EXT_DIR}`"
206 fi
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800207
208 if [[ -f ${KERNEL_BUILD_VAR_FILE} ]]; then
209 : > ${KERNEL_BUILD_VAR_FILE}
210 echo "COMMON_OUT_DIR=${COMMON_OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
211 echo "OUT_DIR=${OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
212 echo "DIST_DIR=${DIST_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
213 echo "MODULES_STAGING_DIR=${MODULES_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
214 echo "MODULES_PRIVATE_DIR=${MODULES_PRIVATE_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
215 echo "INITRAMFS_STAGING_DIR=${INITRAMFS_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
216 echo "SYSTEM_DLKM_STAGING_DIR=${SYSTEM_DLKM_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
217 echo "VENDOR_DLKM_STAGING_DIR=${VENDOR_DLKM_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
218 echo "MKBOOTIMG_STAGING_DIR=${MKBOOTIMG_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
219 echo "KERNEL_DEVICETREE=${KERNEL_DEVICETREE}" >> ${KERNEL_BUILD_VAR_FILE}
220 fi
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800221}
222
223export -f extra_cmds
224
wanwei.jiang612a8882021-11-23 17:12:23 +0800225function mod_probe() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800226 local ko=$1
227 local loop
228 for loop in `grep "$ko:" modules.dep | sed 's/.*://'`; do
229 mod_probe $loop
230 echo insmod $loop >> __install.sh
231 done
wanwei.jiang612a8882021-11-23 17:12:23 +0800232}
233
wanwei.jiangb12abc82021-12-25 22:17:10 +0800234function adjust_sequence_modules_loading() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800235 if [[ -n $1 ]]; then
236 chips=$1
wanwei.jiangb12abc82021-12-25 22:17:10 +0800237 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800238
239 source ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list
240 cp modules.dep modules.dep.temp
241
242 soc_module=()
243 for chip in ${chips[@]}; do
244 chip_module=`ls amlogic-*-soc-${chip}.ko`
245 soc_module=(${soc_module[@]} ${chip_module[@]})
246 done
247 echo soc_module=${soc_module[*]}
248
249 delete_soc_module=()
250 if [[ ${#soc_module[@]} == 0 ]]; then
251 echo "Use all soc module"
252 else
253 for module in `ls amlogic-*-soc-*`; do
254 if [[ ! "${soc_module[@]}" =~ "${module}" ]] ; then
255 echo Delete soc module: ${module}
256 sed -n "/${module}:/p" modules.dep.temp
257 sed -i "/${module}:/d" modules.dep.temp
258 delete_soc_module=(${delete_soc_module[@]} ${module})
259 fi
260 done
261 echo delete_soc_module=${delete_soc_module[*]}
262 fi
263
264 delete_module=()
wanwei.jiang50759e12022-03-24 12:36:17 +0800265 for module in ${MODULES_LOAD_BLACK_LIST[@]}; do
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800266 modules=`ls ${module}*`
267 delete_module=(${delete_module[@]} ${modules[@]})
268 done
269 if [[ ${#delete_module[@]} == 0 ]]; then
wanwei.jiang50759e12022-03-24 12:36:17 +0800270 echo "No delete module, MODULES_LOAD_BLACK_LIST=${MODULES_LOAD_BLACK_LIST[*]}"
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800271 else
272 echo delete_module=${delete_module[*]}
273 for module in ${delete_module[@]}; do
274 echo Delete module: ${module}
275 sed -n "/${module}:/p" modules.dep.temp
276 sed -i "/${module}:/d" modules.dep.temp
277 done
278 fi
279
280 cat modules.dep.temp | cut -d ':' -f 2 > modules.dep.temp1
281 delete_modules=(${delete_soc_module[@]} ${delete_module[@]})
282 for module in ${delete_modules[@]}; do
283 match=`sed -n "/${module}/=" modules.dep.temp1`
284 for match in ${match[@]}; do
285 match_count=(${match_count[@]} $match)
286 done
287 if [[ ${#match_count[@]} != 0 ]]; then
288 echo "Error ${#match_count[@]} modules depend on ${module}, please modify:"
wanwei.jiang50759e12022-03-24 12:36:17 +0800289 echo ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list:MODULES_LOAD_BLACK_LIST
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800290 exit
291 fi
292 rm -f ${module}
293 done
294 rm -f modules.dep.temp1
wanwei.jiangb12abc82021-12-25 22:17:10 +0800295 touch modules.dep.temp1
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800296
297 for module in ${RAMDISK_MODULES_LOAD_LIST[@]}; do
298 echo RAMDISK_MODULES_LOAD_LIST: $module
wanwei.jiangb12abc82021-12-25 22:17:10 +0800299 sed -n "/${module}:/p" modules.dep.temp
300 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1
301 sed -i "/${module}:/d" modules.dep.temp
302 sed -n "/${module}.*\.ko:/p" modules.dep.temp
303 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1
304 sed -i "/${module}.*\.ko:/d" modules.dep.temp
305 done
306
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800307 for module in ${VENDOR_MODULES_LOAD_FIRST_LIST[@]}; do
308 echo VENDOR_MODULES_LOAD_FIRST_LIST: $module
309 sed -n "/${module}:/p" modules.dep.temp
310 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1
311 sed -i "/${module}:/d" modules.dep.temp
312 sed -n "/${module}.*\.ko:/p" modules.dep.temp
313 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1
314 sed -i "/${module}.*\.ko:/d" modules.dep.temp
wanwei.jiangb12abc82021-12-25 22:17:10 +0800315 done
316
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800317 if [ -f modules.dep.temp2 ]; then
318 rm modules.dep.temp2
319 fi
320 touch modules.dep.temp2
321 for module in ${VENDOR_MODULES_LOAD_LAST_LIST[@]}; do
322 echo VENDOR_MODULES_LOAD_FIRST_LIST: $module
323 sed -n "/${module}:/p" modules.dep.temp
324 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp2
325 sed -i "/${module}:/d" modules.dep.temp
326 sed -n "/${module}.*\.ko:/p" modules.dep.temp
327 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp2
328 sed -i "/${module}.*\.ko:/d" modules.dep.temp
329 done
330
331 cat modules.dep.temp >> modules.dep.temp1
332 cat modules.dep.temp2 >> modules.dep.temp1
333
wanwei.jiangb12abc82021-12-25 22:17:10 +0800334 cp modules.dep.temp1 modules.dep
335 rm modules.dep.temp
336 rm modules.dep.temp1
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800337 rm modules.dep.temp2
338}
339
qinglin.lie5b951e2022-06-07 16:13:44 +0800340create_ramdisk_vendor() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800341 install_temp=$1
342 source ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list
343 last_ramdisk_module=${RAMDISK_MODULES_LOAD_LIST[${#RAMDISK_MODULES_LOAD_LIST[@]}-1]}
344 last_ramdisk_module_line=`sed -n "/${last_ramdisk_module}/=" ${install_temp}`
345 for line in ${last_ramdisk_module_line}; do
346 ramdisk_last_line=${line}
347 done
wanwei.jiangf73b2202022-07-23 16:00:44 +0800348 export ramdisk_last_line
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800349 head -n ${ramdisk_last_line} ${install_temp} > ramdisk_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800350 mkdir ramdisk
wanwei.jiangf73b2202022-07-23 16:00:44 +0800351 cat ramdisk_install.sh | cut -d ' ' -f 2 > ramdisk/ramdisk_modules.order
wanwei.jiang50759e12022-03-24 12:36:17 +0800352 cat ramdisk_install.sh | cut -d ' ' -f 2 | xargs mv -t ramdisk/
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800353
qinglin.lie5b951e2022-06-07 16:13:44 +0800354 sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' ramdisk_install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800355 echo "echo Install ramdisk modules success!" >> ramdisk_install.sh
356 chmod 755 ramdisk_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800357 mv ramdisk_install.sh ramdisk/
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800358
359 file_last_line=`sed -n "$=" ${install_temp}`
360 let line=${file_last_line}-${ramdisk_last_line}
361 tail -n ${line} ${install_temp} > vendor_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800362 mkdir vendor
wanwei.jiangf73b2202022-07-23 16:00:44 +0800363 cat vendor_install.sh | cut -d ' ' -f 2 > vendor/vendor_modules.order
wanwei.jiang50759e12022-03-24 12:36:17 +0800364 cat vendor_install.sh | cut -d ' ' -f 2 | xargs mv -t vendor/
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800365
qinglin.lie5b951e2022-06-07 16:13:44 +0800366 sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' vendor_install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800367 echo "echo Install vendor modules success!" >> vendor_install.sh
368 chmod 755 vendor_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800369 mv vendor_install.sh vendor/
wanwei.jiangb12abc82021-12-25 22:17:10 +0800370}
371
wanwei.jiang612a8882021-11-23 17:12:23 +0800372function modules_install() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800373 arg1=$1
374
wanwei.jiang236e9a32021-12-07 16:34:14 +0800375 pushd ${DIST_DIR}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800376 rm -rf modules ext_modules
377 mkdir modules ext_modules
378 popd
379
380 local MODULES_ROOT_DIR=$(echo ${MODULES_STAGING_DIR}/lib/modules/*)
381 pushd ${MODULES_ROOT_DIR}
382 local common_drivers=${COMMON_DRIVERS_DIR##*/}
383 local modules_list=$(find -type f -name "*.ko")
wanwei.jiang67a191d2022-04-18 20:39:13 +0800384 for module in ${modules_list}; do
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800385 if [[ -n ${ANDROID_PROJECT} ]]; then # copy internal build modules
386 if [[ `echo ${module} | grep -E "\.\/kernel\/|\/${common_drivers}\/"` ]]; then
387 cp ${module} ${DIST_DIR}/modules/
388 else
389 cp ${module} ${DIST_DIR}/ext_modules/
390 fi
391 else # copy all modules, include external modules
392 cp ${module} ${DIST_DIR}/modules/
393 fi
wanwei.jiang67a191d2022-04-18 20:39:13 +0800394 done
wanwei.jiang612a8882021-11-23 17:12:23 +0800395
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800396 if [[ -n ${ANDROID_PROJECT} ]]; then # internal build modules
397 grep -E "^kernel\/|^${common_drivers}\/" modules.dep > ${DIST_DIR}/modules/modules.dep
398 else # all modules, include external modules
399 cp modules.dep ${DIST_DIR}/modules
400 fi
401 popd
wanwei.jiang612a8882021-11-23 17:12:23 +0800402
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800403 pushd ${DIST_DIR}/modules
wanwei.jiang612a8882021-11-23 17:12:23 +0800404 sed -i 's#[^ ]*/##g' modules.dep
405
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800406 adjust_sequence_modules_loading "${arg1[*]}"
wanwei.jiangb12abc82021-12-25 22:17:10 +0800407
wanwei.jiang5c8d2b62021-11-26 20:36:33 +0800408 touch __install.sh
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800409 touch modules.order
wanwei.jiang612a8882021-11-23 17:12:23 +0800410 for loop in `cat modules.dep | sed 's/:.*//'`; do
411 mod_probe $loop
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800412 echo $loop >> modules.order
wanwei.jiang612a8882021-11-23 17:12:23 +0800413 echo insmod $loop >> __install.sh
414 done
415
416 cat __install.sh | awk ' {
417 if (!cnt[$2]) {
418 print $0;
419 cnt[$2]++;
420 }
421 }' > __install.sh.tmp
422
qinglin.lie5b951e2022-06-07 16:13:44 +0800423 create_ramdisk_vendor __install.sh.tmp
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800424
wanwei.jiang612a8882021-11-23 17:12:23 +0800425 echo "#!/bin/sh" > install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800426 echo "cd ramdisk" >> install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800427 echo "./ramdisk_install.sh" >> install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800428 echo "cd ../vendor" >> install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800429 echo "./vendor_install.sh" >> install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800430 echo "cd ../" >> install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800431 chmod 755 install.sh
wanwei.jiang612a8882021-11-23 17:12:23 +0800432
433 echo "/modules/: all `wc -l modules.dep | awk '{print $1}'` modules."
wanwei.jiang50759e12022-03-24 12:36:17 +0800434 rm __install.sh __install.sh.tmp modules.dep
wanwei.jiang612a8882021-11-23 17:12:23 +0800435
wanwei.jiang236e9a32021-12-07 16:34:14 +0800436 popd
wanwei.jiang612a8882021-11-23 17:12:23 +0800437}
wanwei.jiang236e9a32021-12-07 16:34:14 +0800438export -f modules_install
wanwei.jiang612a8882021-11-23 17:12:23 +0800439
440function rebuild_rootfs() {
441 pushd ${DIST_DIR}
442
Lei Zhang475c17b2022-03-03 11:08:50 +0800443 local ARCH=arm64
444 if [[ -n $1 ]]; then
445 ARCH=$1
446 fi
447
wanwei.jiang612a8882021-11-23 17:12:23 +0800448 rm rootfs -rf
449 mkdir rootfs
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800450 cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot rootfs
wanwei.jiang612a8882021-11-23 17:12:23 +0800451 cd rootfs
452 dd if=rootfs_base.cpio.gz.uboot of=rootfs_base.cpio.gz bs=64 skip=1
453 gunzip rootfs_base.cpio.gz
454 mkdir rootfs
455 cd rootfs
456 cpio -i -F ../rootfs_base.cpio
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800457 if [ -d ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer ]; then
458 cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer . -rf
qinglin.li3c25dbb2022-01-14 11:23:10 +0800459 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800460 cp -rf ../../modules .
wanwei.jiang8abddcc2022-03-16 21:18:48 +0800461
wanwei.jiang612a8882021-11-23 17:12:23 +0800462 find . | cpio -o -H newc | gzip > ../rootfs_new.cpio.gz
463 cd ../
Lei Zhang475c17b2022-03-03 11:08:50 +0800464 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 +0800465 mv rootfs_new.cpio.gz.uboot ../
466 cd ../
467
468 popd
469}
470export -f rebuild_rootfs
wanwei.jiang403c9942021-11-30 18:29:02 +0800471
472function check_undefined_symbol() {
wanwei.jiang236e9a32021-12-07 16:34:14 +0800473 pushd ${DIST_DIR}/modules
wanwei.jiang403c9942021-11-30 18:29:02 +0800474 echo
475 echo "========================================================"
476 echo "Functions or variables not defined in this module refer to which module."
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800477 if [[ -n ${LLVM} ]]; then
478 compile_tool=${ROOT_DIR}/${CLANG_PREBUILT_BIN}/llvm-
479 elif [[ -n ${CROSS_COMPILE} ]]; then
480 compile_tool=${CROSS_COMPILE}
481 else
482 echo "can't find compile tool"
483 fi
484 ${compile_tool}nm ../vmlinux | grep -E " T | D | B | R | W "> vmlinux_T.txt
485 # cat __install.sh | grep "insmod" | cut -d ' ' -f 2 > module_list.txt
486 cat ramdisk/ramdisk_install.sh | grep "insmod" | cut -d ' ' -f 2 > module_list.txt
487 cat vendor/vendor_install.sh | grep "insmod" | cut -d ' ' -f 2 >> module_list.txt
488 cp ramdisk/*.ko .
489 cp vendor/*.ko .
wanwei.jiang403c9942021-11-30 18:29:02 +0800490 while read LINE
491 do
492 echo ${LINE}
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800493 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 +0800494 do
495 #echo ${U}
496 U_v=`grep -w ${U} vmlinux_T.txt`
497 in_vmlinux=0
498 if [ -n "${U_v}" ];
499 then
wanwei.jiangd7b29ef2021-12-01 19:59:41 +0800500 #printf "\t%-50s <== vmlinux\n" ${U}
wanwei.jiang403c9942021-11-30 18:29:02 +0800501 in_vmlinux=1
502 continue
503 fi
504 in_module=0
505 MODULE=
506 while read LINE1
507 do
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800508 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 +0800509 if [ -n "${U_m}" ];
510 then
511 in_module=1
512 MODULE=${LINE1}
513 fi
514 done < module_list.txt
515 if [ ${in_module} -eq "1" ];
516 then
517 printf "\t%-50s <== %s\n" ${U} ${MODULE}
518 continue
519 else
520 printf "\t%-50s <== none\n" ${U}
521 fi
522 done
523 echo
524 echo
525 done < module_list.txt
526 rm vmlinux_T.txt
527 rm module_list.txt
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800528 rm *.ko
wanwei.jiang403c9942021-11-30 18:29:02 +0800529 popd
530}
531export -f check_undefined_symbol