blob: c393b9cc7a4827a66c95f89969daac501d21ac01 [file] [log] [blame]
wanwei.jiang91776952021-11-19 13:10:32 +08001#!/bin/bash
2
3function pre_defconfig_cmds() {
wanwei.jiang91776952021-11-19 13:10:32 +08004 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}
5}
6export -f pre_defconfig_cmds
7
8function post_defconfig_cmds() {
wanwei.jiang9c76b702022-03-23 20:58:59 +08009 # checkout config
wanwei.jiang91776952021-11-19 13:10:32 +080010 rm ${ROOT_DIR}/${KERNEL_DIR}/arch/arm64/configs/${DEFCONFIG}
wanwei.jiang91776952021-11-19 13:10:32 +080011}
12export -f post_defconfig_cmds
13
14function read_ext_module_config() {
15 ALL_LINE=""
16 while read LINE
17 do
18 if [[ $LINE != \#* && $LINE != "" ]]; then
19 ALL_LINE="$ALL_LINE"" ""$LINE"
20 fi
21 done < $1
wanwei.jiang5c861ae2022-04-21 00:51:50 +080022
23 echo "${ALL_LINE}"
wanwei.jiang91776952021-11-19 13:10:32 +080024}
25
26function read_ext_module_predefine() {
27 PRE_DEFINE=""
28
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +080029 for y_config in `cat $1 | grep "^CONFIG_.*=y" | sed 's/=y//'`; do
wanwei.jiang91776952021-11-19 13:10:32 +080030 PRE_DEFINE="$PRE_DEFINE"" -D"${y_config}
31 done
32
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +080033 for m_config in `cat $1 | grep "^CONFIG_.*=m" | sed 's/=m//'`; do
wanwei.jiang91776952021-11-19 13:10:32 +080034 PRE_DEFINE="$PRE_DEFINE"" -D"${m_config}_MODULE
35 done
36
wanwei.jiang5c861ae2022-04-21 00:51:50 +080037 echo "${PRE_DEFINE}"
wanwei.jiang91776952021-11-19 13:10:32 +080038}
39
40function prepare_module_build() {
wanwei.jiang5c861ae2022-04-21 00:51:50 +080041 local temp_file=`mktemp /tmp/kernel.XXXXXXXXXXXX`
wanwei.jiangb9ad1ef2021-12-27 15:23:30 +080042 if [[ -z ${IN_KERNEL_MODULES} ]]; then
wanwei.jiang5c861ae2022-04-21 00:51:50 +080043 sed 's:#.*$::g' ${ROOT_DIR}/${FRAGMENT_CONFIG} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
44 GKI_EXT_KERNEL_MODULE_CONFIG=$(read_ext_module_config ${temp_file})
45 GKI_EXT_KERNEL_MODULE_PREDEFINE=$(read_ext_module_predefine ${temp_file})
46 export GKI_EXT_KERNEL_MODULE_CONFIG GKI_EXT_KERNEL_MODULE_PREDEFINE
wanwei.jiang91776952021-11-19 13:10:32 +080047 fi
wanwei.jiang5c861ae2022-04-21 00:51:50 +080048
49 for ext_module_config in ${EXT_MODULES_CONFIG}; do
50 sed 's:#.*$::g' ${ROOT_DIR}/${ext_module_config} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
51 GKI_EXT_MODULE_CONFIG=$(read_ext_module_config ${temp_file})
52 GKI_EXT_MODULE_PREDEFINE=$(read_ext_module_predefine ${temp_file})
53 done
54 export GKI_EXT_MODULE_CONFIG GKI_EXT_MODULE_PREDEFINE
55 echo GKI_EXT_MODULE_CONFIG=${GKI_EXT_MODULE_CONFIG}
56 echo GKI_EXT_MODULE_PREDEFINE=${GKI_EXT_MODULE_PREDEFINE}
57
58 local flag=0
wanwei.jiangcb5c4c82022-04-25 16:47:24 +080059 ext_modules=
60 for ext_module in ${EXT_MODULES}; do
61 ext_modules="${ext_modules} ${ext_module}"
62 done
wanwei.jiang5c861ae2022-04-21 00:51:50 +080063 for ext_module_path in ${EXT_MODULES_PATH}; do
64 sed 's:#.*$::g' ${ROOT_DIR}/${ext_module_path} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
wanwei.jiangcb5c4c82022-04-25 16:47:24 +080065 while read LINE
66 do
67 ext_modules="${ext_modules} ${LINE}"
68 done < ${temp_file}
wanwei.jiang5c861ae2022-04-21 00:51:50 +080069
70 extra_symbols="KBUILD_EXTRA_SYMBOLS +="
71 while read LINE
72 do
73 ext_mod_rel=$(rel_path ${ROOT_DIR}/${LINE} ${KERNEL_DIR})
74 if [[ ${flag} -eq "1" ]]; then
wanwei.jiangcb5c4c82022-04-25 16:47:24 +080075 sed -i "/# auto add KBUILD_EXTRA_SYMBOLS start/,/# auto add KBUILD_EXTRA_SYMBOLS end/d" ${ROOT_DIR}/${LINE}/Makefile
wanwei.jiang5c861ae2022-04-21 00:51:50 +080076 sed -i "2 i # auto add KBUILD_EXTRA_SYMBOLS end" ${ROOT_DIR}/${LINE}/Makefile
77 sed -i "2 i ${extra_symbols}" ${ROOT_DIR}/${LINE}/Makefile
78 sed -i "2 i # auto add KBUILD_EXTRA_SYMBOLS start" ${ROOT_DIR}/${LINE}/Makefile
79 echo "${ROOT_DIR}/${LINE}/Makefile add: ${extra_symbols}"
80 fi
81 flag=1
82 extra_symbols="${extra_symbols} ${ext_mod_rel}/Module.symvers"
83 done < ${temp_file}
wanwei.jiang5c861ae2022-04-21 00:51:50 +080084 done
wanwei.jiangcb5c4c82022-04-25 16:47:24 +080085 EXT_MODULES=${ext_modules}
wanwei.jiang5c861ae2022-04-21 00:51:50 +080086 export EXT_MODULES
87 echo EXT_MODULES=${EXT_MODULES}
88
89 rm ${temp_file}
wanwei.jiang91776952021-11-19 13:10:32 +080090}
91
92export -f prepare_module_build
wanwei.jiang612a8882021-11-23 17:12:23 +080093
wanwei.jiang5c861ae2022-04-21 00:51:50 +080094function extra_cmds() {
95 local temp_file=`mktemp /tmp/kernel.XXXXXXXXXXXX`
96 local flag=0
97
98 for ext_module_path in ${EXT_MODULES_PATH}; do
99 sed 's:#.*$::g' ${ROOT_DIR}/${ext_module_path} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
100 while read LINE
101 do
102 if [[ ${flag} -eq "1" ]]; then
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800103 sed -i "/# auto add KBUILD_EXTRA_SYMBOLS start/,/# auto add KBUILD_EXTRA_SYMBOLS end/d" ${ROOT_DIR}/${LINE}/Makefile
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800104 fi
105 flag=1
106 done < ${temp_file}
107 done
108
109 rm ${temp_file}
110}
111
112export -f extra_cmds
113
wanwei.jiang612a8882021-11-23 17:12:23 +0800114function mod_probe() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800115 local ko=$1
116 local loop
117 for loop in `grep "$ko:" modules.dep | sed 's/.*://'`; do
118 mod_probe $loop
119 echo insmod $loop >> __install.sh
120 done
wanwei.jiang612a8882021-11-23 17:12:23 +0800121}
122
wanwei.jiangb12abc82021-12-25 22:17:10 +0800123function adjust_sequence_modules_loading() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800124 if [[ -n $1 ]]; then
125 chips=$1
wanwei.jiangb12abc82021-12-25 22:17:10 +0800126 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800127
128 source ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list
129 cp modules.dep modules.dep.temp
130
131 soc_module=()
132 for chip in ${chips[@]}; do
133 chip_module=`ls amlogic-*-soc-${chip}.ko`
134 soc_module=(${soc_module[@]} ${chip_module[@]})
135 done
136 echo soc_module=${soc_module[*]}
137
138 delete_soc_module=()
139 if [[ ${#soc_module[@]} == 0 ]]; then
140 echo "Use all soc module"
141 else
142 for module in `ls amlogic-*-soc-*`; do
143 if [[ ! "${soc_module[@]}" =~ "${module}" ]] ; then
144 echo Delete soc module: ${module}
145 sed -n "/${module}:/p" modules.dep.temp
146 sed -i "/${module}:/d" modules.dep.temp
147 delete_soc_module=(${delete_soc_module[@]} ${module})
148 fi
149 done
150 echo delete_soc_module=${delete_soc_module[*]}
151 fi
152
153 delete_module=()
wanwei.jiang50759e12022-03-24 12:36:17 +0800154 for module in ${MODULES_LOAD_BLACK_LIST[@]}; do
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800155 modules=`ls ${module}*`
156 delete_module=(${delete_module[@]} ${modules[@]})
157 done
158 if [[ ${#delete_module[@]} == 0 ]]; then
wanwei.jiang50759e12022-03-24 12:36:17 +0800159 echo "No delete module, MODULES_LOAD_BLACK_LIST=${MODULES_LOAD_BLACK_LIST[*]}"
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800160 else
161 echo delete_module=${delete_module[*]}
162 for module in ${delete_module[@]}; do
163 echo Delete module: ${module}
164 sed -n "/${module}:/p" modules.dep.temp
165 sed -i "/${module}:/d" modules.dep.temp
166 done
167 fi
168
169 cat modules.dep.temp | cut -d ':' -f 2 > modules.dep.temp1
170 delete_modules=(${delete_soc_module[@]} ${delete_module[@]})
171 for module in ${delete_modules[@]}; do
172 match=`sed -n "/${module}/=" modules.dep.temp1`
173 for match in ${match[@]}; do
174 match_count=(${match_count[@]} $match)
175 done
176 if [[ ${#match_count[@]} != 0 ]]; then
177 echo "Error ${#match_count[@]} modules depend on ${module}, please modify:"
wanwei.jiang50759e12022-03-24 12:36:17 +0800178 echo ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list:MODULES_LOAD_BLACK_LIST
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800179 exit
180 fi
181 rm -f ${module}
182 done
183 rm -f modules.dep.temp1
wanwei.jiangb12abc82021-12-25 22:17:10 +0800184 touch modules.dep.temp1
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800185
186 for module in ${RAMDISK_MODULES_LOAD_LIST[@]}; do
187 echo RAMDISK_MODULES_LOAD_LIST: $module
wanwei.jiangb12abc82021-12-25 22:17:10 +0800188 sed -n "/${module}:/p" modules.dep.temp
189 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1
190 sed -i "/${module}:/d" modules.dep.temp
191 sed -n "/${module}.*\.ko:/p" modules.dep.temp
192 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1
193 sed -i "/${module}.*\.ko:/d" modules.dep.temp
194 done
195
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800196 for module in ${VENDOR_MODULES_LOAD_FIRST_LIST[@]}; do
197 echo VENDOR_MODULES_LOAD_FIRST_LIST: $module
198 sed -n "/${module}:/p" modules.dep.temp
199 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1
200 sed -i "/${module}:/d" modules.dep.temp
201 sed -n "/${module}.*\.ko:/p" modules.dep.temp
202 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1
203 sed -i "/${module}.*\.ko:/d" modules.dep.temp
wanwei.jiangb12abc82021-12-25 22:17:10 +0800204 done
205
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800206 if [ -f modules.dep.temp2 ]; then
207 rm modules.dep.temp2
208 fi
209 touch modules.dep.temp2
210 for module in ${VENDOR_MODULES_LOAD_LAST_LIST[@]}; do
211 echo VENDOR_MODULES_LOAD_FIRST_LIST: $module
212 sed -n "/${module}:/p" modules.dep.temp
213 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp2
214 sed -i "/${module}:/d" modules.dep.temp
215 sed -n "/${module}.*\.ko:/p" modules.dep.temp
216 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp2
217 sed -i "/${module}.*\.ko:/d" modules.dep.temp
218 done
219
220 cat modules.dep.temp >> modules.dep.temp1
221 cat modules.dep.temp2 >> modules.dep.temp1
222
wanwei.jiangb12abc82021-12-25 22:17:10 +0800223 cp modules.dep.temp1 modules.dep
224 rm modules.dep.temp
225 rm modules.dep.temp1
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800226 rm modules.dep.temp2
227}
228
wanwei.jiang50759e12022-03-24 12:36:17 +0800229create_ramdis_vendor() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800230 install_temp=$1
231 source ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list
232 last_ramdisk_module=${RAMDISK_MODULES_LOAD_LIST[${#RAMDISK_MODULES_LOAD_LIST[@]}-1]}
233 last_ramdisk_module_line=`sed -n "/${last_ramdisk_module}/=" ${install_temp}`
234 for line in ${last_ramdisk_module_line}; do
235 ramdisk_last_line=${line}
236 done
237 head -n ${ramdisk_last_line} ${install_temp} > ramdisk_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800238 mkdir ramdisk
239 cat ramdisk_install.sh | cut -d ' ' -f 2 | xargs mv -t ramdisk/
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800240
241 sed -i '1s/^/#!\/bin\/sh\n\nset -ex\n/' ramdisk_install.sh
242 echo "echo Install ramdisk modules success!" >> ramdisk_install.sh
243 chmod 755 ramdisk_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800244 mv ramdisk_install.sh ramdisk/
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800245
246 file_last_line=`sed -n "$=" ${install_temp}`
247 let line=${file_last_line}-${ramdisk_last_line}
248 tail -n ${line} ${install_temp} > vendor_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800249 mkdir vendor
250 cat vendor_install.sh | cut -d ' ' -f 2 | xargs mv -t vendor/
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800251
252 sed -i '1s/^/#!\/bin\/sh\n\nset -ex\n/' vendor_install.sh
253 echo "echo Install vendor modules success!" >> vendor_install.sh
254 chmod 755 vendor_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800255 mv vendor_install.sh vendor/
wanwei.jiangb12abc82021-12-25 22:17:10 +0800256}
257
wanwei.jiang612a8882021-11-23 17:12:23 +0800258function modules_install() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800259 arg1=$1
260
wanwei.jiang236e9a32021-12-07 16:34:14 +0800261 pushd ${DIST_DIR}
wanwei.jiang612a8882021-11-23 17:12:23 +0800262 rm modules -rf
263 mkdir modules
wanwei.jiang8abddcc2022-03-16 21:18:48 +0800264 local modules_list=$(find ${MODULES_STAGING_DIR}/lib/modules -type f -name "*.ko")
wanwei.jiang67a191d2022-04-18 20:39:13 +0800265 #cp ${modules_list} modules
266 for module in ${modules_list}; do
267 cp ${module} modules/
268 done
wanwei.jiang612a8882021-11-23 17:12:23 +0800269
270 local stagin_module=$(echo ${MODULES_STAGING_DIR}/lib/modules/*)
271 echo stagin_module=${stagin_module}
272 cp ${stagin_module}/modules.dep modules
273
274 cd modules
275 sed -i 's#[^ ]*/##g' modules.dep
276
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800277 adjust_sequence_modules_loading "${arg1[*]}"
wanwei.jiangb12abc82021-12-25 22:17:10 +0800278
wanwei.jiang5c8d2b62021-11-26 20:36:33 +0800279 touch __install.sh
wanwei.jiang612a8882021-11-23 17:12:23 +0800280 for loop in `cat modules.dep | sed 's/:.*//'`; do
281 mod_probe $loop
282 echo insmod $loop >> __install.sh
283 done
284
285 cat __install.sh | awk ' {
286 if (!cnt[$2]) {
287 print $0;
288 cnt[$2]++;
289 }
290 }' > __install.sh.tmp
291
wanwei.jiang50759e12022-03-24 12:36:17 +0800292 create_ramdis_vendor __install.sh.tmp
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800293
wanwei.jiang612a8882021-11-23 17:12:23 +0800294 cp __install.sh.tmp __install.sh
295
wanwei.jiang50759e12022-03-24 12:36:17 +0800296 #sed -i '1s/^/#!\/bin\/sh\n\nset -ex\n/' __install.sh
297 #echo "echo Install modules success!" >> __install.sh
298 #chmod 755 __install.sh
wanwei.jiang612a8882021-11-23 17:12:23 +0800299
300 echo "#!/bin/sh" > install.sh
301 # echo "./__install.sh || reboot" >> install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800302 # echo "./__install.sh" >> install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800303 echo "cd ramdisk" >> install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800304 echo "./ramdisk_install.sh" >> install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800305 echo "cd ../vendor" >> install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800306 echo "./vendor_install.sh" >> install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800307 echo "cd ../" >> install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800308 chmod 755 install.sh
wanwei.jiang612a8882021-11-23 17:12:23 +0800309
310 echo "/modules/: all `wc -l modules.dep | awk '{print $1}'` modules."
wanwei.jiang50759e12022-03-24 12:36:17 +0800311 rm __install.sh __install.sh.tmp modules.dep
wanwei.jiang612a8882021-11-23 17:12:23 +0800312
313 cd ../
wanwei.jiang236e9a32021-12-07 16:34:14 +0800314 popd
wanwei.jiang612a8882021-11-23 17:12:23 +0800315}
wanwei.jiang236e9a32021-12-07 16:34:14 +0800316export -f modules_install
wanwei.jiang612a8882021-11-23 17:12:23 +0800317
318function rebuild_rootfs() {
319 pushd ${DIST_DIR}
320
Lei Zhang475c17b2022-03-03 11:08:50 +0800321 local ARCH=arm64
322 if [[ -n $1 ]]; then
323 ARCH=$1
324 fi
325
wanwei.jiang612a8882021-11-23 17:12:23 +0800326 rm rootfs -rf
327 mkdir rootfs
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800328 cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot rootfs
wanwei.jiang612a8882021-11-23 17:12:23 +0800329 cd rootfs
330 dd if=rootfs_base.cpio.gz.uboot of=rootfs_base.cpio.gz bs=64 skip=1
331 gunzip rootfs_base.cpio.gz
332 mkdir rootfs
333 cd rootfs
334 cpio -i -F ../rootfs_base.cpio
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800335 if [ -d ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer ]; then
336 cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer . -rf
qinglin.li3c25dbb2022-01-14 11:23:10 +0800337 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800338 cp -rf ../../modules .
wanwei.jiang8abddcc2022-03-16 21:18:48 +0800339
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800340 #modules_modules=`ls modules/*.ko`
341 ramdisk_modules=`ls modules/ramdisk/*.ko`
342 vendor_modules=`ls modules/vendor/*.ko`
343 strip_modules=(${modules_modules[@]} ${ramdisk_modules[@]} ${vendor_modules[@]})
wanwei.jiang8abddcc2022-03-16 21:18:48 +0800344 if [[ -n ${LLVM} ]]; then
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800345 for module in ${strip_modules[@]}; do
wanwei.jiang8abddcc2022-03-16 21:18:48 +0800346 ${ROOT_DIR}/${CLANG_PREBUILT_BIN}/llvm-objcopy --strip-debug ${module}
347 done
348 elif [[ -n ${CROSS_COMPILE} ]]; then
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800349 for module in ${strip_modules[@]}; do
wanwei.jiang8abddcc2022-03-16 21:18:48 +0800350 ${CROSS_COMPILE}objcopy --strip-debug ${module}
351 done
352 else
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800353 echo "can't find compile tool"
wanwei.jiang8abddcc2022-03-16 21:18:48 +0800354 fi
355
wanwei.jiang612a8882021-11-23 17:12:23 +0800356 find . | cpio -o -H newc | gzip > ../rootfs_new.cpio.gz
357 cd ../
Lei Zhang475c17b2022-03-03 11:08:50 +0800358 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 +0800359 mv rootfs_new.cpio.gz.uboot ../
360 cd ../
361
362 popd
363}
364export -f rebuild_rootfs
wanwei.jiang403c9942021-11-30 18:29:02 +0800365
366function check_undefined_symbol() {
wanwei.jiang236e9a32021-12-07 16:34:14 +0800367 pushd ${DIST_DIR}/modules
wanwei.jiang403c9942021-11-30 18:29:02 +0800368 echo
369 echo "========================================================"
370 echo "Functions or variables not defined in this module refer to which module."
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800371 if [[ -n ${LLVM} ]]; then
372 compile_tool=${ROOT_DIR}/${CLANG_PREBUILT_BIN}/llvm-
373 elif [[ -n ${CROSS_COMPILE} ]]; then
374 compile_tool=${CROSS_COMPILE}
375 else
376 echo "can't find compile tool"
377 fi
378 ${compile_tool}nm ../vmlinux | grep -E " T | D | B | R | W "> vmlinux_T.txt
379 # cat __install.sh | grep "insmod" | cut -d ' ' -f 2 > module_list.txt
380 cat ramdisk/ramdisk_install.sh | grep "insmod" | cut -d ' ' -f 2 > module_list.txt
381 cat vendor/vendor_install.sh | grep "insmod" | cut -d ' ' -f 2 >> module_list.txt
382 cp ramdisk/*.ko .
383 cp vendor/*.ko .
wanwei.jiang403c9942021-11-30 18:29:02 +0800384 while read LINE
385 do
386 echo ${LINE}
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800387 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 +0800388 do
389 #echo ${U}
390 U_v=`grep -w ${U} vmlinux_T.txt`
391 in_vmlinux=0
392 if [ -n "${U_v}" ];
393 then
wanwei.jiangd7b29ef2021-12-01 19:59:41 +0800394 #printf "\t%-50s <== vmlinux\n" ${U}
wanwei.jiang403c9942021-11-30 18:29:02 +0800395 in_vmlinux=1
396 continue
397 fi
398 in_module=0
399 MODULE=
400 while read LINE1
401 do
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800402 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 +0800403 if [ -n "${U_m}" ];
404 then
405 in_module=1
406 MODULE=${LINE1}
407 fi
408 done < module_list.txt
409 if [ ${in_module} -eq "1" ];
410 then
411 printf "\t%-50s <== %s\n" ${U} ${MODULE}
412 continue
413 else
414 printf "\t%-50s <== none\n" ${U}
415 fi
416 done
417 echo
418 echo
419 done < module_list.txt
420 rm vmlinux_T.txt
421 rm module_list.txt
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800422 rm *.ko
wanwei.jiang403c9942021-11-30 18:29:02 +0800423 popd
424}
425export -f check_undefined_symbol