blob: 00170b12058f94b426cd61ac640c3be905b10fa7 [file] [log] [blame]
wanwei.jiang91776952021-11-19 13:10:32 +08001#!/bin/bash
2
3function pre_defconfig_cmds() {
wanwei.jiangb9ad1ef2021-12-27 15:23:30 +08004 if [[ ${AMLOGIC_BREAK_GKI} -eq "1" ]]; then
5 echo "CONFIG_AMLOGIC_BREAK_GKI=y" >> ${ROOT_DIR}/${FRAGMENT_CONFIG}
wanwei.jiang5c8d2b62021-11-26 20:36:33 +08006 else
wanwei.jiangb9ad1ef2021-12-27 15:23:30 +08007 echo "CONFIG_AMLOGIC_BREAK_GKI=n" >> ${ROOT_DIR}/${FRAGMENT_CONFIG}
wanwei.jiang5c8d2b62021-11-26 20:36:33 +08008 fi
9
wanwei.jiangb9ad1ef2021-12-27 15:23:30 +080010 if [[ ${IN_KERNEL_MODULES} -eq "1" ]]; then
11 echo "CONFIG_AMLOGIC_IN_KERNEL_MODULES=y" >> ${ROOT_DIR}/${FRAGMENT_CONFIG}
wanwei.jiang91776952021-11-19 13:10:32 +080012 SKIP_EXT_MODULES=1
13 export SKIP_EXT_MODULES
14 EXT_MODULES=
15 export EXT_MODULES
wanwei.jiang5c8d2b62021-11-26 20:36:33 +080016 else
wanwei.jiangb9ad1ef2021-12-27 15:23:30 +080017 echo "CONFIG_AMLOGIC_IN_KERNEL_MODULES=n" >> ${ROOT_DIR}/${FRAGMENT_CONFIG}
wanwei.jiang91776952021-11-19 13:10:32 +080018 fi
19 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}
20}
21export -f pre_defconfig_cmds
22
23function post_defconfig_cmds() {
wanwei.jiang612a8882021-11-23 17:12:23 +080024 # check_defconfig
wanwei.jiang91776952021-11-19 13:10:32 +080025 rm ${ROOT_DIR}/${KERNEL_DIR}/arch/arm64/configs/${DEFCONFIG}
wanwei.jiang7ef5fd42022-02-18 16:36:19 +080026 pushd ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}
wanwei.jiangb9ad1ef2021-12-27 15:23:30 +080027 sed -i '5,${/CONFIG_AMLOGIC_BREAK_GKI/d}' ${ROOT_DIR}/${FRAGMENT_CONFIG}
28 sed -i '5,${/CONFIG_AMLOGIC_IN_KERNEL_MODULES/d}' ${ROOT_DIR}/${FRAGMENT_CONFIG}
wanwei.jiang91776952021-11-19 13:10:32 +080029 popd
30}
31export -f post_defconfig_cmds
32
33function read_ext_module_config() {
34 ALL_LINE=""
35 while read LINE
36 do
37 if [[ $LINE != \#* && $LINE != "" ]]; then
38 ALL_LINE="$ALL_LINE"" ""$LINE"
39 fi
40 done < $1
41 export GKI_EXT_MODULE_CONFIG=$ALL_LINE
42 echo "GKI_EXT_MODULE_CONFIG=${GKI_EXT_MODULE_CONFIG}"
43}
44
45function read_ext_module_predefine() {
46 PRE_DEFINE=""
47
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +080048 for y_config in `cat $1 | grep "^CONFIG_.*=y" | sed 's/=y//'`; do
wanwei.jiang91776952021-11-19 13:10:32 +080049 PRE_DEFINE="$PRE_DEFINE"" -D"${y_config}
50 done
51
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +080052 for m_config in `cat $1 | grep "^CONFIG_.*=m" | sed 's/=m//'`; do
wanwei.jiang91776952021-11-19 13:10:32 +080053 PRE_DEFINE="$PRE_DEFINE"" -D"${m_config}_MODULE
54 done
55
56 export GKI_EXT_MODULE_PREDEFINE=$PRE_DEFINE
57 echo "GKI_EXT_MODULE_PREDEFINE=${GKI_EXT_MODULE_PREDEFINE}"
58}
59
60function prepare_module_build() {
wanwei.jiangb9ad1ef2021-12-27 15:23:30 +080061 if [[ -z ${IN_KERNEL_MODULES} ]]; then
wanwei.jiang91776952021-11-19 13:10:32 +080062 read_ext_module_config $FRAGMENT_CONFIG && read_ext_module_predefine $FRAGMENT_CONFIG
63 fi
64}
65
66export -f prepare_module_build
wanwei.jiang612a8882021-11-23 17:12:23 +080067
68function mod_probe() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +080069 local ko=$1
70 local loop
71 for loop in `grep "$ko:" modules.dep | sed 's/.*://'`; do
72 mod_probe $loop
73 echo insmod $loop >> __install.sh
74 done
wanwei.jiang612a8882021-11-23 17:12:23 +080075}
76
wanwei.jiangb12abc82021-12-25 22:17:10 +080077function adjust_sequence_modules_loading() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +080078 if [[ -n $1 ]]; then
79 chips=$1
wanwei.jiangb12abc82021-12-25 22:17:10 +080080 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +080081
82 source ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list
83 cp modules.dep modules.dep.temp
84
85 soc_module=()
86 for chip in ${chips[@]}; do
87 chip_module=`ls amlogic-*-soc-${chip}.ko`
88 soc_module=(${soc_module[@]} ${chip_module[@]})
89 done
90 echo soc_module=${soc_module[*]}
91
92 delete_soc_module=()
93 if [[ ${#soc_module[@]} == 0 ]]; then
94 echo "Use all soc module"
95 else
96 for module in `ls amlogic-*-soc-*`; do
97 if [[ ! "${soc_module[@]}" =~ "${module}" ]] ; then
98 echo Delete soc module: ${module}
99 sed -n "/${module}:/p" modules.dep.temp
100 sed -i "/${module}:/d" modules.dep.temp
101 delete_soc_module=(${delete_soc_module[@]} ${module})
102 fi
103 done
104 echo delete_soc_module=${delete_soc_module[*]}
105 fi
106
107 delete_module=()
108 for module in ${MODULES_LOAD_BLACKLIST[@]}; do
109 modules=`ls ${module}*`
110 delete_module=(${delete_module[@]} ${modules[@]})
111 done
112 if [[ ${#delete_module[@]} == 0 ]]; then
113 echo "No delete module, MODULES_LOAD_BLACKLIST=${MODULES_LOAD_BLACKLIST[*]}"
114 else
115 echo delete_module=${delete_module[*]}
116 for module in ${delete_module[@]}; do
117 echo Delete module: ${module}
118 sed -n "/${module}:/p" modules.dep.temp
119 sed -i "/${module}:/d" modules.dep.temp
120 done
121 fi
122
123 cat modules.dep.temp | cut -d ':' -f 2 > modules.dep.temp1
124 delete_modules=(${delete_soc_module[@]} ${delete_module[@]})
125 for module in ${delete_modules[@]}; do
126 match=`sed -n "/${module}/=" modules.dep.temp1`
127 for match in ${match[@]}; do
128 match_count=(${match_count[@]} $match)
129 done
130 if [[ ${#match_count[@]} != 0 ]]; then
131 echo "Error ${#match_count[@]} modules depend on ${module}, please modify:"
132 echo ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list:MODULES_LOAD_BLACKLIST
133 exit
134 fi
135 rm -f ${module}
136 done
137 rm -f modules.dep.temp1
wanwei.jiangb12abc82021-12-25 22:17:10 +0800138 touch modules.dep.temp1
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800139
140 for module in ${RAMDISK_MODULES_LOAD_LIST[@]}; do
141 echo RAMDISK_MODULES_LOAD_LIST: $module
wanwei.jiangb12abc82021-12-25 22:17:10 +0800142 sed -n "/${module}:/p" modules.dep.temp
143 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1
144 sed -i "/${module}:/d" modules.dep.temp
145 sed -n "/${module}.*\.ko:/p" modules.dep.temp
146 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1
147 sed -i "/${module}.*\.ko:/d" modules.dep.temp
148 done
149
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800150 for module in ${VENDOR_MODULES_LOAD_FIRST_LIST[@]}; do
151 echo VENDOR_MODULES_LOAD_FIRST_LIST: $module
152 sed -n "/${module}:/p" modules.dep.temp
153 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1
154 sed -i "/${module}:/d" modules.dep.temp
155 sed -n "/${module}.*\.ko:/p" modules.dep.temp
156 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1
157 sed -i "/${module}.*\.ko:/d" modules.dep.temp
wanwei.jiangb12abc82021-12-25 22:17:10 +0800158 done
159
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800160 if [ -f modules.dep.temp2 ]; then
161 rm modules.dep.temp2
162 fi
163 touch modules.dep.temp2
164 for module in ${VENDOR_MODULES_LOAD_LAST_LIST[@]}; do
165 echo VENDOR_MODULES_LOAD_FIRST_LIST: $module
166 sed -n "/${module}:/p" modules.dep.temp
167 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp2
168 sed -i "/${module}:/d" modules.dep.temp
169 sed -n "/${module}.*\.ko:/p" modules.dep.temp
170 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp2
171 sed -i "/${module}.*\.ko:/d" modules.dep.temp
172 done
173
174 cat modules.dep.temp >> modules.dep.temp1
175 cat modules.dep.temp2 >> modules.dep.temp1
176
wanwei.jiangb12abc82021-12-25 22:17:10 +0800177 cp modules.dep.temp1 modules.dep
178 rm modules.dep.temp
179 rm modules.dep.temp1
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800180 rm modules.dep.temp2
181}
182
183creat_ramdis_vendor_install_sh() {
184 install_temp=$1
185 source ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list
186 last_ramdisk_module=${RAMDISK_MODULES_LOAD_LIST[${#RAMDISK_MODULES_LOAD_LIST[@]}-1]}
187 last_ramdisk_module_line=`sed -n "/${last_ramdisk_module}/=" ${install_temp}`
188 for line in ${last_ramdisk_module_line}; do
189 ramdisk_last_line=${line}
190 done
191 head -n ${ramdisk_last_line} ${install_temp} > ramdisk_install.sh
192
193 sed -i '1s/^/#!\/bin\/sh\n\nset -ex\n/' ramdisk_install.sh
194 echo "echo Install ramdisk modules success!" >> ramdisk_install.sh
195 chmod 755 ramdisk_install.sh
196
197 file_last_line=`sed -n "$=" ${install_temp}`
198 let line=${file_last_line}-${ramdisk_last_line}
199 tail -n ${line} ${install_temp} > vendor_install.sh
200
201 sed -i '1s/^/#!\/bin\/sh\n\nset -ex\n/' vendor_install.sh
202 echo "echo Install vendor modules success!" >> vendor_install.sh
203 chmod 755 vendor_install.sh
wanwei.jiangb12abc82021-12-25 22:17:10 +0800204}
205
wanwei.jiang612a8882021-11-23 17:12:23 +0800206function modules_install() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800207 arg1=$1
208
wanwei.jiang236e9a32021-12-07 16:34:14 +0800209 pushd ${DIST_DIR}
wanwei.jiang612a8882021-11-23 17:12:23 +0800210 rm modules -rf
211 mkdir modules
wanwei.jiang8abddcc2022-03-16 21:18:48 +0800212 local modules_list=$(find ${MODULES_STAGING_DIR}/lib/modules -type f -name "*.ko")
213 cp ${modules_list} modules
wanwei.jiang612a8882021-11-23 17:12:23 +0800214
215 local stagin_module=$(echo ${MODULES_STAGING_DIR}/lib/modules/*)
216 echo stagin_module=${stagin_module}
217 cp ${stagin_module}/modules.dep modules
218
219 cd modules
220 sed -i 's#[^ ]*/##g' modules.dep
221
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800222 adjust_sequence_modules_loading "${arg1[*]}"
wanwei.jiangb12abc82021-12-25 22:17:10 +0800223
wanwei.jiang5c8d2b62021-11-26 20:36:33 +0800224 touch __install.sh
wanwei.jiang612a8882021-11-23 17:12:23 +0800225 for loop in `cat modules.dep | sed 's/:.*//'`; do
226 mod_probe $loop
227 echo insmod $loop >> __install.sh
228 done
229
230 cat __install.sh | awk ' {
231 if (!cnt[$2]) {
232 print $0;
233 cnt[$2]++;
234 }
235 }' > __install.sh.tmp
236
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800237 creat_ramdis_vendor_install_sh __install.sh.tmp
238
wanwei.jiang612a8882021-11-23 17:12:23 +0800239 cp __install.sh.tmp __install.sh
240
241 sed -i '1s/^/#!\/bin\/sh\n\nset -ex\n/' __install.sh
242 echo "echo Install modules success!" >> __install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800243 chmod 755 __install.sh
wanwei.jiang612a8882021-11-23 17:12:23 +0800244
245 echo "#!/bin/sh" > install.sh
246 # echo "./__install.sh || reboot" >> install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800247 # echo "./__install.sh" >> install.sh
248 echo "./ramdisk_install.sh" >> install.sh
249 echo "./vendor_install.sh" >> install.sh
250 chmod 755 install.sh
wanwei.jiang612a8882021-11-23 17:12:23 +0800251
252 echo "/modules/: all `wc -l modules.dep | awk '{print $1}'` modules."
253
254 cd ../
wanwei.jiang236e9a32021-12-07 16:34:14 +0800255 popd
wanwei.jiang612a8882021-11-23 17:12:23 +0800256}
wanwei.jiang236e9a32021-12-07 16:34:14 +0800257export -f modules_install
wanwei.jiang612a8882021-11-23 17:12:23 +0800258
259function rebuild_rootfs() {
260 pushd ${DIST_DIR}
261
Lei Zhang475c17b2022-03-03 11:08:50 +0800262 local ARCH=arm64
263 if [[ -n $1 ]]; then
264 ARCH=$1
265 fi
266
wanwei.jiang612a8882021-11-23 17:12:23 +0800267 rm rootfs -rf
268 mkdir rootfs
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800269 cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot rootfs
wanwei.jiang612a8882021-11-23 17:12:23 +0800270 cd rootfs
271 dd if=rootfs_base.cpio.gz.uboot of=rootfs_base.cpio.gz bs=64 skip=1
272 gunzip rootfs_base.cpio.gz
273 mkdir rootfs
274 cd rootfs
275 cpio -i -F ../rootfs_base.cpio
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800276 if [ -d ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer ]; then
277 cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer . -rf
qinglin.li3c25dbb2022-01-14 11:23:10 +0800278 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800279 cp -rf ../../modules .
wanwei.jiang8abddcc2022-03-16 21:18:48 +0800280
281 if [[ -n ${LLVM} ]]; then
282 for module in `ls modules/*.ko`;
283 do
284 ${ROOT_DIR}/${CLANG_PREBUILT_BIN}/llvm-objcopy --strip-debug ${module}
285 done
286 elif [[ -n ${CROSS_COMPILE} ]]; then
287 for module in `ls modules/*.ko`;
288 do
289 ${CROSS_COMPILE}objcopy --strip-debug ${module}
290 done
291 else
292 echo "can't strip debug module"
293 fi
294
wanwei.jiang612a8882021-11-23 17:12:23 +0800295 find . | cpio -o -H newc | gzip > ../rootfs_new.cpio.gz
296 cd ../
Lei Zhang475c17b2022-03-03 11:08:50 +0800297 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 +0800298 mv rootfs_new.cpio.gz.uboot ../
299 cd ../
300
301 popd
302}
303export -f rebuild_rootfs
wanwei.jiang403c9942021-11-30 18:29:02 +0800304
305function check_undefined_symbol() {
wanwei.jiang236e9a32021-12-07 16:34:14 +0800306 pushd ${DIST_DIR}/modules
wanwei.jiang403c9942021-11-30 18:29:02 +0800307 echo
308 echo "========================================================"
309 echo "Functions or variables not defined in this module refer to which module."
wanwei.jiang236e9a32021-12-07 16:34:14 +0800310 nm ../vmlinux | grep -E " T | D | B | R | W "> vmlinux_T.txt
wanwei.jiang403c9942021-11-30 18:29:02 +0800311 cat __install.sh | grep "insmod" | cut -d ' ' -f 2 > module_list.txt
312 while read LINE
313 do
314 echo ${LINE}
315 for U in `nm ${LINE} | grep " U " | sed -e 's/^\s*//' -e 's/\s*$//' | cut -d ' ' -f 2`
316 do
317 #echo ${U}
318 U_v=`grep -w ${U} vmlinux_T.txt`
319 in_vmlinux=0
320 if [ -n "${U_v}" ];
321 then
wanwei.jiangd7b29ef2021-12-01 19:59:41 +0800322 #printf "\t%-50s <== vmlinux\n" ${U}
wanwei.jiang403c9942021-11-30 18:29:02 +0800323 in_vmlinux=1
324 continue
325 fi
326 in_module=0
327 MODULE=
328 while read LINE1
329 do
wanwei.jiangd7b29ef2021-12-01 19:59:41 +0800330 U_m=`nm ${LINE1} | grep -E " T | D | B | R " | grep -v "\.cfi_jt" | grep "${U}"`
wanwei.jiang403c9942021-11-30 18:29:02 +0800331 if [ -n "${U_m}" ];
332 then
333 in_module=1
334 MODULE=${LINE1}
335 fi
336 done < module_list.txt
337 if [ ${in_module} -eq "1" ];
338 then
339 printf "\t%-50s <== %s\n" ${U} ${MODULE}
340 continue
341 else
342 printf "\t%-50s <== none\n" ${U}
343 fi
344 done
345 echo
346 echo
347 done < module_list.txt
348 rm vmlinux_T.txt
349 rm module_list.txt
350 popd
351}
352export -f check_undefined_symbol