ARM/ARM64: configs: tizen: Enable ASHMEM
[platform/kernel/linux-rpi.git] / build-rpi4.sh
1 #!/bin/bash
2
3 COLOR_RED_BG=$(tput setab 1)
4 COLOR_RED_BOLD=$(tput bold)$(tput setaf 1)
5 COLOR_RESET=$(tput sgr0)
6
7 MOD_DIR="usr/tmp_mod"
8 MOD_IMG="usr/modules.img"
9 MOD_SIZE=20
10 NCPUS=`cat /proc/cpuinfo | grep processor | wc -l`
11 NCPUS=$(($NCPUS * 2))
12
13 BUILD_ROOT=$PWD
14 KERNEL_PATH=`basename ${BUILD_ROOT}`
15
16 if [ $# == 0 ]; then
17         echo "Usage : $0 <architecture> [rt] [bootimg]"
18         echo "  architecture : arm or arm64"
19         echo "  e.g) $0 arm"
20         echo "  e.g) $0 arm64 rt"
21         echo "  e.g) $0 arm64 bootimg"
22         echo "  e.g) $0 arm rt bootimg"
23         exit
24 fi
25
26 # Check this system has ccache
27 check_ccache()
28 {
29         type ccache
30         if [ "$?" -eq "0" ]; then
31                 CCACHE=ccache
32         fi
33 }
34
35 check_sudo()
36 {
37         [ -e /usr/bin/make_ext4fs ] && USE_MAKE_EXT4FS=1
38         if [ "$USE_MAKE_EXT4FS" != "1" ] || [ "$IS_BOOTIMG" = "1" ]; then
39                 sudo ls > /dev/null
40         fi
41
42 }
43
44 function mk_bootimg()
45 {
46         TMP_PATH=./tmp_bootimg
47         TMP_UBOOT_PATH=./tmp_uboot
48         BOOT_PATH="rpi4/boot"
49         USER_ID=`id -u`
50         GROUP_ID=`id -g`
51
52         rm -f boot.img
53         rm -rf ${TMP_PATH}
54         mkdir ${TMP_PATH}
55
56         # Create boot.img
57         mkfs.vfat -F 16 -C -n BOOT boot.img 65536
58         sudo mount -o loop,uid=$USER_ID,gid=$GROUP_ID,showexec boot.img ${TMP_PATH}
59
60         cp -a $BOOT_PATH/LICENCE.broadcom ${TMP_PATH}
61         cp -a $BOOT_PATH/start*.elf ${TMP_PATH}
62         cp -a $BOOT_PATH/fixup*.dat ${TMP_PATH}
63         if [ "$ARM_ARCH" = "arm64" ]; then
64                 echo "Create 64bit boot image"
65                 cp -a $BOOT_PATH/config_64bit.txt ${TMP_PATH}/config.txt
66                 cp -a arch/arm64/boot/Image ${TMP_PATH}
67                 cp -a arch/arm64/boot/dts/broadcom/bcm*.dtb ${TMP_PATH}
68         else
69                 echo "Create 32bit boot image"
70                 cp -a $BOOT_PATH/config.txt ${TMP_PATH}
71                 cp -a arch/arm/boot/zImage ${TMP_PATH}
72                 cp -a arch/arm/boot/dts/broadcom/bcm*.dtb ${TMP_PATH}
73         fi
74         mkdir -p ${TMP_PATH}/overlays
75         cp -a arch/arm/boot/dts/overlays/*.dtbo ${TMP_PATH}/overlays
76
77         # install u-boot files extracted from u-boot-rpi4 rpm package in download.tizen.org.
78         rm -rf ${TMP_UBOOT_PATH}
79         mkdir -p ${TMP_UBOOT_PATH}
80         pushd ${TMP_UBOOT_PATH}
81         if [ "$ARM_ARCH" = "arm64" ]; then
82                 REPO_URL=http://download.tizen.org/snapshots/TIZEN/Tizen/Tizen-Unified/latest/repos/standard/packages/aarch64/
83         else
84                 REPO_URL=http://download.tizen.org/snapshots/TIZEN/Tizen/Tizen-Unified/latest/repos/standard/packages/armv7l/
85         fi
86         rm -f index.html*
87         wget ${REPO_URL}
88         UBOOT=`awk -F\" '{ print $2 }' index.html | grep u-boot-rpi4`
89         wget ${REPO_URL}${UBOOT}
90         unrpm ${UBOOT}
91         popd
92
93         cp -a ${TMP_UBOOT_PATH}/boot/* ${TMP_PATH}
94         sync
95         sudo umount ${TMP_PATH}
96
97         rm -rf ${TMP_UBOOT_PATH}
98         rm -rf ${TMP_PATH}
99 }
100
101 function mk_tizen_modules()
102 {
103         if [ -e ${BUILD_ROOT}/../linux-tizen-modules-source ]; then
104                 pushd ${BUILD_ROOT}/../linux-tizen-modules-source
105
106                 ln -s ${PWD}/include kernel
107
108                 export BUILD_logger=m
109                 export LOGGER_MAIN_BUFFER_SIZE=256
110                 export LOGGER_EVENTS_BUFFER_SIZE=256
111                 export LOGGER_RADIO_BUFFER_SIZE=256
112                 export LOGGER_SYSTEM_BUFFER_SIZE=256
113
114                 export BUILD_proc_tsm=m
115                 export BUILD_kdbus=m
116                 export BUILD_zlogger=m
117
118                 ARCH="${ARM_ARCH}" CROSS_COMPILE="${CROSS_COMPILER}" make -C kernel KERNELDIR=${BUILD_ROOT}
119
120                 rm -f kernel/include
121
122                 ARCH="${ARM_ARCH}" CROSS_COMPILE="${CROSS_COMPILER}" make -C kernel modules_install KERNELDIR=${BUILD_ROOT} INSTALL_MOD_PATH=../${KERNEL_PATH}/${MOD_DIR} INSTALL_MOD_STRIP=1 INSTALL_MOD_DIR=extra
123
124                 popd
125
126                 if [ -e ${BUILD_ROOT}/../linux-tizen-modules ]; then
127                         mkdir -p ${MOD_DIR}/lib/modules/modprobe.d
128                         mkdir -p ${MOD_DIR}/lib/modules/modules-load.d
129                         cp ${BUILD_ROOT}/../linux-tizen-modules/conf/tizen-modprobe-rpi4.conf ${MOD_DIR}/lib/modules/modprobe.d
130                         cp ${BUILD_ROOT}/../linux-tizen-modules/conf/tizen-modules-rpi4.conf ${MOD_DIR}/lib/modules/modules-load.d
131                 fi
132         else
133                 echo "linux-tizen-modules-source/linux-tizen-modules are not cloned in parent path, so skip building linux-tizen-modules."
134                 echo "To build linux-tizen-modules, please use below command:"
135                 echo "   git clone git://git.tizen.org/platform/kernel/linux-tizen-modules-source -b tizen ../linux-tizen-modules-source"
136                 echo "   git clone git://git.tizen.org/platform/kernel/linux-tizen-modules -b tizen ../linux-tizen-modules"
137         fi
138 }
139
140 function mk_modules() {
141         make ARCH=${ARM_ARCH} CROSS_COMPILE="$CROSS_COMPILER" modules_prepare
142         make ARCH=${ARM_ARCH} CROSS_COMPILE="$CROSS_COMPILER" modules -j ${NCPUS}
143
144         if [ "$?" != "0" ]; then
145                 echo "Failed to make modules"
146                 exit 1
147         fi
148
149         [ -d ${MOD_DIR} ] || mkdir ${MOD_DIR}
150
151         make ARCH=${ARM_ARCH} CROSS_COMPILE="$CROSS_COMPILER" modules_install INSTALL_MOD_PATH=${MOD_DIR} INSTALL_MOD_STRIP=1
152
153         # build and install linux-tizen-modules if cloned in parent path
154         mk_tizen_modules
155
156         if [ "$USE_MAKE_EXT4FS" == "1" ]; then
157                 /usr/bin/make_ext4fs -b 4096 -L modules -l ${MOD_SIZE}M $MOD_IMG ${MOD_DIR}/lib/modules/
158         else
159                 dd if=/dev/zero of=${MOD_IMG} bs=1M count=${MOD_SIZE}
160                 mkfs.ext4 -F -b 4096 -L modules ${MOD_IMG}
161                 [ -d ${MOD_DIR}/mnt ] || mkdir ${MOD_DIR}/mnt
162                 sudo mount -o loop ${MOD_IMG} ${MOD_DIR}/mnt
163                 sudo cp -rf ${MOD_DIR}/lib/modules/* ${MOD_DIR}/mnt
164                 sync
165                 sudo umount ${MOD_DIR}/mnt
166         fi
167         rm -rf ${MOD_DIR}
168         ls -al ${MOD_IMG}
169 }
170
171 check_ccache
172
173 function cleanup_localversion()
174 {
175         rm -f localversion-rt
176 }
177
178 function create_tar()
179 {
180
181         if [ ! -d output ] ; then
182                 mkdir ./output
183         fi
184
185         rm -f ./output/*
186
187         cp $BOOTFILES ./output
188         cp usr/modules.img ./output
189
190         FILES=`ls output`
191         DATE=`date +%Y%m%d%H%M`
192         if [ $ARM_ARCH = "arm" ]; then
193                 tar cvf tizen-local-${DATE}-boot-armv7l-rpi4.tar -C output $FILES
194                 mv tizen-local-${DATE}-boot-armv7l-rpi4.tar ./output/
195         elif [ $ARM_ARCH = "arm64" ]; then
196                 tar cvf tizen-local-${DATE}-boot-arm64-rpi4.tar -C output $FILES
197                 mv tizen-local-${DATE}-boot-arm64-rpi4.tar ./output/
198         else
199                 echo "There is no proper architecture agrument!"
200                 exit 1;
201         fi
202 }
203
204 DEFCONFIG=tizen_bcm2711_defconfig
205 touch .kernel_buildenv
206
207 IS_RT=0
208 if [ "$2" = "rt" ] || [ "$3" = "rt" ]; then
209         IS_RT=1
210 fi
211
212 IS_BOOTIMG=0
213 if [ "$2" = "bootimg" ] || [ "$3" = "bootimg" ]; then
214         IS_BOOTIMG=1
215 fi
216
217 if [ "$IS_RT" = "1" ]; then
218         echo "Build RT-Kernel"
219         BUILD_VERSION=`cat .kernel_buildenv`
220         if [ "$BUILD_VERSION" != "RT" ]; then
221                 echo "Previous .config is for Normal Kernel, so remove"
222                 rm -f .config
223         fi
224         DEFCONFIG=tizen_bcm2711_rt_defconfig
225         cp _localversion-rt localversion-rt
226         trap cleanup_localversion EXIT
227         echo "RT" > ./.kernel_buildenv
228 else
229         echo "Build Normal-Kernel"
230         BUILD_VERSION=`cat .kernel_buildenv`
231         if [ "$BUILD_VERSION" == "RT" ]; then
232                 echo "Previous .config is for RT Kernel, so remove"
233                 rm -f .config
234         fi
235         echo "NORMAL" > ./.kernel_buildenv
236 fi
237
238 check_sudo
239
240 if [ $1 = "arm" ]; then
241         ARM_ARCH="arm"
242         CROSS_COMPILER="${CCACHE} arm-linux-gnueabi-"
243         echo "ARM"
244 elif [ $1 = "arm64" ]; then
245         ARM_ARCH="arm64"
246         CROSS_COMPILER="${CCACHE} aarch64-linux-gnu-"
247         echo "ARM64"
248 else
249         echo "There is no arcitecture type..."
250         exit 1;
251 fi
252
253 if ! [ -e .config ] ; then
254         make ARCH="${ARM_ARCH}" CROSS_COMPILE="${CROSS_COMPILER}" ${DEFCONFIG}
255 fi
256
257 make ARCH="${ARM_ARCH}" CROSS_COMPILE="${CROSS_COMPILER}" -j ${NCPUS} 2>&1 | \
258 sed -e "/error:.*/{s/^.*error:/$(echo -e "${COLOR_RED_BG}&${COLOR_RESET}")/g;q1}" \
259         -e "/Error.*/{s/^.*Error:/$(echo -e "${COLOR_RED_BG}&${COLOR_RESET}")/g;q1}" \
260         -e "/ERROR.*/{s/^.*ERROR/$(echo -e "${COLOR_RED_BG}&${COLOR_RESET}")/g;q1}"
261 if [ $? -ne 0 ]; then
262         echo -e "${COLOR_RED_BOLD}Failed to build${COLOR_RESET}"
263         exit 1
264 fi
265
266 if [ "$IS_BOOTIMG" = "1" ]; then
267         mk_bootimg
268         BOOTFILES="boot.img"
269 else
270         if [ $ARM_ARCH = "arm" ]; then
271                 BOOTFILES="./arch/arm/boot/zImage  ./arch/arm/boot/dts/broadcom/bcm2711-rpi-4-b.dtb"
272         else
273                 BOOTFILES="./arch/arm64/boot/Image ./arch/arm64/boot/dts/broadcom/bcm2711-rpi-4-b.dtb"
274         fi
275 fi
276
277 # Make module.img file
278 mk_modules
279
280 # Create Tar file
281 create_tar
282
283 cleanup_localversion