• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/bin/bash
2
3# Copyright (C) 2022 iSoftStone Device Co., Ltd.
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8#     http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15
16
17export LICHEE_IC=${1}
18export LICHEE_KERN_VER=${2}
19export LICHEE_ARCH=${3}
20
21# root path
22export OHOS_ROOT_PATH=${4}
23export PRODUCT_COMPANY=isoftstone
24export SOC_COMPANY=allwinner
25export LICHEE_PLATFORM=linux
26export LICHEE_LINUX_DEV=bsp
27export IC_COMPANY=allwinner
28export LICHEE_KERN_SYSTEM=kernel_boot
29export LICHEE_FLASH=default
30export PRODUCT_NAME=zhiyuan
31export DEVICE_NAME=${PRODUCT_NAME}
32# test_flag
33build_flag=${5}
34
35
36if [ "x$LICHEE_IC" == "xt507" ]; then
37	export LICHEE_BOARD=zhiyuan
38	export LICHEE_CHIP=sun50iw9p1
39	export LICHEE_KERN_DEFCONF=t507_standard_defconfig
40fi
41
42
43if [ "x$LICHEE_ARCH" == "xarm64" ]; then
44	export LICHEE_CROSS_COMPILER=aarch64-linux-gnu
45	export LICHEE_KERN_DEFCONF_RELATIVE=${LICHEE_KERN_DEFCONF}
46	export LICHEE_TOOLCHAIN_PATH=${OHOS_ROOT_PATH}/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu
47	export LICHEE_GNU_NAME=aarch64-linux-gnu-
48fi
49
50# src kernel path
51export OHOS_KERNEL_SRC_PATH=${OHOS_ROOT_PATH}/kernel/linux                    #kernel/linux
52
53# vendor path
54export LICHEE_VENDOR_DIR=${OHOS_ROOT_PATH}/vendor
55export PRODUCT_PATH=vendor/${PRODUCT_COMPANY}/${PRODUCT_NAME}                 #vendor/isoftstone/zhiyuan
56
57# out path
58export LICHEE_OUT_DIR=${OHOS_ROOT_PATH}/out
59export BUILD_ROOT_PATH=${LICHEE_OUT_DIR}/${PRODUCT_NAME}
60export LICHEE_KERN_DIR=${LICHEE_OUT_DIR}/KERNEL_OBJ/kernel/src_tmp/${LICHEE_KERN_VER}
61export KERNEL_BUILD_SCRIPT_DIR=${LICHEE_KERN_DIR}
62export KERNEL_BUILD_OUT_DIR=${LICHEE_KERN_DIR}
63export LICHEE_KERN_DEFCONF_ABSOLUTE=${LICHEE_KERN_DIR}/arch/${LICHEE_ARCH}/configs/${LICHEE_KERN_DEFCONF}
64export LICHEE_PACK_OUT_DIR=/${LICHEE_OUT_DIR}/pack_out
65export LICHEE_PLAT_OUT=${LICHEE_OUT_DIR}/kernel/bsp
66
67# device soc path
68export DEVICE_COMPANY_PATH=${OHOS_ROOT_PATH}/device/soc/${IC_COMPANY}         #device/soc/allwinner
69export DEVICE_CHIP_PATH=${DEVICE_COMPANY_PATH}/${LICHEE_IC}                   #device/soc/allwinner/t507
70
71# device board path
72export BOARD_COMPANY_PATH=${OHOS_ROOT_PATH}/device/board/${PRODUCT_COMPANY}   #device/board/isoftstone
73export BOARD_PATH=${BOARD_COMPANY_PATH}/${PRODUCT_NAME}                       #device/board/isoftstone/zhiyuan
74export BOARD_KERNEL_PATH=${BOARD_PATH}/kernel                                 #device/board/isoftstone/zhiyuan/kernel
75export LICHEE_TOP_DIR=${BOARD_KERNEL_PATH}/build                              #device/board/isoftstone/zhiyuan/kernel/build
76export LICHEE_BUILD_DIR=${LICHEE_TOP_DIR}/scripts                             #device/board/isoftstone/zhiyuan/kernel/build/scripts
77export LICHEE_TOOLS_DIR=${LICHEE_TOP_DIR}/tools                               #device/board/isoftstone/zhiyuan/kernel/build/tools
78export LICHEE_BSP_DIR=${BOARD_KERNEL_PATH}/driver                             #device/board/isoftstone/zhiyuan/kernel/driver
79export LICHEE_SRC_KERN_DEFCONF=${DEVICE_CHIP_PATH}/patches/config/${LICHEE_KERN_DEFCONF}
80export LICHEE_LOADER_DIR=${BOARD_PATH}/bootloader                             #device/board/isoftstone/zhiyuan/bootloader
81export LICHEE_CHIP_CONFIG_DIR=${LICHEE_LOADER_DIR}                   	      #device/board/isoftstone/zhiyuan/bootloader
82export LICHEE_BRANDY_OUT_DIR=${LICHEE_LOADER_DIR}/bin                         #device/board/isoftstone/zhiyuan/bootloader/bin
83export LICHEE_BOARD_CONFIG_DIR=${LICHEE_CHIP_CONFIG_DIR}/configs/${PRODUCT_NAME}  #device/board/isoftstone/zhiyuan/bootloader/configs/zhiyuan
84[ -d "${LICHEE_BSP_DIR}" ] && export BSP_TOP=${LICHEE_KERN_DIR}/bsp/
85
86
87
88pack_config_file=.packconfig
89
90export BUILD_CONFIG_FILE=${LICHEE_TOP_DIR}/${pack_config_file}
91
92
93function mk_error()
94{
95	echo -e "\033[47;31mERROR: $*\033[0m"
96}
97
98function mk_warn()
99{
100	echo -e "\033[47;34mWARN: $*\033[0m"
101}
102
103function mk_info()
104{
105	echo -e "\033[47;30mINFO: $*\033[0m"
106}
107
108tag_version="kernel-v0.1"
109
110function check_env()
111{
112	if [ -f $LICHEE_KERN_DIR/scripts/build.sh ]; then
113		KERNEL_BUILD_SCRIPT_DIR=$LICHEE_KERN_DIR
114		KERNEL_BUILD_SCRIPT=scripts/build.sh
115		KERNEL_BUILD_OUT_DIR=$LICHEE_KERN_DIR
116		KERNEL_STAGING_DIR=$LICHEE_KERN_DIR/output
117	else
118		KERNEL_BUILD_SCRIPT_DIR=$LICHEE_BUILD_DIR
119		KERNEL_BUILD_SCRIPT=mkkernel.sh
120		KERNEL_BUILD_OUT_DIR=$LICHEE_KERN_DIR
121		KERNEL_STAGING_DIR=$LICHEE_OUT_DIR/kernel/staging
122	fi
123}
124
125function load_kernel()
126{
127	mk_info "start to load kernel"
128
129	if [ -d "$LICHEE_KERN_DIR" ]; then
130		rm -rf $LICHEE_KERN_DIR
131	fi
132
133	mkdir -p ${LICHEE_KERN_DIR}
134
135	#cp kernel to tmp kernel dir
136	git clone ${OHOS_KERNEL_SRC_PATH}/${LICHEE_KERN_VER} ${LICHEE_KERN_DIR}
137	mk_info "Finish copying ${LICHEE_LICHEE_KERN_VER} kernel to out path"
138
139	# enter kernel path to put sunxi patch
140	cd ${LICHEE_KERN_DIR}
141	git tag -a $tag_version -m "kernel tag"
142
143	mk_info "load kernel success"
144
145}
146
147ln_list=(
148	$OHOS_ROOT_PATH/drivers/hdf_core/adapter/khdf/linux    drivers/hdf/khdf
149	$OHOS_ROOT_PATH/drivers/hdf_core/framework             drivers/hdf/framework
150	$OHOS_ROOT_PATH/drivers/hdf_core/framework/include     include/hdf
151	$OHOS_ROOT_PATH/drivers/hdf_core/interfaces/inner_api  drivers/hdf/inner_api
152	$OHOS_ROOT_PATH/drivers/hdf_core/framework/include     include/hdf
153)
154
155cp_list=(
156	$OHOS_ROOT_PATH/third_party/bounds_checking_function  ./
157	$OHOS_ROOT_PATH/device/soc/hisilicon/common/platform/wifi         drivers/hdf/
158	$OHOS_ROOT_PATH/third_party/FreeBSD/sys/dev/evdev     drivers/hdf/
159)
160
161function copy_external_compents()
162{
163	for ((i=0; i<${#cp_list[*]}; i+=2))
164	do
165		dst_dir=${cp_list[$(expr $i + 1)]}/${cp_list[$i]##*/}
166		mkdir -p $dst_dir
167		cp -arfL ${cp_list[$i]}/* $dst_dir/
168	done
169}
170
171function ln_hdf_repos()
172{
173	for ((i=0; i<${#ln_list[*]}; i+=2))
174	do
175		ln -sf ${ln_list[$i]} ${ln_list[$(expr $i + 1)]}
176	done
177}
178
179function add_patch_to_kernel()
180{
181	# get kernel patch path
182
183	# local patch_path=${OHOS_KERNEL_SRC_PATH}/patches/${LICHEE_KERN_VER}/zhiyuan_patch    # Todo
184	# local kernel_patch=${patch_path}/kernel.patch                  # kernel patch
185	# local hdf_patch=${patch_path}/hdf.patch                        # hdf patch
186	# local kernel_config=${OHOS_KERNEL_SRC_PATH}/config/${LICHEE_KERN_VER}/arch/arm64/configs/${LICHEE_KERN_DEFCONF} # Todo
187
188	local patch_path=${DEVICE_CHIP_PATH}/patches                                     # temp
189	local kernel_patch=${patch_path}/kernel/${LICHEE_KERN_VER}/kernel.patch          # temp
190	local hdf_patch=${patch_path}/hdf/${LICHEE_KERN_VER}/hdf.patch                   # temp
191	local kernel_config=${patch_path}/config/${LICHEE_KERN_DEFCONF}                  # temp
192
193	echo "apply allwinner patch to kernel"
194
195	cd ${LICHEE_KERN_DIR}   # enter kernel path
196
197	# add aw patch
198	if [ -f "$kernel_patch" ] ; then
199		git reset --hard $tag_version
200		git am ${kernel_patch}
201	else
202		mk_error "not found kernel patch: $kernel_patch"
203		exit 1
204	fi
205
206	# add bsp driver to kernel
207	if [ "x$LICHEE_KERN_VER" == "xlinux-5.10" ]; then
208		if [ -e "${LICHEE_BSP_DIR}" ]; then
209			rm -rf bsp
210		fi
211		cp -af ${LICHEE_BSP_DIR} bsp
212	fi
213
214#---------------------------------------------------------------------------
215	# add hdf patch
216	if [ -f "$hdf_patch" ] ; then
217		git apply ${hdf_patch}
218	else
219		mk_error "not found hdf patch: $hdf_patch"
220		exit 1
221	fi
222#---------------------------------------------------------------------------
223
224	# cp config to kernel
225	if [ -f "$kernel_config" ] ; then
226		cp -af ${kernel_config} ./arch/${LICHEE_ARCH}/configs/
227	else
228		mk_error "not found kernel config: ${kernel_config}"
229		exit 1
230	fi
231
232	ln_hdf_repos
233	copy_external_compents
234	cd -
235	echo "put sunxi patches successfully"
236}
237
238function substitute_inittab()
239{
240
241	declare console
242	env_cfg_dir=${LICHEE_CHIP_CONFIG_DIR}/configs/default/env.cfg
243
244	if [ ! -f ${env_cfg_dir} ];then
245		mk_info "not find env.cfg in ${env_cfg_dir}"
246		return;
247	fi
248	console=$(grep -m1 -o ${env_cfg_dir} -e 'console=\w\+')
249	console=$(sed -e 's/console=\(\w\+\).*/\1/g' <<< $console)
250
251	if [ ${console} ]
252	then
253		sed -ie "s/ttyS[0-9]*/${console}/g" $1
254	fi
255
256}
257
258function prepare_mkkernel()
259{
260	# mark kernel .config belong to which platform
261	local config_mark="${KERNEL_BUILD_OUT_DIR}/.config.mark"
262	local board_dts="$LICHEE_BOARD_CONFIG_DIR/${LICHEE_KERN_VER}/board.dts"
263
264	if [ -f ${config_mark} ] ; then
265		local tmp=`cat ${config_mark}`
266		local tmp1="${LICHEE_CHIP}_${LICHEE_BOARD}_${LICHEE_PLATFORM}"
267		if [ ${tmp} != ${tmp1} ] ; then
268			mk_info "clean last time build for different platform"
269			if [ "x${LICHEE_KERN_DIR}" != "x" -a -d ${LICHEE_KERN_DIR} ]; then
270				(cd ${KERNEL_BUILD_SCRIPT_DIR} && [ -x ${KERNEL_BUILD_SCRIPT} ] && ./${KERNEL_BUILD_SCRIPT} "distclean")
271				rm -rf ${KERNEL_BUILD_OUT_DIR}/.config
272				echo "${LICHEE_CHIP}_${LICHEE_BOARD}_${LICHEE_PLATFORM}" > ${config_mark}
273			fi
274		fi
275	else
276		echo "${LICHEE_CHIP}_${LICHEE_BOARD}_${LICHEE_PLATFORM}" > ${config_mark}
277	fi
278}
279
280function mkkernel()
281{
282	#source .buildconfig-bk
283	mk_info "build kernel ..."
284
285	LICHEE_KERN_SYSTEM="kernel_boot"
286
287	prepare_mkkernel
288
289	echo "(cd ${KERNEL_BUILD_SCRIPT_DIR} && [ -x ${KERNEL_BUILD_SCRIPT} ] && ./${KERNEL_BUILD_SCRIPT})"
290	(cd ${KERNEL_BUILD_SCRIPT_DIR} && [ -x ${KERNEL_BUILD_SCRIPT} ] && ./${KERNEL_BUILD_SCRIPT} $@)
291	[ $? -ne 0 ] && mk_error "build kernel Failed" && return 1
292	# copy files related to pack to platform out
293
294	cp ${KERNEL_BUILD_OUT_DIR}/vmlinux ${LICHEE_PLAT_OUT}
295
296	cp ${LICHEE_KERN_DIR}/scripts/dtc/dtc ${LICHEE_PLAT_OUT}
297	local dts_path=$LICHEE_KERN_DIR/arch/${LICHEE_ARCH}/boot/dts
298	[ "x${LICHEE_ARCH}" == "xarm64" ] && \
299	dts_path=$dts_path/sunxi
300	rm -rf ${LICHEE_PLAT_OUT}/.sun*.dtb.*.tmp
301	cp $dts_path/.${LICHEE_CHIP}-*.dtb.d.dtc.tmp ${LICHEE_PLAT_OUT} 2>/dev/null
302	cp $dts_path/.${LICHEE_CHIP}-*.dtb.dts.tmp ${LICHEE_PLAT_OUT} 2>/dev/null
303
304	cp $dts_path/.board.dtb.d.dtc.tmp ${LICHEE_PLAT_OUT} 2>/dev/null
305	cp $dts_path/.board.dtb.dts.tmp ${LICHEE_PLAT_OUT} 2>/dev/null
306
307	mk_info "build kernel OK."
308
309	#delete board.dts
310	if [ "x${LICHEE_ARCH}" == "xarm64" ]; then
311		if [ -f ${LICHEE_KERN_DIR}/arch/${LICHEE_ARCH}/boot/dts/sunxi/board.dts ]; then
312			rm ${LICHEE_KERN_DIR}/arch/${LICHEE_ARCH}/boot/dts/sunxi/board.dts
313		fi
314	else
315		if [ -f ${LICHEE_KERN_DIR}/arch/${LICHEE_ARCH}/boot/dts/board.dts ];then
316			rm ${LICHEE_KERN_DIR}/arch/${LICHEE_ARCH}/boot/dts/board.dts
317		fi
318	fi
319}
320
321function delete_kernel_config()
322{
323	if [ -f "${LICHEE_KERN_DIR}/.config" ] ; then
324		rm -rf ${LICHEE_KERN_DIR}/.config
325	fi
326	if [ -f "${LICHEE_KERN_DIR}/.config.mark" ] ; then
327		rm -rf ${LICHEE_KERN_DIR}/.config
328	fi
329		if [ -f "${LICHEE_KERN_DIR}/.config.old" ] ; then
330		rm -rf ${LICHEE_KERN_DIR}/.config
331	fi
332}
333
334function mklichee()
335{
336
337	mk_info "----------------------------------------"
338	mk_info "build lichee ..."
339	mk_info "chip: $LICHEE_CHIP"
340	mk_info "platform: $LICHEE_PLATFORM"
341	mk_info "kernel: $LICHEE_KERN_VER"
342	mk_info "board: $LICHEE_BOARD"
343	mk_info "output: $LICHEE_PLAT_OUT"
344	mk_info "----------------------------------------"
345
346	check_output_dir
347
348	mkkernel
349	if [ $? -ne 0 ]; then
350		mk_info "mkkernel failed"
351		exit 1
352	fi
353}
354
355function check_output_dir()
356{
357	#mkdir out directory:
358	if [ "x" != "x${LICHEE_PLAT_OUT}" ]; then
359		if [ ! -d ${LICHEE_PLAT_OUT} ]; then
360			mkdir -p ${LICHEE_PLAT_OUT}
361		fi
362	fi
363}
364
365allconfig=(
366LICHEE_IC
367LICHEE_IC_BIG
368LICHEE_KERN_VER
369LICHEE_PLATFORM
370LICHEE_LINUX_DEV
371LICHEE_CHIP
372LICHEE_ARCH
373LICHEE_BOARD
374LICHEE_FLASH
375LICHEE_CROSS_COMPILER
376LICHEE_ROOTFS
377LICHEE_KERN_DEFCONF
378LICHEE_KERN_DEFCONF_RELATIVE
379IC_COMPANY
380PRODUCT_PATH
381KERNEL_BUILD_SCRIPT
382LICHEE_KERN_SYSTEM
383OHOS_ROOT_PATH
384OHOS_KERNEL_SRC_PATH
385LICHEE_OUT_DIR
386LICHEE_KERN_DIR
387KERNEL_BUILD_SCRIPT_DIR
388KERNEL_BUILD_OUT_DIR
389KERNEL_STAGING_DIR
390LICHEE_KERN_DEFCONF_ABSOLUTE
391DEVICE_COMPANY_PATH
392DEVICE_CHIP_PATH
393LICHEE_TOP_DIR
394LICHEE_BUILD_DIR
395LICHEE_TOOLS_DIR
396LICHEE_DEVICE_DIR
397LICHEE_CHIP_CONFIG_DIR
398LICHEE_BOARD_CONFIG_DIR
399LICHEE_PRODUCT_CONFIG_DIR
400LICHEE_BRANDY_OUT_DIR
401LICHEE_PACK_OUT_DIR
402LICHEE_TOOLCHAIN_PATH
403LICHEE_PLAT_OUT
404BSP_TOP
405PRODUCT_NAME)
406
407function save_config()
408{
409	local cfgkey=$1
410	local cfgval=$2
411	local cfgfile=$3
412	local dir=$(dirname $cfgfile)
413	[ ! -d $dir ] && mkdir -p $dir
414	cfgval=$(echo -e "$cfgval" | sed -e 's/^\s\+//g' -e 's/\s\+$//g')
415	if [ -f $cfgfile ] && [ -n "$(sed -n "/^\s*export\s\+$cfgkey\s*=/p" $cfgfile)" ]; then
416		sed -i "s|^\s*export\s\+$cfgkey\s*=\s*.*$|export $cfgkey=$cfgval|g" $cfgfile
417	else
418		echo "export $cfgkey=$cfgval" >> $cfgfile
419	fi
420}
421
422function save_all_config()
423{
424
425	local cfgkey=""
426	local cfgval=""
427
428	for cfgkey in ${allconfig[@]}; do
429		[ "x$cfgkey" == "xCONFIG_SESSION_SEPARATE" ] && continue
430		cfgval="$(eval echo '$'${cfgkey})"
431		save_config "$cfgkey" "$cfgval" $BUILD_CONFIG_FILE
432	done
433
434}
435
436KERNEL_MAKE="make -C ${LICHEE_KERN_DIR} 0=${LICHEE_KERN_DIR} ARCH=${LICHEE_ARCH} "
437KERNEL_MAKE+="ARCH_PREFIX=${LICHEE_ARCH} "
438KERNEL_MAKE+="CROSS_COMPILE=${LICHEE_TOOLCHAIN_PATH}/bin/${LICHEE_GNU_NAME} "
439
440
441
442if [ "x$build_flag" == "xloadconfig" ]; then
443	mk_info "make loadconfig"
444	(cd ${LICHEE_KERN_DIR} && \
445	${KERNEL_MAKE} defconfig KBUILD_DEFCONFIG=$LICHEE_KERN_DEFCONF_RELATIVE
446	)
447	exit 1
448elif [ "x$build_flag" == "xmenuconfig" ]; then
449	mk_info "make menuconfig"
450	cd ${LICHEE_KERN_DIR} && ${KERNEL_MAKE} menuconfig
451	exit 1
452elif [ "x$build_flag" == "xsaveconfig" ] ;then
453	mk_info "make saveconfig"
454	cd ${LICHEE_KERN_DIR} && ${KERNEL_MAKE} savedefconfig
455	cp $LICHEE_KERN_DIR/defconfig $LICHEE_KERN_DEFCONF_ABSOLUTE
456	cp $LICHEE_KERN_DIR/defconfig $LICHEE_SRC_KERN_DEFCONF
457	exit 1
458fi
459
460if [ "x$build_flag" == "xload" ] ; then
461	mk_info "Only load kernel"
462	load_kernel
463	add_patch_to_kernel
464	exit 0
465elif [ "x$build_flag" == "xkernel" ] ;then
466	mk_info "Only build kernel"
467else
468	load_kernel
469	add_patch_to_kernel
470fi
471
472delete_kernel_config
473
474check_env
475
476mklichee
477
478save_all_config
479
480mk_info "----------------------------------------"
481mk_info "build kernel OK."
482mk_info "----------------------------------------"
483
484
485