blob: 5f07dd810a4afb298dda8953b4b2b95ff49dcc27 [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
48 for y_config in `cat $1 | grep "^CONFIG_.*=y" | sed 's/=y//'`;
49 do
50 PRE_DEFINE="$PRE_DEFINE"" -D"${y_config}
51 done
52
53 for m_config in `cat $1 | grep "^CONFIG_.*=m" | sed 's/=m//'`;
54 do
55 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() {
71 local ko=$1
72 local loop
73 for loop in `grep "$ko:" modules.dep | sed 's/.*://'`;
74 do
75 mod_probe $loop
76 echo insmod $loop >> __install.sh
77 done
78}
79
wanwei.jiangb12abc82021-12-25 22:17:10 +080080function adjust_sequence_modules_loading() {
81 cp modules.dep modules.dep.temp
82 if [ -f modules.dep.temp1 ]; then
83 rm modules.dep.temp1
84 fi
85 touch modules.dep.temp1
86 for module in ${MODULES_LOAD_FIRSTLIST[@]};
87 do
88 echo FIRSTLIST MODULES: $module
89 sed -n "/${module}:/p" modules.dep.temp
90 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1
91 sed -i "/${module}:/d" modules.dep.temp
92 sed -n "/${module}.*\.ko:/p" modules.dep.temp
93 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1
94 sed -i "/${module}.*\.ko:/d" modules.dep.temp
95 done
96
97 cat modules.dep.temp >> modules.dep.temp1
98
99 for module in ${MODULES_LOAD_BLACKLIST[@]};
100 do
101 echo BLACKLIST MODULES: $module
102 sed -n "/${module}:/p" modules.dep.temp1
103 sed -i "/${module}:/d" modules.dep.temp1
104 sed -n "/${module}.*\.ko:/p" modules.dep.temp1
105 sed -i "/${module}.*\.ko:/d" modules.dep.temp1
106 done
107
108 cp modules.dep.temp1 modules.dep
109 rm modules.dep.temp
110 rm modules.dep.temp1
111}
112
wanwei.jiang612a8882021-11-23 17:12:23 +0800113function modules_install() {
wanwei.jiang236e9a32021-12-07 16:34:14 +0800114 pushd ${DIST_DIR}
wanwei.jiang612a8882021-11-23 17:12:23 +0800115 rm modules -rf
116 mkdir modules
wanwei.jiang8abddcc2022-03-16 21:18:48 +0800117 local modules_list=$(find ${MODULES_STAGING_DIR}/lib/modules -type f -name "*.ko")
118 cp ${modules_list} modules
wanwei.jiang612a8882021-11-23 17:12:23 +0800119
120 local stagin_module=$(echo ${MODULES_STAGING_DIR}/lib/modules/*)
121 echo stagin_module=${stagin_module}
122 cp ${stagin_module}/modules.dep modules
123
124 cd modules
125 sed -i 's#[^ ]*/##g' modules.dep
126
wanwei.jiangb12abc82021-12-25 22:17:10 +0800127 adjust_sequence_modules_loading
128
wanwei.jiang5c8d2b62021-11-26 20:36:33 +0800129 touch __install.sh
wanwei.jiang612a8882021-11-23 17:12:23 +0800130 for loop in `cat modules.dep | sed 's/:.*//'`; do
131 mod_probe $loop
132 echo insmod $loop >> __install.sh
133 done
134
135 cat __install.sh | awk ' {
136 if (!cnt[$2]) {
137 print $0;
138 cnt[$2]++;
139 }
140 }' > __install.sh.tmp
141
142 cp __install.sh.tmp __install.sh
143
144 sed -i '1s/^/#!\/bin\/sh\n\nset -ex\n/' __install.sh
145 echo "echo Install modules success!" >> __install.sh
146 chmod 777 __install.sh
147
148 echo "#!/bin/sh" > install.sh
149 # echo "./__install.sh || reboot" >> install.sh
150 echo "./__install.sh" >> install.sh
151 chmod 777 install.sh
152
153 echo "/modules/: all `wc -l modules.dep | awk '{print $1}'` modules."
154
155 cd ../
wanwei.jiang236e9a32021-12-07 16:34:14 +0800156 popd
wanwei.jiang612a8882021-11-23 17:12:23 +0800157}
wanwei.jiang236e9a32021-12-07 16:34:14 +0800158export -f modules_install
wanwei.jiang612a8882021-11-23 17:12:23 +0800159
160function rebuild_rootfs() {
161 pushd ${DIST_DIR}
162
Lei Zhang475c17b2022-03-03 11:08:50 +0800163 local ARCH=arm64
164 if [[ -n $1 ]]; then
165 ARCH=$1
166 fi
167
wanwei.jiang612a8882021-11-23 17:12:23 +0800168 rm rootfs -rf
169 mkdir rootfs
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800170 cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot rootfs
wanwei.jiang612a8882021-11-23 17:12:23 +0800171 cd rootfs
172 dd if=rootfs_base.cpio.gz.uboot of=rootfs_base.cpio.gz bs=64 skip=1
173 gunzip rootfs_base.cpio.gz
174 mkdir rootfs
175 cd rootfs
176 cpio -i -F ../rootfs_base.cpio
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800177 if [ -d ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer ]; then
178 cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer . -rf
qinglin.li3c25dbb2022-01-14 11:23:10 +0800179 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800180 cp -rf ../../modules .
wanwei.jiang8abddcc2022-03-16 21:18:48 +0800181
182 if [[ -n ${LLVM} ]]; then
183 for module in `ls modules/*.ko`;
184 do
185 ${ROOT_DIR}/${CLANG_PREBUILT_BIN}/llvm-objcopy --strip-debug ${module}
186 done
187 elif [[ -n ${CROSS_COMPILE} ]]; then
188 for module in `ls modules/*.ko`;
189 do
190 ${CROSS_COMPILE}objcopy --strip-debug ${module}
191 done
192 else
193 echo "can't strip debug module"
194 fi
195
wanwei.jiang612a8882021-11-23 17:12:23 +0800196 find . | cpio -o -H newc | gzip > ../rootfs_new.cpio.gz
197 cd ../
Lei Zhang475c17b2022-03-03 11:08:50 +0800198 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 +0800199 mv rootfs_new.cpio.gz.uboot ../
200 cd ../
201
202 popd
203}
204export -f rebuild_rootfs
wanwei.jiang403c9942021-11-30 18:29:02 +0800205
206function check_undefined_symbol() {
wanwei.jiang236e9a32021-12-07 16:34:14 +0800207 pushd ${DIST_DIR}/modules
wanwei.jiang403c9942021-11-30 18:29:02 +0800208 echo
209 echo "========================================================"
210 echo "Functions or variables not defined in this module refer to which module."
wanwei.jiang236e9a32021-12-07 16:34:14 +0800211 nm ../vmlinux | grep -E " T | D | B | R | W "> vmlinux_T.txt
wanwei.jiang403c9942021-11-30 18:29:02 +0800212 cat __install.sh | grep "insmod" | cut -d ' ' -f 2 > module_list.txt
213 while read LINE
214 do
215 echo ${LINE}
216 for U in `nm ${LINE} | grep " U " | sed -e 's/^\s*//' -e 's/\s*$//' | cut -d ' ' -f 2`
217 do
218 #echo ${U}
219 U_v=`grep -w ${U} vmlinux_T.txt`
220 in_vmlinux=0
221 if [ -n "${U_v}" ];
222 then
wanwei.jiangd7b29ef2021-12-01 19:59:41 +0800223 #printf "\t%-50s <== vmlinux\n" ${U}
wanwei.jiang403c9942021-11-30 18:29:02 +0800224 in_vmlinux=1
225 continue
226 fi
227 in_module=0
228 MODULE=
229 while read LINE1
230 do
wanwei.jiangd7b29ef2021-12-01 19:59:41 +0800231 U_m=`nm ${LINE1} | grep -E " T | D | B | R " | grep -v "\.cfi_jt" | grep "${U}"`
wanwei.jiang403c9942021-11-30 18:29:02 +0800232 if [ -n "${U_m}" ];
233 then
234 in_module=1
235 MODULE=${LINE1}
236 fi
237 done < module_list.txt
238 if [ ${in_module} -eq "1" ];
239 then
240 printf "\t%-50s <== %s\n" ${U} ${MODULE}
241 continue
242 else
243 printf "\t%-50s <== none\n" ${U}
244 fi
245 done
246 echo
247 echo
248 done < module_list.txt
249 rm vmlinux_T.txt
250 rm module_list.txt
251 popd
252}
253export -f check_undefined_symbol