blob: 6d87b7dcc769006d5cb7794ade120c51976c5255 [file] [log] [blame]
wanwei.jiang91776952021-11-19 13:10:32 +08001#!/bin/bash
2
3function pre_defconfig_cmds() {
wanwei.jiang9c76b702022-03-23 20:58:59 +08004 echo "" >> ${ROOT_DIR}/${FRAGMENT_CONFIG}
wanwei.jiangb9ad1ef2021-12-27 15:23:30 +08005 if [[ ${AMLOGIC_BREAK_GKI} -eq "1" ]]; then
6 echo "CONFIG_AMLOGIC_BREAK_GKI=y" >> ${ROOT_DIR}/${FRAGMENT_CONFIG}
wanwei.jiang5c8d2b62021-11-26 20:36:33 +08007 else
wanwei.jiangb9ad1ef2021-12-27 15:23:30 +08008 echo "CONFIG_AMLOGIC_BREAK_GKI=n" >> ${ROOT_DIR}/${FRAGMENT_CONFIG}
wanwei.jiang5c8d2b62021-11-26 20:36:33 +08009 fi
10
wanwei.jiangb9ad1ef2021-12-27 15:23:30 +080011 if [[ ${IN_KERNEL_MODULES} -eq "1" ]]; then
12 echo "CONFIG_AMLOGIC_IN_KERNEL_MODULES=y" >> ${ROOT_DIR}/${FRAGMENT_CONFIG}
wanwei.jiang91776952021-11-19 13:10:32 +080013 SKIP_EXT_MODULES=1
14 export SKIP_EXT_MODULES
15 EXT_MODULES=
16 export EXT_MODULES
wanwei.jiang5c8d2b62021-11-26 20:36:33 +080017 else
wanwei.jiangb9ad1ef2021-12-27 15:23:30 +080018 echo "CONFIG_AMLOGIC_IN_KERNEL_MODULES=n" >> ${ROOT_DIR}/${FRAGMENT_CONFIG}
wanwei.jiang91776952021-11-19 13:10:32 +080019 fi
20 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}
21}
22export -f pre_defconfig_cmds
23
24function post_defconfig_cmds() {
wanwei.jiang9c76b702022-03-23 20:58:59 +080025 # checkout config
wanwei.jiang91776952021-11-19 13:10:32 +080026 rm ${ROOT_DIR}/${KERNEL_DIR}/arch/arm64/configs/${DEFCONFIG}
wanwei.jiang7ef5fd42022-02-18 16:36:19 +080027 pushd ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}
wanwei.jiang9c76b702022-03-23 20:58:59 +080028 # sed -i '5,${/CONFIG_AMLOGIC_BREAK_GKI/d}' ${ROOT_DIR}/${FRAGMENT_CONFIG}
29 # sed -i '5,${/CONFIG_AMLOGIC_IN_KERNEL_MODULES/d}' ${ROOT_DIR}/${FRAGMENT_CONFIG}
30 git checkout ${ROOT_DIR}/${FRAGMENT_CONFIG}
wanwei.jiang91776952021-11-19 13:10:32 +080031 popd
32}
33export -f post_defconfig_cmds
34
35function read_ext_module_config() {
36 ALL_LINE=""
37 while read LINE
38 do
39 if [[ $LINE != \#* && $LINE != "" ]]; then
40 ALL_LINE="$ALL_LINE"" ""$LINE"
41 fi
42 done < $1
43 export GKI_EXT_MODULE_CONFIG=$ALL_LINE
44 echo "GKI_EXT_MODULE_CONFIG=${GKI_EXT_MODULE_CONFIG}"
45}
46
47function read_ext_module_predefine() {
48 PRE_DEFINE=""
49
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +080050 for y_config in `cat $1 | grep "^CONFIG_.*=y" | sed 's/=y//'`; do
wanwei.jiang91776952021-11-19 13:10:32 +080051 PRE_DEFINE="$PRE_DEFINE"" -D"${y_config}
52 done
53
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +080054 for m_config in `cat $1 | grep "^CONFIG_.*=m" | sed 's/=m//'`; do
wanwei.jiang91776952021-11-19 13:10:32 +080055 PRE_DEFINE="$PRE_DEFINE"" -D"${m_config}_MODULE
56 done
57
58 export GKI_EXT_MODULE_PREDEFINE=$PRE_DEFINE
59 echo "GKI_EXT_MODULE_PREDEFINE=${GKI_EXT_MODULE_PREDEFINE}"
60}
61
62function prepare_module_build() {
wanwei.jiangb9ad1ef2021-12-27 15:23:30 +080063 if [[ -z ${IN_KERNEL_MODULES} ]]; then
wanwei.jiang91776952021-11-19 13:10:32 +080064 read_ext_module_config $FRAGMENT_CONFIG && read_ext_module_predefine $FRAGMENT_CONFIG
65 fi
66}
67
68export -f prepare_module_build
wanwei.jiang612a8882021-11-23 17:12:23 +080069
70function mod_probe() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +080071 local ko=$1
72 local loop
73 for loop in `grep "$ko:" modules.dep | sed 's/.*://'`; do
74 mod_probe $loop
75 echo insmod $loop >> __install.sh
76 done
wanwei.jiang612a8882021-11-23 17:12:23 +080077}
78
wanwei.jiangb12abc82021-12-25 22:17:10 +080079function adjust_sequence_modules_loading() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +080080 if [[ -n $1 ]]; then
81 chips=$1
wanwei.jiangb12abc82021-12-25 22:17:10 +080082 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +080083
84 source ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list
85 cp modules.dep modules.dep.temp
86
87 soc_module=()
88 for chip in ${chips[@]}; do
89 chip_module=`ls amlogic-*-soc-${chip}.ko`
90 soc_module=(${soc_module[@]} ${chip_module[@]})
91 done
92 echo soc_module=${soc_module[*]}
93
94 delete_soc_module=()
95 if [[ ${#soc_module[@]} == 0 ]]; then
96 echo "Use all soc module"
97 else
98 for module in `ls amlogic-*-soc-*`; do
99 if [[ ! "${soc_module[@]}" =~ "${module}" ]] ; then
100 echo Delete soc module: ${module}
101 sed -n "/${module}:/p" modules.dep.temp
102 sed -i "/${module}:/d" modules.dep.temp
103 delete_soc_module=(${delete_soc_module[@]} ${module})
104 fi
105 done
106 echo delete_soc_module=${delete_soc_module[*]}
107 fi
108
109 delete_module=()
110 for module in ${MODULES_LOAD_BLACKLIST[@]}; do
111 modules=`ls ${module}*`
112 delete_module=(${delete_module[@]} ${modules[@]})
113 done
114 if [[ ${#delete_module[@]} == 0 ]]; then
115 echo "No delete module, MODULES_LOAD_BLACKLIST=${MODULES_LOAD_BLACKLIST[*]}"
116 else
117 echo delete_module=${delete_module[*]}
118 for module in ${delete_module[@]}; do
119 echo Delete module: ${module}
120 sed -n "/${module}:/p" modules.dep.temp
121 sed -i "/${module}:/d" modules.dep.temp
122 done
123 fi
124
125 cat modules.dep.temp | cut -d ':' -f 2 > modules.dep.temp1
126 delete_modules=(${delete_soc_module[@]} ${delete_module[@]})
127 for module in ${delete_modules[@]}; do
128 match=`sed -n "/${module}/=" modules.dep.temp1`
129 for match in ${match[@]}; do
130 match_count=(${match_count[@]} $match)
131 done
132 if [[ ${#match_count[@]} != 0 ]]; then
133 echo "Error ${#match_count[@]} modules depend on ${module}, please modify:"
134 echo ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list:MODULES_LOAD_BLACKLIST
135 exit
136 fi
137 rm -f ${module}
138 done
139 rm -f modules.dep.temp1
wanwei.jiangb12abc82021-12-25 22:17:10 +0800140 touch modules.dep.temp1
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800141
142 for module in ${RAMDISK_MODULES_LOAD_LIST[@]}; do
143 echo RAMDISK_MODULES_LOAD_LIST: $module
wanwei.jiangb12abc82021-12-25 22:17:10 +0800144 sed -n "/${module}:/p" modules.dep.temp
145 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1
146 sed -i "/${module}:/d" modules.dep.temp
147 sed -n "/${module}.*\.ko:/p" modules.dep.temp
148 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1
149 sed -i "/${module}.*\.ko:/d" modules.dep.temp
150 done
151
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800152 for module in ${VENDOR_MODULES_LOAD_FIRST_LIST[@]}; do
153 echo VENDOR_MODULES_LOAD_FIRST_LIST: $module
154 sed -n "/${module}:/p" modules.dep.temp
155 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1
156 sed -i "/${module}:/d" modules.dep.temp
157 sed -n "/${module}.*\.ko:/p" modules.dep.temp
158 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1
159 sed -i "/${module}.*\.ko:/d" modules.dep.temp
wanwei.jiangb12abc82021-12-25 22:17:10 +0800160 done
161
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800162 if [ -f modules.dep.temp2 ]; then
163 rm modules.dep.temp2
164 fi
165 touch modules.dep.temp2
166 for module in ${VENDOR_MODULES_LOAD_LAST_LIST[@]}; do
167 echo VENDOR_MODULES_LOAD_FIRST_LIST: $module
168 sed -n "/${module}:/p" modules.dep.temp
169 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp2
170 sed -i "/${module}:/d" modules.dep.temp
171 sed -n "/${module}.*\.ko:/p" modules.dep.temp
172 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp2
173 sed -i "/${module}.*\.ko:/d" modules.dep.temp
174 done
175
176 cat modules.dep.temp >> modules.dep.temp1
177 cat modules.dep.temp2 >> modules.dep.temp1
178
wanwei.jiangb12abc82021-12-25 22:17:10 +0800179 cp modules.dep.temp1 modules.dep
180 rm modules.dep.temp
181 rm modules.dep.temp1
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800182 rm modules.dep.temp2
183}
184
185creat_ramdis_vendor_install_sh() {
186 install_temp=$1
187 source ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list
188 last_ramdisk_module=${RAMDISK_MODULES_LOAD_LIST[${#RAMDISK_MODULES_LOAD_LIST[@]}-1]}
189 last_ramdisk_module_line=`sed -n "/${last_ramdisk_module}/=" ${install_temp}`
190 for line in ${last_ramdisk_module_line}; do
191 ramdisk_last_line=${line}
192 done
193 head -n ${ramdisk_last_line} ${install_temp} > ramdisk_install.sh
194
195 sed -i '1s/^/#!\/bin\/sh\n\nset -ex\n/' ramdisk_install.sh
196 echo "echo Install ramdisk modules success!" >> ramdisk_install.sh
197 chmod 755 ramdisk_install.sh
198
199 file_last_line=`sed -n "$=" ${install_temp}`
200 let line=${file_last_line}-${ramdisk_last_line}
201 tail -n ${line} ${install_temp} > vendor_install.sh
202
203 sed -i '1s/^/#!\/bin\/sh\n\nset -ex\n/' vendor_install.sh
204 echo "echo Install vendor modules success!" >> vendor_install.sh
205 chmod 755 vendor_install.sh
wanwei.jiangb12abc82021-12-25 22:17:10 +0800206}
207
wanwei.jiang612a8882021-11-23 17:12:23 +0800208function modules_install() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800209 arg1=$1
210
wanwei.jiang236e9a32021-12-07 16:34:14 +0800211 pushd ${DIST_DIR}
wanwei.jiang612a8882021-11-23 17:12:23 +0800212 rm modules -rf
213 mkdir modules
wanwei.jiang8abddcc2022-03-16 21:18:48 +0800214 local modules_list=$(find ${MODULES_STAGING_DIR}/lib/modules -type f -name "*.ko")
215 cp ${modules_list} modules
wanwei.jiang612a8882021-11-23 17:12:23 +0800216
217 local stagin_module=$(echo ${MODULES_STAGING_DIR}/lib/modules/*)
218 echo stagin_module=${stagin_module}
219 cp ${stagin_module}/modules.dep modules
220
221 cd modules
222 sed -i 's#[^ ]*/##g' modules.dep
223
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800224 adjust_sequence_modules_loading "${arg1[*]}"
wanwei.jiangb12abc82021-12-25 22:17:10 +0800225
wanwei.jiang5c8d2b62021-11-26 20:36:33 +0800226 touch __install.sh
wanwei.jiang612a8882021-11-23 17:12:23 +0800227 for loop in `cat modules.dep | sed 's/:.*//'`; do
228 mod_probe $loop
229 echo insmod $loop >> __install.sh
230 done
231
232 cat __install.sh | awk ' {
233 if (!cnt[$2]) {
234 print $0;
235 cnt[$2]++;
236 }
237 }' > __install.sh.tmp
238
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800239 creat_ramdis_vendor_install_sh __install.sh.tmp
240
wanwei.jiang612a8882021-11-23 17:12:23 +0800241 cp __install.sh.tmp __install.sh
242
243 sed -i '1s/^/#!\/bin\/sh\n\nset -ex\n/' __install.sh
244 echo "echo Install modules success!" >> __install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800245 chmod 755 __install.sh
wanwei.jiang612a8882021-11-23 17:12:23 +0800246
247 echo "#!/bin/sh" > install.sh
248 # echo "./__install.sh || reboot" >> install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800249 # echo "./__install.sh" >> install.sh
250 echo "./ramdisk_install.sh" >> install.sh
251 echo "./vendor_install.sh" >> install.sh
252 chmod 755 install.sh
wanwei.jiang612a8882021-11-23 17:12:23 +0800253
254 echo "/modules/: all `wc -l modules.dep | awk '{print $1}'` modules."
255
256 cd ../
wanwei.jiang236e9a32021-12-07 16:34:14 +0800257 popd
wanwei.jiang612a8882021-11-23 17:12:23 +0800258}
wanwei.jiang236e9a32021-12-07 16:34:14 +0800259export -f modules_install
wanwei.jiang612a8882021-11-23 17:12:23 +0800260
261function rebuild_rootfs() {
262 pushd ${DIST_DIR}
263
Lei Zhang475c17b2022-03-03 11:08:50 +0800264 local ARCH=arm64
265 if [[ -n $1 ]]; then
266 ARCH=$1
267 fi
268
wanwei.jiang612a8882021-11-23 17:12:23 +0800269 rm rootfs -rf
270 mkdir rootfs
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800271 cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot rootfs
wanwei.jiang612a8882021-11-23 17:12:23 +0800272 cd rootfs
273 dd if=rootfs_base.cpio.gz.uboot of=rootfs_base.cpio.gz bs=64 skip=1
274 gunzip rootfs_base.cpio.gz
275 mkdir rootfs
276 cd rootfs
277 cpio -i -F ../rootfs_base.cpio
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800278 if [ -d ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer ]; then
279 cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer . -rf
qinglin.li3c25dbb2022-01-14 11:23:10 +0800280 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800281 cp -rf ../../modules .
wanwei.jiang8abddcc2022-03-16 21:18:48 +0800282
283 if [[ -n ${LLVM} ]]; then
284 for module in `ls modules/*.ko`;
285 do
286 ${ROOT_DIR}/${CLANG_PREBUILT_BIN}/llvm-objcopy --strip-debug ${module}
287 done
288 elif [[ -n ${CROSS_COMPILE} ]]; then
289 for module in `ls modules/*.ko`;
290 do
291 ${CROSS_COMPILE}objcopy --strip-debug ${module}
292 done
293 else
294 echo "can't strip debug module"
295 fi
296
wanwei.jiang612a8882021-11-23 17:12:23 +0800297 find . | cpio -o -H newc | gzip > ../rootfs_new.cpio.gz
298 cd ../
Lei Zhang475c17b2022-03-03 11:08:50 +0800299 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 +0800300 mv rootfs_new.cpio.gz.uboot ../
301 cd ../
302
303 popd
304}
305export -f rebuild_rootfs
wanwei.jiang403c9942021-11-30 18:29:02 +0800306
307function check_undefined_symbol() {
wanwei.jiang236e9a32021-12-07 16:34:14 +0800308 pushd ${DIST_DIR}/modules
wanwei.jiang403c9942021-11-30 18:29:02 +0800309 echo
310 echo "========================================================"
311 echo "Functions or variables not defined in this module refer to which module."
wanwei.jiang236e9a32021-12-07 16:34:14 +0800312 nm ../vmlinux | grep -E " T | D | B | R | W "> vmlinux_T.txt
wanwei.jiang403c9942021-11-30 18:29:02 +0800313 cat __install.sh | grep "insmod" | cut -d ' ' -f 2 > module_list.txt
314 while read LINE
315 do
316 echo ${LINE}
317 for U in `nm ${LINE} | grep " U " | sed -e 's/^\s*//' -e 's/\s*$//' | cut -d ' ' -f 2`
318 do
319 #echo ${U}
320 U_v=`grep -w ${U} vmlinux_T.txt`
321 in_vmlinux=0
322 if [ -n "${U_v}" ];
323 then
wanwei.jiangd7b29ef2021-12-01 19:59:41 +0800324 #printf "\t%-50s <== vmlinux\n" ${U}
wanwei.jiang403c9942021-11-30 18:29:02 +0800325 in_vmlinux=1
326 continue
327 fi
328 in_module=0
329 MODULE=
330 while read LINE1
331 do
wanwei.jiangd7b29ef2021-12-01 19:59:41 +0800332 U_m=`nm ${LINE1} | grep -E " T | D | B | R " | grep -v "\.cfi_jt" | grep "${U}"`
wanwei.jiang403c9942021-11-30 18:29:02 +0800333 if [ -n "${U_m}" ];
334 then
335 in_module=1
336 MODULE=${LINE1}
337 fi
338 done < module_list.txt
339 if [ ${in_module} -eq "1" ];
340 then
341 printf "\t%-50s <== %s\n" ${U} ${MODULE}
342 continue
343 else
344 printf "\t%-50s <== none\n" ${U}
345 fi
346 done
347 echo
348 echo
349 done < module_list.txt
350 rm vmlinux_T.txt
351 rm module_list.txt
352 popd
353}
354export -f check_undefined_symbol