blob: 918e51345a5423adbdbbd08515b70fe98569e766 [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.jiang1482c872022-05-13 20:33:51 +08009 if [[ ${CHECK_DEFCONFIG} -eq "1" ]]; then
10 check_defconfig
11 fi
wanwei.jiang91776952021-11-19 13:10:32 +080012 rm ${ROOT_DIR}/${KERNEL_DIR}/arch/arm64/configs/${DEFCONFIG}
wanwei.jiang91776952021-11-19 13:10:32 +080013}
14export -f post_defconfig_cmds
15
16function read_ext_module_config() {
17 ALL_LINE=""
18 while read LINE
19 do
20 if [[ $LINE != \#* && $LINE != "" ]]; then
21 ALL_LINE="$ALL_LINE"" ""$LINE"
22 fi
23 done < $1
wanwei.jiang5c861ae2022-04-21 00:51:50 +080024
25 echo "${ALL_LINE}"
wanwei.jiang91776952021-11-19 13:10:32 +080026}
27
28function read_ext_module_predefine() {
29 PRE_DEFINE=""
30
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +080031 for y_config in `cat $1 | grep "^CONFIG_.*=y" | sed 's/=y//'`; do
wanwei.jiang91776952021-11-19 13:10:32 +080032 PRE_DEFINE="$PRE_DEFINE"" -D"${y_config}
33 done
34
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +080035 for m_config in `cat $1 | grep "^CONFIG_.*=m" | sed 's/=m//'`; do
wanwei.jiang91776952021-11-19 13:10:32 +080036 PRE_DEFINE="$PRE_DEFINE"" -D"${m_config}_MODULE
37 done
38
wanwei.jiang5c861ae2022-04-21 00:51:50 +080039 echo "${PRE_DEFINE}"
wanwei.jiang91776952021-11-19 13:10:32 +080040}
41
wanwei.jiang8d4a5132022-04-28 16:43:54 +080042top_ext_drivers=top_ext_drivers
wanwei.jiang91776952021-11-19 13:10:32 +080043function prepare_module_build() {
wanwei.jiang5c861ae2022-04-21 00:51:50 +080044 local temp_file=`mktemp /tmp/kernel.XXXXXXXXXXXX`
wanwei.jiangb9ad1ef2021-12-27 15:23:30 +080045 if [[ -z ${IN_KERNEL_MODULES} ]]; then
wanwei.jiang5c861ae2022-04-21 00:51:50 +080046 sed 's:#.*$::g' ${ROOT_DIR}/${FRAGMENT_CONFIG} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
47 GKI_EXT_KERNEL_MODULE_CONFIG=$(read_ext_module_config ${temp_file})
48 GKI_EXT_KERNEL_MODULE_PREDEFINE=$(read_ext_module_predefine ${temp_file})
49 export GKI_EXT_KERNEL_MODULE_CONFIG GKI_EXT_KERNEL_MODULE_PREDEFINE
wanwei.jiang91776952021-11-19 13:10:32 +080050 fi
wanwei.jiang5c861ae2022-04-21 00:51:50 +080051
52 for ext_module_config in ${EXT_MODULES_CONFIG}; do
53 sed 's:#.*$::g' ${ROOT_DIR}/${ext_module_config} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
54 GKI_EXT_MODULE_CONFIG=$(read_ext_module_config ${temp_file})
55 GKI_EXT_MODULE_PREDEFINE=$(read_ext_module_predefine ${temp_file})
56 done
57 export GKI_EXT_MODULE_CONFIG GKI_EXT_MODULE_PREDEFINE
58 echo GKI_EXT_MODULE_CONFIG=${GKI_EXT_MODULE_CONFIG}
59 echo GKI_EXT_MODULE_PREDEFINE=${GKI_EXT_MODULE_PREDEFINE}
60
wanwei.jiangc663c4c2022-06-16 14:41:23 +080061 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
62 if [[ -d ${top_ext_drivers} ]]; then
63 rm -rf ${top_ext_drivers}
64 fi
65 mkdir -p ${top_ext_drivers}
66 fi
67
68 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
69 extra_symbols="KBUILD_EXTRA_SYMBOLS +="
70 fi
wanwei.jiangcb5c4c82022-04-25 16:47:24 +080071 ext_modules=
72 for ext_module in ${EXT_MODULES}; do
wanwei.jiangc663c4c2022-06-16 14:41:23 +080073 module_abs_path=`readlink -e ${ext_module}`
74 module_rel_path=$(rel_path ${module_abs_path} ${ROOT_DIR})
75 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
76 if [[ `echo ${module_rel_path} | grep "\.\.\/"` ]]; then
77 cp -rf ${module_abs_path} ${top_ext_drivers}
78 module_rel_path=${top_ext_drivers}/${module_abs_path##*/}
79 fi
80 fi
81 ext_modules="${ext_modules} ${module_rel_path}"
wanwei.jiangcb5c4c82022-04-25 16:47:24 +080082 done
wanwei.jiangc663c4c2022-06-16 14:41:23 +080083
wanwei.jiang5c861ae2022-04-21 00:51:50 +080084 for ext_module_path in ${EXT_MODULES_PATH}; do
85 sed 's:#.*$::g' ${ROOT_DIR}/${ext_module_path} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
wanwei.jiang5c861ae2022-04-21 00:51:50 +080086 while read LINE
87 do
wanwei.jiang8d4a5132022-04-28 16:43:54 +080088 module_abs_path=`readlink -e ${LINE}`
89 module_rel_path=$(rel_path ${module_abs_path} ${ROOT_DIR})
wanwei.jiangc663c4c2022-06-16 14:41:23 +080090 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
91 if [[ `echo ${module_rel_path} | grep "\.\.\/"` ]]; then
92 cp -rf ${module_abs_path} ${top_ext_drivers}
93 module_rel_path=${top_ext_drivers}/${module_abs_path##*/}
94 fi
wanwei.jiang8d4a5132022-04-28 16:43:54 +080095 fi
96 ext_modules="${ext_modules} ${module_rel_path}"
97
wanwei.jiang5c861ae2022-04-21 00:51:50 +080098 done < ${temp_file}
wanwei.jiang5c861ae2022-04-21 00:51:50 +080099 done
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800100 EXT_MODULES=${ext_modules}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800101
102 local flag=0
103 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
104 for ext_module in ${EXT_MODULES}; do
105 ext_mod_rel=$(rel_path ${ext_module} ${KERNEL_DIR})
106 if [[ ${flag} -eq "1" ]]; then
107 sed -i "/# auto add KBUILD_EXTRA_SYMBOLS start/,/# auto add KBUILD_EXTRA_SYMBOLS end/d" ${ext_module}/Makefile
108 sed -i "2 i # auto add KBUILD_EXTRA_SYMBOLS end" ${ext_module}/Makefile
109 sed -i "2 i ${extra_symbols}" ${ext_module}/Makefile
110 sed -i "2 i # auto add KBUILD_EXTRA_SYMBOLS start" ${ext_module}/Makefile
111 echo "${ext_module}/Makefile add: ${extra_symbols}"
112 fi
113 extra_symbols="${extra_symbols} ${ext_mod_rel}/Module.symvers"
114 flag=1
115 done
116 fi
117
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800118 export EXT_MODULES
119 echo EXT_MODULES=${EXT_MODULES}
120
121 rm ${temp_file}
wanwei.jiang91776952021-11-19 13:10:32 +0800122}
123
124export -f prepare_module_build
wanwei.jiang612a8882021-11-23 17:12:23 +0800125
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800126function extra_cmds() {
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800127 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
128 for ext_module in ${EXT_MODULES}; do
129 sed -i "/# auto add KBUILD_EXTRA_SYMBOLS start/,/# auto add KBUILD_EXTRA_SYMBOLS end/d" ${ext_module}/Makefile
130 done
131 fi
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800132
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800133 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
134 if [[ -d ${top_ext_drivers} ]]; then
135 rm -rf ${top_ext_drivers}
136 fi
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800137 fi
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800138
139 for FILE in ${FILES}; do
140 if [[ "${FILE}" =~ \.dtbo ]] && \
141 [ -n "${DTS_EXT_DIR}" ] && [ -f "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" ] ; then
142 MKDTIMG_DTBOS="${MKDTIMG_DTBOS} ${DIST_DIR}/${FILE}"
143 fi
144 done
145 export MKDTIMG_DTBOS
146
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800147 set +x
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800148 modules_install
149
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800150 pushd ${DIST_DIR}
151 if [[ -n ${ANDROID_PROJECT} ]]; then
152 #modules_modules=`ls modules/*.ko`
153 ramdisk_modules=`ls modules/ramdisk/*.ko`
154 vendor_modules=`ls modules/vendor/*.ko`
155 ext_modules=`ls ext_modules/*.ko`
156 strip_modules=(${modules_modules[@]} ${ramdisk_modules[@]} ${vendor_modules[@]} ${ext_modules[@]})
157 for module in ${strip_modules[@]}; do
158 ${ROOT_DIR}/${CLANG_PREBUILT_BIN}/llvm-objcopy --strip-debug ${module}
159 done
160 fi
161 popd
162 set -x
163
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800164 local src_dir=$(echo ${MODULES_STAGING_DIR}/lib/modules/*)
165 pushd ${src_dir}
166 : > modules.order
167 while read LINE
168 do
169 find -name ${LINE} >> modules.order
170 done < ${DIST_DIR}/modules/modules.order
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800171 sed -i "s/^\.\///" modules.order
172 ext_modules=
173 for ext_module in ${EXT_MODULES}; do
174 if [[ ${ext_module} =~ "../" ]]; then
175 ext_module_old=${ext_module}
176 ext_module=${ext_module//\.\.\//}
177 ext_dir=$(dirname ${ext_module})
178 [[ -d extra/${ext_module} ]] && rm -rf extra/${ext_dir}
179 mkdir -p extra/${ext_dir}
180 cp -rf extra/${ext_module_old} extra/${ext_dir}
181
182 ext_modules_order_file=$(ls extra/${ext_module}/modules.order.*)
183 ext_dir_top=${ext_module%/*}
184 if [[ -n ${ANDROID_PROJECT} ]]; then
185 sed -i "/^${ext_dir_top}\//d" modules.order
186
187 sed -i "s/\.\.\///g" ${ext_modules_order_file}
188 else
189 sed -i "s/^${ext_dir_top}\//extra\/${ext_dir_top}\//" modules.order
190 : > ${ext_modules_order_file}
191 fi
192 else
193 ext_modules_order_file=$(ls extra/${ext_module}/modules.order.*)
194 ext_dir_top=${ext_module%/*}
195 if [[ -n ${ANDROID_PROJECT} ]]; then
196 sed -i "/^${ext_dir_top}\//d" modules.order
197 else
198 : > ${ext_modules_order_file}
199 fi
200 fi
201 ext_modules="${ext_modules} ${ext_module}"
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800202 done
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800203 EXT_MODULES=${ext_modules}
204 echo EXT_MODULES=${EXT_MODULES}
205 export EXT_MODULES
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800206 popd
wanwei.jiang1d154992022-05-30 14:56:26 +0800207
208 if [[ -z ${ANDROID_PROJECT} ]]; then
209 FILES="$FILES `ls ${OUT_DIR}/${DTS_EXT_DIR}`"
210 fi
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800211
212 if [[ -f ${KERNEL_BUILD_VAR_FILE} ]]; then
213 : > ${KERNEL_BUILD_VAR_FILE}
214 echo "COMMON_OUT_DIR=${COMMON_OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
215 echo "OUT_DIR=${OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
216 echo "DIST_DIR=${DIST_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
217 echo "MODULES_STAGING_DIR=${MODULES_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
218 echo "MODULES_PRIVATE_DIR=${MODULES_PRIVATE_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
219 echo "INITRAMFS_STAGING_DIR=${INITRAMFS_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
220 echo "SYSTEM_DLKM_STAGING_DIR=${SYSTEM_DLKM_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
221 echo "VENDOR_DLKM_STAGING_DIR=${VENDOR_DLKM_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
222 echo "MKBOOTIMG_STAGING_DIR=${MKBOOTIMG_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
223 echo "KERNEL_DEVICETREE=${KERNEL_DEVICETREE}" >> ${KERNEL_BUILD_VAR_FILE}
224 fi
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800225}
226
227export -f extra_cmds
228
wanwei.jiang612a8882021-11-23 17:12:23 +0800229function mod_probe() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800230 local ko=$1
231 local loop
232 for loop in `grep "$ko:" modules.dep | sed 's/.*://'`; do
233 mod_probe $loop
234 echo insmod $loop >> __install.sh
235 done
wanwei.jiang612a8882021-11-23 17:12:23 +0800236}
237
wanwei.jiangb12abc82021-12-25 22:17:10 +0800238function adjust_sequence_modules_loading() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800239 if [[ -n $1 ]]; then
240 chips=$1
wanwei.jiangb12abc82021-12-25 22:17:10 +0800241 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800242
243 source ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list
244 cp modules.dep modules.dep.temp
245
246 soc_module=()
247 for chip in ${chips[@]}; do
248 chip_module=`ls amlogic-*-soc-${chip}.ko`
249 soc_module=(${soc_module[@]} ${chip_module[@]})
250 done
251 echo soc_module=${soc_module[*]}
252
253 delete_soc_module=()
254 if [[ ${#soc_module[@]} == 0 ]]; then
255 echo "Use all soc module"
256 else
257 for module in `ls amlogic-*-soc-*`; do
258 if [[ ! "${soc_module[@]}" =~ "${module}" ]] ; then
259 echo Delete soc module: ${module}
260 sed -n "/${module}:/p" modules.dep.temp
261 sed -i "/${module}:/d" modules.dep.temp
262 delete_soc_module=(${delete_soc_module[@]} ${module})
263 fi
264 done
265 echo delete_soc_module=${delete_soc_module[*]}
266 fi
267
268 delete_module=()
wanwei.jiang50759e12022-03-24 12:36:17 +0800269 for module in ${MODULES_LOAD_BLACK_LIST[@]}; do
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800270 modules=`ls ${module}*`
271 delete_module=(${delete_module[@]} ${modules[@]})
272 done
273 if [[ ${#delete_module[@]} == 0 ]]; then
wanwei.jiang50759e12022-03-24 12:36:17 +0800274 echo "No delete module, MODULES_LOAD_BLACK_LIST=${MODULES_LOAD_BLACK_LIST[*]}"
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800275 else
276 echo delete_module=${delete_module[*]}
277 for module in ${delete_module[@]}; do
278 echo Delete module: ${module}
279 sed -n "/${module}:/p" modules.dep.temp
280 sed -i "/${module}:/d" modules.dep.temp
281 done
282 fi
283
284 cat modules.dep.temp | cut -d ':' -f 2 > modules.dep.temp1
285 delete_modules=(${delete_soc_module[@]} ${delete_module[@]})
286 for module in ${delete_modules[@]}; do
287 match=`sed -n "/${module}/=" modules.dep.temp1`
288 for match in ${match[@]}; do
289 match_count=(${match_count[@]} $match)
290 done
291 if [[ ${#match_count[@]} != 0 ]]; then
292 echo "Error ${#match_count[@]} modules depend on ${module}, please modify:"
wanwei.jiang50759e12022-03-24 12:36:17 +0800293 echo ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list:MODULES_LOAD_BLACK_LIST
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800294 exit
295 fi
296 rm -f ${module}
297 done
298 rm -f modules.dep.temp1
wanwei.jiangb12abc82021-12-25 22:17:10 +0800299 touch modules.dep.temp1
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800300
301 for module in ${RAMDISK_MODULES_LOAD_LIST[@]}; do
302 echo RAMDISK_MODULES_LOAD_LIST: $module
wanwei.jiangb12abc82021-12-25 22:17:10 +0800303 sed -n "/${module}:/p" modules.dep.temp
304 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1
305 sed -i "/${module}:/d" modules.dep.temp
306 sed -n "/${module}.*\.ko:/p" modules.dep.temp
307 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1
308 sed -i "/${module}.*\.ko:/d" modules.dep.temp
309 done
310
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800311 for module in ${VENDOR_MODULES_LOAD_FIRST_LIST[@]}; do
312 echo VENDOR_MODULES_LOAD_FIRST_LIST: $module
313 sed -n "/${module}:/p" modules.dep.temp
314 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1
315 sed -i "/${module}:/d" modules.dep.temp
316 sed -n "/${module}.*\.ko:/p" modules.dep.temp
317 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1
318 sed -i "/${module}.*\.ko:/d" modules.dep.temp
wanwei.jiangb12abc82021-12-25 22:17:10 +0800319 done
320
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800321 if [ -f modules.dep.temp2 ]; then
322 rm modules.dep.temp2
323 fi
324 touch modules.dep.temp2
325 for module in ${VENDOR_MODULES_LOAD_LAST_LIST[@]}; do
326 echo VENDOR_MODULES_LOAD_FIRST_LIST: $module
327 sed -n "/${module}:/p" modules.dep.temp
328 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp2
329 sed -i "/${module}:/d" modules.dep.temp
330 sed -n "/${module}.*\.ko:/p" modules.dep.temp
331 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp2
332 sed -i "/${module}.*\.ko:/d" modules.dep.temp
333 done
334
335 cat modules.dep.temp >> modules.dep.temp1
336 cat modules.dep.temp2 >> modules.dep.temp1
337
wanwei.jiangb12abc82021-12-25 22:17:10 +0800338 cp modules.dep.temp1 modules.dep
339 rm modules.dep.temp
340 rm modules.dep.temp1
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800341 rm modules.dep.temp2
342}
343
qinglin.lie5b951e2022-06-07 16:13:44 +0800344create_ramdisk_vendor() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800345 install_temp=$1
346 source ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list
347 last_ramdisk_module=${RAMDISK_MODULES_LOAD_LIST[${#RAMDISK_MODULES_LOAD_LIST[@]}-1]}
348 last_ramdisk_module_line=`sed -n "/${last_ramdisk_module}/=" ${install_temp}`
349 for line in ${last_ramdisk_module_line}; do
350 ramdisk_last_line=${line}
351 done
352 head -n ${ramdisk_last_line} ${install_temp} > ramdisk_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800353 mkdir ramdisk
354 cat ramdisk_install.sh | cut -d ' ' -f 2 | xargs mv -t ramdisk/
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800355
qinglin.lie5b951e2022-06-07 16:13:44 +0800356 sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' ramdisk_install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800357 echo "echo Install ramdisk modules success!" >> ramdisk_install.sh
358 chmod 755 ramdisk_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800359 mv ramdisk_install.sh ramdisk/
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800360
361 file_last_line=`sed -n "$=" ${install_temp}`
362 let line=${file_last_line}-${ramdisk_last_line}
363 tail -n ${line} ${install_temp} > vendor_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800364 mkdir vendor
365 cat vendor_install.sh | cut -d ' ' -f 2 | xargs mv -t vendor/
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800366
qinglin.lie5b951e2022-06-07 16:13:44 +0800367 sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' vendor_install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800368 echo "echo Install vendor modules success!" >> vendor_install.sh
369 chmod 755 vendor_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800370 mv vendor_install.sh vendor/
wanwei.jiangb12abc82021-12-25 22:17:10 +0800371}
372
wanwei.jiang612a8882021-11-23 17:12:23 +0800373function modules_install() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800374 arg1=$1
375
wanwei.jiang236e9a32021-12-07 16:34:14 +0800376 pushd ${DIST_DIR}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800377 rm -rf modules ext_modules
378 mkdir modules ext_modules
379 popd
380
381 local MODULES_ROOT_DIR=$(echo ${MODULES_STAGING_DIR}/lib/modules/*)
382 pushd ${MODULES_ROOT_DIR}
383 local common_drivers=${COMMON_DRIVERS_DIR##*/}
384 local modules_list=$(find -type f -name "*.ko")
wanwei.jiang67a191d2022-04-18 20:39:13 +0800385 for module in ${modules_list}; do
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800386 if [[ -n ${ANDROID_PROJECT} ]]; then # copy internal build modules
387 if [[ `echo ${module} | grep -E "\.\/kernel\/|\/${common_drivers}\/"` ]]; then
388 cp ${module} ${DIST_DIR}/modules/
389 else
390 cp ${module} ${DIST_DIR}/ext_modules/
391 fi
392 else # copy all modules, include external modules
393 cp ${module} ${DIST_DIR}/modules/
394 fi
wanwei.jiang67a191d2022-04-18 20:39:13 +0800395 done
wanwei.jiang612a8882021-11-23 17:12:23 +0800396
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800397 if [[ -n ${ANDROID_PROJECT} ]]; then # internal build modules
398 grep -E "^kernel\/|^${common_drivers}\/" modules.dep > ${DIST_DIR}/modules/modules.dep
399 else # all modules, include external modules
400 cp modules.dep ${DIST_DIR}/modules
401 fi
402 popd
wanwei.jiang612a8882021-11-23 17:12:23 +0800403
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800404 pushd ${DIST_DIR}/modules
wanwei.jiang612a8882021-11-23 17:12:23 +0800405 sed -i 's#[^ ]*/##g' modules.dep
406
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800407 adjust_sequence_modules_loading "${arg1[*]}"
wanwei.jiangb12abc82021-12-25 22:17:10 +0800408
wanwei.jiang5c8d2b62021-11-26 20:36:33 +0800409 touch __install.sh
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800410 touch modules.order
wanwei.jiang612a8882021-11-23 17:12:23 +0800411 for loop in `cat modules.dep | sed 's/:.*//'`; do
412 mod_probe $loop
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800413 echo $loop >> modules.order
wanwei.jiang612a8882021-11-23 17:12:23 +0800414 echo insmod $loop >> __install.sh
415 done
416
417 cat __install.sh | awk ' {
418 if (!cnt[$2]) {
419 print $0;
420 cnt[$2]++;
421 }
422 }' > __install.sh.tmp
423
qinglin.lie5b951e2022-06-07 16:13:44 +0800424 create_ramdisk_vendor __install.sh.tmp
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800425
wanwei.jiang612a8882021-11-23 17:12:23 +0800426 cp __install.sh.tmp __install.sh
427
wanwei.jiang50759e12022-03-24 12:36:17 +0800428 #sed -i '1s/^/#!\/bin\/sh\n\nset -ex\n/' __install.sh
429 #echo "echo Install modules success!" >> __install.sh
430 #chmod 755 __install.sh
wanwei.jiang612a8882021-11-23 17:12:23 +0800431
432 echo "#!/bin/sh" > install.sh
433 # echo "./__install.sh || reboot" >> install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800434 # echo "./__install.sh" >> install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800435 echo "cd ramdisk" >> install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800436 echo "./ramdisk_install.sh" >> install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800437 echo "cd ../vendor" >> install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800438 echo "./vendor_install.sh" >> install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800439 echo "cd ../" >> install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800440 chmod 755 install.sh
wanwei.jiang612a8882021-11-23 17:12:23 +0800441
442 echo "/modules/: all `wc -l modules.dep | awk '{print $1}'` modules."
wanwei.jiang50759e12022-03-24 12:36:17 +0800443 rm __install.sh __install.sh.tmp modules.dep
wanwei.jiang612a8882021-11-23 17:12:23 +0800444
wanwei.jiang236e9a32021-12-07 16:34:14 +0800445 popd
wanwei.jiang612a8882021-11-23 17:12:23 +0800446}
wanwei.jiang236e9a32021-12-07 16:34:14 +0800447export -f modules_install
wanwei.jiang612a8882021-11-23 17:12:23 +0800448
449function rebuild_rootfs() {
450 pushd ${DIST_DIR}
451
Lei Zhang475c17b2022-03-03 11:08:50 +0800452 local ARCH=arm64
453 if [[ -n $1 ]]; then
454 ARCH=$1
455 fi
456
wanwei.jiang612a8882021-11-23 17:12:23 +0800457 rm rootfs -rf
458 mkdir rootfs
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800459 cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot rootfs
wanwei.jiang612a8882021-11-23 17:12:23 +0800460 cd rootfs
461 dd if=rootfs_base.cpio.gz.uboot of=rootfs_base.cpio.gz bs=64 skip=1
462 gunzip rootfs_base.cpio.gz
463 mkdir rootfs
464 cd rootfs
465 cpio -i -F ../rootfs_base.cpio
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800466 if [ -d ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer ]; then
467 cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer . -rf
qinglin.li3c25dbb2022-01-14 11:23:10 +0800468 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800469 cp -rf ../../modules .
wanwei.jiang8abddcc2022-03-16 21:18:48 +0800470
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800471 #modules_modules=`ls modules/*.ko`
472 ramdisk_modules=`ls modules/ramdisk/*.ko`
473 vendor_modules=`ls modules/vendor/*.ko`
474 strip_modules=(${modules_modules[@]} ${ramdisk_modules[@]} ${vendor_modules[@]})
wanwei.jiang8abddcc2022-03-16 21:18:48 +0800475 if [[ -n ${LLVM} ]]; then
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800476 for module in ${strip_modules[@]}; do
wanwei.jiang8abddcc2022-03-16 21:18:48 +0800477 ${ROOT_DIR}/${CLANG_PREBUILT_BIN}/llvm-objcopy --strip-debug ${module}
478 done
479 elif [[ -n ${CROSS_COMPILE} ]]; then
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800480 for module in ${strip_modules[@]}; do
wanwei.jiang8abddcc2022-03-16 21:18:48 +0800481 ${CROSS_COMPILE}objcopy --strip-debug ${module}
482 done
483 else
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800484 echo "can't find compile tool"
wanwei.jiang8abddcc2022-03-16 21:18:48 +0800485 fi
486
wanwei.jiang612a8882021-11-23 17:12:23 +0800487 find . | cpio -o -H newc | gzip > ../rootfs_new.cpio.gz
488 cd ../
Lei Zhang475c17b2022-03-03 11:08:50 +0800489 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 +0800490 mv rootfs_new.cpio.gz.uboot ../
491 cd ../
492
493 popd
494}
495export -f rebuild_rootfs
wanwei.jiang403c9942021-11-30 18:29:02 +0800496
497function check_undefined_symbol() {
wanwei.jiang236e9a32021-12-07 16:34:14 +0800498 pushd ${DIST_DIR}/modules
wanwei.jiang403c9942021-11-30 18:29:02 +0800499 echo
500 echo "========================================================"
501 echo "Functions or variables not defined in this module refer to which module."
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800502 if [[ -n ${LLVM} ]]; then
503 compile_tool=${ROOT_DIR}/${CLANG_PREBUILT_BIN}/llvm-
504 elif [[ -n ${CROSS_COMPILE} ]]; then
505 compile_tool=${CROSS_COMPILE}
506 else
507 echo "can't find compile tool"
508 fi
509 ${compile_tool}nm ../vmlinux | grep -E " T | D | B | R | W "> vmlinux_T.txt
510 # cat __install.sh | grep "insmod" | cut -d ' ' -f 2 > module_list.txt
511 cat ramdisk/ramdisk_install.sh | grep "insmod" | cut -d ' ' -f 2 > module_list.txt
512 cat vendor/vendor_install.sh | grep "insmod" | cut -d ' ' -f 2 >> module_list.txt
513 cp ramdisk/*.ko .
514 cp vendor/*.ko .
wanwei.jiang403c9942021-11-30 18:29:02 +0800515 while read LINE
516 do
517 echo ${LINE}
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800518 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 +0800519 do
520 #echo ${U}
521 U_v=`grep -w ${U} vmlinux_T.txt`
522 in_vmlinux=0
523 if [ -n "${U_v}" ];
524 then
wanwei.jiangd7b29ef2021-12-01 19:59:41 +0800525 #printf "\t%-50s <== vmlinux\n" ${U}
wanwei.jiang403c9942021-11-30 18:29:02 +0800526 in_vmlinux=1
527 continue
528 fi
529 in_module=0
530 MODULE=
531 while read LINE1
532 do
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800533 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 +0800534 if [ -n "${U_m}" ];
535 then
536 in_module=1
537 MODULE=${LINE1}
538 fi
539 done < module_list.txt
540 if [ ${in_module} -eq "1" ];
541 then
542 printf "\t%-50s <== %s\n" ${U} ${MODULE}
543 continue
544 else
545 printf "\t%-50s <== none\n" ${U}
546 fi
547 done
548 echo
549 echo
550 done < module_list.txt
551 rm vmlinux_T.txt
552 rm module_list.txt
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800553 rm *.ko
wanwei.jiang403c9942021-11-30 18:29:02 +0800554 popd
555}
556export -f check_undefined_symbol