blob: 8b1f0fe2511208512e0a6debe99a2829b9728fce [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 Jiang2d4f9742022-09-13 11:22:17 +08009 if [[ ${GKI_CONFIG} == gki_20 ]]; then
10 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}
11 elif [[ ${GKI_CONFIG} == gki_10 ]]; then
12 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}
13 elif [[ ${GKI_CONFIG} == gki_debug ]]; then
14 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}
wanwei.jiang6fdd3152022-08-01 20:35:05 +080015 fi
wanwei.jiang91776952021-11-19 13:10:32 +080016}
17export -f pre_defconfig_cmds
18
19function post_defconfig_cmds() {
wanwei.jiang1482c872022-05-13 20:33:51 +080020 if [[ ${CHECK_DEFCONFIG} -eq "1" ]]; then
21 check_defconfig
22 fi
Wanwei Jiang2d4f9742022-09-13 11:22:17 +080023 rm ${ROOT_DIR}/${KCONFIG_DEFCONFIG}
wanwei.jiang91776952021-11-19 13:10:32 +080024}
25export -f post_defconfig_cmds
26
27function read_ext_module_config() {
28 ALL_LINE=""
29 while read LINE
30 do
31 if [[ $LINE != \#* && $LINE != "" ]]; then
32 ALL_LINE="$ALL_LINE"" ""$LINE"
33 fi
34 done < $1
wanwei.jiang5c861ae2022-04-21 00:51:50 +080035
36 echo "${ALL_LINE}"
wanwei.jiang91776952021-11-19 13:10:32 +080037}
38
39function read_ext_module_predefine() {
40 PRE_DEFINE=""
41
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +080042 for y_config in `cat $1 | grep "^CONFIG_.*=y" | sed 's/=y//'`; do
wanwei.jiang91776952021-11-19 13:10:32 +080043 PRE_DEFINE="$PRE_DEFINE"" -D"${y_config}
44 done
45
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +080046 for m_config in `cat $1 | grep "^CONFIG_.*=m" | sed 's/=m//'`; do
wanwei.jiang91776952021-11-19 13:10:32 +080047 PRE_DEFINE="$PRE_DEFINE"" -D"${m_config}_MODULE
48 done
49
wanwei.jiang5c861ae2022-04-21 00:51:50 +080050 echo "${PRE_DEFINE}"
wanwei.jiang91776952021-11-19 13:10:32 +080051}
52
wanwei.jiang8d4a5132022-04-28 16:43:54 +080053top_ext_drivers=top_ext_drivers
wanwei.jiang91776952021-11-19 13:10:32 +080054function prepare_module_build() {
wanwei.jiang5c861ae2022-04-21 00:51:50 +080055 local temp_file=`mktemp /tmp/kernel.XXXXXXXXXXXX`
wanwei.jiangb9ad1ef2021-12-27 15:23:30 +080056 if [[ -z ${IN_KERNEL_MODULES} ]]; then
wanwei.jiang5c861ae2022-04-21 00:51:50 +080057 sed 's:#.*$::g' ${ROOT_DIR}/${FRAGMENT_CONFIG} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
58 GKI_EXT_KERNEL_MODULE_CONFIG=$(read_ext_module_config ${temp_file})
59 GKI_EXT_KERNEL_MODULE_PREDEFINE=$(read_ext_module_predefine ${temp_file})
60 export GKI_EXT_KERNEL_MODULE_CONFIG GKI_EXT_KERNEL_MODULE_PREDEFINE
wanwei.jiang91776952021-11-19 13:10:32 +080061 fi
wanwei.jiang5c861ae2022-04-21 00:51:50 +080062
63 for ext_module_config in ${EXT_MODULES_CONFIG}; do
64 sed 's:#.*$::g' ${ROOT_DIR}/${ext_module_config} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
65 GKI_EXT_MODULE_CONFIG=$(read_ext_module_config ${temp_file})
66 GKI_EXT_MODULE_PREDEFINE=$(read_ext_module_predefine ${temp_file})
67 done
68 export GKI_EXT_MODULE_CONFIG GKI_EXT_MODULE_PREDEFINE
69 echo GKI_EXT_MODULE_CONFIG=${GKI_EXT_MODULE_CONFIG}
70 echo GKI_EXT_MODULE_PREDEFINE=${GKI_EXT_MODULE_PREDEFINE}
71
wanwei.jiangc663c4c2022-06-16 14:41:23 +080072 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
73 if [[ -d ${top_ext_drivers} ]]; then
74 rm -rf ${top_ext_drivers}
75 fi
76 mkdir -p ${top_ext_drivers}
77 fi
78
79 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
80 extra_symbols="KBUILD_EXTRA_SYMBOLS +="
81 fi
wanwei.jiangcb5c4c82022-04-25 16:47:24 +080082 ext_modules=
83 for ext_module in ${EXT_MODULES}; do
wanwei.jiangc663c4c2022-06-16 14:41:23 +080084 module_abs_path=`readlink -e ${ext_module}`
85 module_rel_path=$(rel_path ${module_abs_path} ${ROOT_DIR})
86 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
87 if [[ `echo ${module_rel_path} | grep "\.\.\/"` ]]; then
88 cp -rf ${module_abs_path} ${top_ext_drivers}
89 module_rel_path=${top_ext_drivers}/${module_abs_path##*/}
90 fi
91 fi
92 ext_modules="${ext_modules} ${module_rel_path}"
wanwei.jiangcb5c4c82022-04-25 16:47:24 +080093 done
wanwei.jiangc663c4c2022-06-16 14:41:23 +080094
wanwei.jiang5c861ae2022-04-21 00:51:50 +080095 for ext_module_path in ${EXT_MODULES_PATH}; do
96 sed 's:#.*$::g' ${ROOT_DIR}/${ext_module_path} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
wanwei.jiang5c861ae2022-04-21 00:51:50 +080097 while read LINE
98 do
wanwei.jiang8d4a5132022-04-28 16:43:54 +080099 module_abs_path=`readlink -e ${LINE}`
100 module_rel_path=$(rel_path ${module_abs_path} ${ROOT_DIR})
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800101 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
102 if [[ `echo ${module_rel_path} | grep "\.\.\/"` ]]; then
103 cp -rf ${module_abs_path} ${top_ext_drivers}
104 module_rel_path=${top_ext_drivers}/${module_abs_path##*/}
105 fi
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800106 fi
107 ext_modules="${ext_modules} ${module_rel_path}"
108
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800109 done < ${temp_file}
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800110 done
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800111 EXT_MODULES=${ext_modules}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800112
113 local flag=0
114 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
115 for ext_module in ${EXT_MODULES}; do
116 ext_mod_rel=$(rel_path ${ext_module} ${KERNEL_DIR})
117 if [[ ${flag} -eq "1" ]]; then
118 sed -i "/# auto add KBUILD_EXTRA_SYMBOLS start/,/# auto add KBUILD_EXTRA_SYMBOLS end/d" ${ext_module}/Makefile
119 sed -i "2 i # auto add KBUILD_EXTRA_SYMBOLS end" ${ext_module}/Makefile
120 sed -i "2 i ${extra_symbols}" ${ext_module}/Makefile
121 sed -i "2 i # auto add KBUILD_EXTRA_SYMBOLS start" ${ext_module}/Makefile
122 echo "${ext_module}/Makefile add: ${extra_symbols}"
123 fi
124 extra_symbols="${extra_symbols} ${ext_mod_rel}/Module.symvers"
125 flag=1
126 done
127 fi
128
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800129 export EXT_MODULES
130 echo EXT_MODULES=${EXT_MODULES}
131
132 rm ${temp_file}
wanwei.jiang91776952021-11-19 13:10:32 +0800133}
134
135export -f prepare_module_build
wanwei.jiang612a8882021-11-23 17:12:23 +0800136
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800137function extra_cmds() {
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800138 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
139 for ext_module in ${EXT_MODULES}; do
140 sed -i "/# auto add KBUILD_EXTRA_SYMBOLS start/,/# auto add KBUILD_EXTRA_SYMBOLS end/d" ${ext_module}/Makefile
141 done
142 fi
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800143
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800144 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
145 if [[ -d ${top_ext_drivers} ]]; then
146 rm -rf ${top_ext_drivers}
147 fi
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800148 fi
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800149
150 for FILE in ${FILES}; do
151 if [[ "${FILE}" =~ \.dtbo ]] && \
152 [ -n "${DTS_EXT_DIR}" ] && [ -f "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" ] ; then
153 MKDTIMG_DTBOS="${MKDTIMG_DTBOS} ${DIST_DIR}/${FILE}"
154 fi
155 done
156 export MKDTIMG_DTBOS
157
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800158 set +x
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800159 modules_install
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800160 set -x
161
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800162 local src_dir=$(echo ${MODULES_STAGING_DIR}/lib/modules/*)
163 pushd ${src_dir}
wanwei.jiangf73b2202022-07-23 16:00:44 +0800164 cp modules.order modules_order.back
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800165 : > modules.order
166 while read LINE
167 do
168 find -name ${LINE} >> modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800169 done < ${OUT_AMLOGIC_DIR}/modules/modules.order
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800170 sed -i "s/^\.\///" modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800171 : > ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800172 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%/*}
wanwei.jiangf73b2202022-07-23 16:00:44 +0800184 sed -i "s/\.\.\///g" ${ext_modules_order_file}
185 cat ${ext_modules_order_file} >> modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800186 cat ${ext_modules_order_file} | awk -F/ '{print $NF}' >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
wanwei.jiangf73b2202022-07-23 16:00:44 +0800187 : > ${ext_modules_order_file}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800188 else
189 ext_modules_order_file=$(ls extra/${ext_module}/modules.order.*)
wanwei.jiangf73b2202022-07-23 16:00:44 +0800190 cat ${ext_modules_order_file} >> modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800191 cat ${ext_modules_order_file} | awk -F/ '{print $NF}' >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
wanwei.jiangf73b2202022-07-23 16:00:44 +0800192 : > ${ext_modules_order_file}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800193 fi
194 ext_modules="${ext_modules} ${ext_module}"
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800195 done
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800196 EXT_MODULES=${ext_modules}
197 echo EXT_MODULES=${EXT_MODULES}
198 export EXT_MODULES
wanwei.jiangf73b2202022-07-23 16:00:44 +0800199
200 head -n ${ramdisk_last_line} modules.order > system_dlkm_modules
201 file_last_line=`sed -n "$=" modules.order`
202 let line=${file_last_line}-${ramdisk_last_line}
203 tail -n ${line} modules.order > vendor_dlkm_modules
204 export MODULES_LIST=${src_dir}/system_dlkm_modules
Lei Zhang96efea62022-09-02 14:55:06 +0800205 if [ "${ARCH}" = "arm64" ]; then
206 export VENDOR_DLKM_MODULES_LIST=${src_dir}/vendor_dlkm_modules
207 fi
wanwei.jiangf73b2202022-07-23 16:00:44 +0800208
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800209 popd
wanwei.jiang1d154992022-05-30 14:56:26 +0800210
211 if [[ -z ${ANDROID_PROJECT} ]]; then
212 FILES="$FILES `ls ${OUT_DIR}/${DTS_EXT_DIR}`"
213 fi
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800214
215 if [[ -f ${KERNEL_BUILD_VAR_FILE} ]]; then
216 : > ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiangb2ed83c2022-09-09 14:01:20 +0800217 echo "KERNEL_DIR=${KERNEL_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800218 echo "COMMON_OUT_DIR=${COMMON_OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
219 echo "OUT_DIR=${OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
220 echo "DIST_DIR=${DIST_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800221 echo "OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800222 echo "MODULES_STAGING_DIR=${MODULES_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
223 echo "MODULES_PRIVATE_DIR=${MODULES_PRIVATE_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
224 echo "INITRAMFS_STAGING_DIR=${INITRAMFS_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
225 echo "SYSTEM_DLKM_STAGING_DIR=${SYSTEM_DLKM_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
226 echo "VENDOR_DLKM_STAGING_DIR=${VENDOR_DLKM_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
227 echo "MKBOOTIMG_STAGING_DIR=${MKBOOTIMG_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800228 fi
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800229}
230
231export -f extra_cmds
232
wanwei.jiang612a8882021-11-23 17:12:23 +0800233function mod_probe() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800234 local ko=$1
235 local loop
qinglin.lia284a932022-09-21 18:07:38 +0800236 for loop in `grep "^$ko:" modules.dep | sed 's/.*://'`; do
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800237 mod_probe $loop
238 echo insmod $loop >> __install.sh
239 done
wanwei.jiang612a8882021-11-23 17:12:23 +0800240}
241
wanwei.jiangb12abc82021-12-25 22:17:10 +0800242function adjust_sequence_modules_loading() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800243 if [[ -n $1 ]]; then
244 chips=$1
wanwei.jiangb12abc82021-12-25 22:17:10 +0800245 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800246
247 source ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list
248 cp modules.dep modules.dep.temp
249
250 soc_module=()
251 for chip in ${chips[@]}; do
252 chip_module=`ls amlogic-*-soc-${chip}.ko`
253 soc_module=(${soc_module[@]} ${chip_module[@]})
254 done
255 echo soc_module=${soc_module[*]}
256
257 delete_soc_module=()
258 if [[ ${#soc_module[@]} == 0 ]]; then
259 echo "Use all soc module"
260 else
261 for module in `ls amlogic-*-soc-*`; do
262 if [[ ! "${soc_module[@]}" =~ "${module}" ]] ; then
263 echo Delete soc module: ${module}
264 sed -n "/${module}:/p" modules.dep.temp
265 sed -i "/${module}:/d" modules.dep.temp
266 delete_soc_module=(${delete_soc_module[@]} ${module})
267 fi
268 done
269 echo delete_soc_module=${delete_soc_module[*]}
270 fi
271
272 delete_module=()
wanwei.jiang50759e12022-03-24 12:36:17 +0800273 for module in ${MODULES_LOAD_BLACK_LIST[@]}; do
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800274 modules=`ls ${module}*`
275 delete_module=(${delete_module[@]} ${modules[@]})
276 done
277 if [[ ${#delete_module[@]} == 0 ]]; then
wanwei.jiang50759e12022-03-24 12:36:17 +0800278 echo "No delete module, MODULES_LOAD_BLACK_LIST=${MODULES_LOAD_BLACK_LIST[*]}"
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800279 else
280 echo delete_module=${delete_module[*]}
281 for module in ${delete_module[@]}; do
282 echo Delete module: ${module}
283 sed -n "/${module}:/p" modules.dep.temp
284 sed -i "/${module}:/d" modules.dep.temp
285 done
286 fi
287
288 cat modules.dep.temp | cut -d ':' -f 2 > modules.dep.temp1
289 delete_modules=(${delete_soc_module[@]} ${delete_module[@]})
290 for module in ${delete_modules[@]}; do
291 match=`sed -n "/${module}/=" modules.dep.temp1`
292 for match in ${match[@]}; do
293 match_count=(${match_count[@]} $match)
294 done
295 if [[ ${#match_count[@]} != 0 ]]; then
296 echo "Error ${#match_count[@]} modules depend on ${module}, please modify:"
wanwei.jiang50759e12022-03-24 12:36:17 +0800297 echo ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list:MODULES_LOAD_BLACK_LIST
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800298 exit
299 fi
300 rm -f ${module}
301 done
302 rm -f modules.dep.temp1
wanwei.jiangb12abc82021-12-25 22:17:10 +0800303 touch modules.dep.temp1
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800304
305 for module in ${RAMDISK_MODULES_LOAD_LIST[@]}; do
306 echo RAMDISK_MODULES_LOAD_LIST: $module
wanwei.jiangb12abc82021-12-25 22:17:10 +0800307 sed -n "/${module}:/p" modules.dep.temp
308 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1
309 sed -i "/${module}:/d" modules.dep.temp
310 sed -n "/${module}.*\.ko:/p" modules.dep.temp
311 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1
312 sed -i "/${module}.*\.ko:/d" modules.dep.temp
313 done
314
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800315 for module in ${VENDOR_MODULES_LOAD_FIRST_LIST[@]}; do
316 echo VENDOR_MODULES_LOAD_FIRST_LIST: $module
317 sed -n "/${module}:/p" modules.dep.temp
318 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1
319 sed -i "/${module}:/d" modules.dep.temp
320 sed -n "/${module}.*\.ko:/p" modules.dep.temp
321 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1
322 sed -i "/${module}.*\.ko:/d" modules.dep.temp
wanwei.jiangb12abc82021-12-25 22:17:10 +0800323 done
324
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800325 if [ -f modules.dep.temp2 ]; then
326 rm modules.dep.temp2
327 fi
328 touch modules.dep.temp2
329 for module in ${VENDOR_MODULES_LOAD_LAST_LIST[@]}; do
330 echo VENDOR_MODULES_LOAD_FIRST_LIST: $module
331 sed -n "/${module}:/p" modules.dep.temp
332 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp2
333 sed -i "/${module}:/d" modules.dep.temp
334 sed -n "/${module}.*\.ko:/p" modules.dep.temp
335 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp2
336 sed -i "/${module}.*\.ko:/d" modules.dep.temp
337 done
338
339 cat modules.dep.temp >> modules.dep.temp1
340 cat modules.dep.temp2 >> modules.dep.temp1
341
wanwei.jiangb12abc82021-12-25 22:17:10 +0800342 cp modules.dep.temp1 modules.dep
343 rm modules.dep.temp
344 rm modules.dep.temp1
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800345 rm modules.dep.temp2
346}
347
qinglin.lie5b951e2022-06-07 16:13:44 +0800348create_ramdisk_vendor() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800349 install_temp=$1
350 source ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list
351 last_ramdisk_module=${RAMDISK_MODULES_LOAD_LIST[${#RAMDISK_MODULES_LOAD_LIST[@]}-1]}
352 last_ramdisk_module_line=`sed -n "/${last_ramdisk_module}/=" ${install_temp}`
353 for line in ${last_ramdisk_module_line}; do
354 ramdisk_last_line=${line}
355 done
wanwei.jiangf73b2202022-07-23 16:00:44 +0800356 export ramdisk_last_line
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800357 head -n ${ramdisk_last_line} ${install_temp} > ramdisk_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800358 mkdir ramdisk
wanwei.jiangf73b2202022-07-23 16:00:44 +0800359 cat ramdisk_install.sh | cut -d ' ' -f 2 > ramdisk/ramdisk_modules.order
wanwei.jiang50759e12022-03-24 12:36:17 +0800360 cat ramdisk_install.sh | cut -d ' ' -f 2 | xargs mv -t ramdisk/
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800361
qinglin.lie5b951e2022-06-07 16:13:44 +0800362 sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' ramdisk_install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800363 echo "echo Install ramdisk modules success!" >> ramdisk_install.sh
364 chmod 755 ramdisk_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800365 mv ramdisk_install.sh ramdisk/
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800366
367 file_last_line=`sed -n "$=" ${install_temp}`
368 let line=${file_last_line}-${ramdisk_last_line}
369 tail -n ${line} ${install_temp} > vendor_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800370 mkdir vendor
wanwei.jiangf73b2202022-07-23 16:00:44 +0800371 cat vendor_install.sh | cut -d ' ' -f 2 > vendor/vendor_modules.order
wanwei.jiang50759e12022-03-24 12:36:17 +0800372 cat vendor_install.sh | cut -d ' ' -f 2 | xargs mv -t vendor/
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800373
qinglin.lie5b951e2022-06-07 16:13:44 +0800374 sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' vendor_install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800375 echo "echo Install vendor modules success!" >> vendor_install.sh
376 chmod 755 vendor_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800377 mv vendor_install.sh vendor/
wanwei.jiangb12abc82021-12-25 22:17:10 +0800378}
379
wanwei.jiang612a8882021-11-23 17:12:23 +0800380function modules_install() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800381 arg1=$1
382
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800383 rm -rf ${OUT_AMLOGIC_DIR}
384 mkdir -p ${OUT_AMLOGIC_DIR}
385 mkdir -p ${OUT_AMLOGIC_DIR}/modules
386 mkdir -p ${OUT_AMLOGIC_DIR}/ext_modules
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800387
388 local MODULES_ROOT_DIR=$(echo ${MODULES_STAGING_DIR}/lib/modules/*)
389 pushd ${MODULES_ROOT_DIR}
390 local common_drivers=${COMMON_DRIVERS_DIR##*/}
391 local modules_list=$(find -type f -name "*.ko")
wanwei.jiang67a191d2022-04-18 20:39:13 +0800392 for module in ${modules_list}; do
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800393 if [[ -n ${ANDROID_PROJECT} ]]; then # copy internal build modules
394 if [[ `echo ${module} | grep -E "\.\/kernel\/|\/${common_drivers}\/"` ]]; then
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800395 cp ${module} ${OUT_AMLOGIC_DIR}/modules/
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800396 else
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800397 cp ${module} ${OUT_AMLOGIC_DIR}/ext_modules/
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800398 fi
399 else # copy all modules, include external modules
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800400 cp ${module} ${OUT_AMLOGIC_DIR}/modules/
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800401 fi
wanwei.jiang67a191d2022-04-18 20:39:13 +0800402 done
wanwei.jiang612a8882021-11-23 17:12:23 +0800403
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800404 if [[ -n ${ANDROID_PROJECT} ]]; then # internal build modules
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800405 grep -E "^kernel\/|^${common_drivers}\/" modules.dep > ${OUT_AMLOGIC_DIR}/modules/modules.dep
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800406 else # all modules, include external modules
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800407 cp modules.dep ${OUT_AMLOGIC_DIR}/modules
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800408 fi
409 popd
wanwei.jiang612a8882021-11-23 17:12:23 +0800410
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800411 pushd ${OUT_AMLOGIC_DIR}/modules
wanwei.jiang612a8882021-11-23 17:12:23 +0800412 sed -i 's#[^ ]*/##g' modules.dep
413
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800414 adjust_sequence_modules_loading "${arg1[*]}"
wanwei.jiangb12abc82021-12-25 22:17:10 +0800415
wanwei.jiang5c8d2b62021-11-26 20:36:33 +0800416 touch __install.sh
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800417 touch modules.order
wanwei.jiang612a8882021-11-23 17:12:23 +0800418 for loop in `cat modules.dep | sed 's/:.*//'`; do
419 mod_probe $loop
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800420 echo $loop >> modules.order
wanwei.jiang612a8882021-11-23 17:12:23 +0800421 echo insmod $loop >> __install.sh
422 done
423
424 cat __install.sh | awk ' {
425 if (!cnt[$2]) {
426 print $0;
427 cnt[$2]++;
428 }
429 }' > __install.sh.tmp
430
qinglin.lie5b951e2022-06-07 16:13:44 +0800431 create_ramdisk_vendor __install.sh.tmp
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800432
wanwei.jiang612a8882021-11-23 17:12:23 +0800433 echo "#!/bin/sh" > install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800434 echo "cd ramdisk" >> install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800435 echo "./ramdisk_install.sh" >> install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800436 echo "cd ../vendor" >> install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800437 echo "./vendor_install.sh" >> install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800438 echo "cd ../" >> install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800439 chmod 755 install.sh
wanwei.jiang612a8882021-11-23 17:12:23 +0800440
441 echo "/modules/: all `wc -l modules.dep | awk '{print $1}'` modules."
Wanwei Jianga5977bd2022-08-24 22:43:40 +0800442 rm __install.sh __install.sh.tmp
wanwei.jiang612a8882021-11-23 17:12:23 +0800443
wanwei.jiang236e9a32021-12-07 16:34:14 +0800444 popd
wanwei.jiang612a8882021-11-23 17:12:23 +0800445}
wanwei.jiang236e9a32021-12-07 16:34:14 +0800446export -f modules_install
wanwei.jiang612a8882021-11-23 17:12:23 +0800447
448function rebuild_rootfs() {
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800449 pushd ${OUT_AMLOGIC_DIR}
wanwei.jiang612a8882021-11-23 17:12:23 +0800450
Lei Zhang475c17b2022-03-03 11:08:50 +0800451 local ARCH=arm64
452 if [[ -n $1 ]]; then
453 ARCH=$1
454 fi
455
wanwei.jiang612a8882021-11-23 17:12:23 +0800456 rm rootfs -rf
457 mkdir rootfs
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800458 cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot rootfs
wanwei.jiang612a8882021-11-23 17:12:23 +0800459 cd rootfs
460 dd if=rootfs_base.cpio.gz.uboot of=rootfs_base.cpio.gz bs=64 skip=1
461 gunzip rootfs_base.cpio.gz
462 mkdir rootfs
463 cd rootfs
464 cpio -i -F ../rootfs_base.cpio
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800465 if [ -d ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer ]; then
466 cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer . -rf
qinglin.li3c25dbb2022-01-14 11:23:10 +0800467 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800468 cp -rf ../../modules .
wanwei.jiang8abddcc2022-03-16 21:18:48 +0800469
wanwei.jiang612a8882021-11-23 17:12:23 +0800470 find . | cpio -o -H newc | gzip > ../rootfs_new.cpio.gz
471 cd ../
Lei Zhang475c17b2022-03-03 11:08:50 +0800472 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 +0800473 mv rootfs_new.cpio.gz.uboot ../
474 cd ../
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800475 cp rootfs_new.cpio.gz.uboot ${DIST_DIR}
wanwei.jiang612a8882021-11-23 17:12:23 +0800476
477 popd
478}
479export -f rebuild_rootfs
wanwei.jiang403c9942021-11-30 18:29:02 +0800480
481function check_undefined_symbol() {
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800482 pushd ${OUT_AMLOGIC_DIR}/modules
wanwei.jiang403c9942021-11-30 18:29:02 +0800483 echo
484 echo "========================================================"
485 echo "Functions or variables not defined in this module refer to which module."
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800486 if [[ -n ${LLVM} ]]; then
487 compile_tool=${ROOT_DIR}/${CLANG_PREBUILT_BIN}/llvm-
488 elif [[ -n ${CROSS_COMPILE} ]]; then
489 compile_tool=${CROSS_COMPILE}
490 else
491 echo "can't find compile tool"
492 fi
493 ${compile_tool}nm ../vmlinux | grep -E " T | D | B | R | W "> vmlinux_T.txt
494 # cat __install.sh | grep "insmod" | cut -d ' ' -f 2 > module_list.txt
495 cat ramdisk/ramdisk_install.sh | grep "insmod" | cut -d ' ' -f 2 > module_list.txt
496 cat vendor/vendor_install.sh | grep "insmod" | cut -d ' ' -f 2 >> module_list.txt
497 cp ramdisk/*.ko .
498 cp vendor/*.ko .
wanwei.jiang403c9942021-11-30 18:29:02 +0800499 while read LINE
500 do
501 echo ${LINE}
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800502 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 +0800503 do
504 #echo ${U}
505 U_v=`grep -w ${U} vmlinux_T.txt`
506 in_vmlinux=0
507 if [ -n "${U_v}" ];
508 then
wanwei.jiangd7b29ef2021-12-01 19:59:41 +0800509 #printf "\t%-50s <== vmlinux\n" ${U}
wanwei.jiang403c9942021-11-30 18:29:02 +0800510 in_vmlinux=1
511 continue
512 fi
513 in_module=0
514 MODULE=
515 while read LINE1
516 do
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800517 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 +0800518 if [ -n "${U_m}" ];
519 then
520 in_module=1
521 MODULE=${LINE1}
522 fi
523 done < module_list.txt
524 if [ ${in_module} -eq "1" ];
525 then
526 printf "\t%-50s <== %s\n" ${U} ${MODULE}
527 continue
528 else
529 printf "\t%-50s <== none\n" ${U}
530 fi
531 done
532 echo
533 echo
534 done < module_list.txt
535 rm vmlinux_T.txt
536 rm module_list.txt
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800537 rm *.ko
wanwei.jiang403c9942021-11-30 18:29:02 +0800538 popd
539}
540export -f check_undefined_symbol