smarc_make_debian.sh
19.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
#!/bin/bash
# It is designed to build Debian Linux for Variscite iMX modules
# prepare host OS system:
# sudo apt-get install binfmt-support qemu qemu-user-static debootstrap kpartx
# sudo apt-get install lvm2 dosfstools gpart binutils git lib32ncurses5-dev python-m2crypto
# sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev
# sudo apt-get install autoconf libtool libglib2.0-dev libarchive-dev
# sudo apt-get install python-git xterm sed cvs subversion coreutils texi2html
# sudo apt-get install docbook-utils python-pysqlite2 help2man make gcc g++ desktop-file-utils libgl1-mesa-dev
# sudo apt-get install libglu1-mesa-dev mercurial automake groff curl lzop asciidoc u-boot-tools mtd-utils
#
# -e Exit immediately if a command exits with a non-zero status.
set -e
SCRIPT_NAME=${0##*/}
#### Exports Variables ####
#### global variables ####
readonly ABSOLUTE_FILENAME=`readlink -e "$0"`
readonly ABSOLUTE_DIRECTORY=`dirname ${ABSOLUTE_FILENAME}`
readonly SCRIPT_POINT=${ABSOLUTE_DIRECTORY}
readonly SCRIPT_START_DATE=`date +%Y%m%d`
readonly LOOP_MAJOR=7
# default mirror
readonly DEF_DEBIAN_MIRROR="https://snapshot.debian.org/archive/debian/20201130T213631Z/"
readonly DEB_RELEASE="buster"
readonly DEF_ROOTFS_TARBALL_NAME="rootfs.tar.gz"
## display
readonly DISPLAY="-lcdif-lvds"
# base paths
readonly DEF_BUILDENV="${ABSOLUTE_DIRECTORY}"
readonly DEF_SRC_DIR="${DEF_BUILDENV}/src"
readonly G_ROOTFS_DIR="${DEF_BUILDENV}/rootfs"
readonly G_TMP_DIR="${DEF_BUILDENV}/tmp"
readonly G_TOOLS_PATH="${DEF_BUILDENV}/toolchain"
readonly G_EMBEDIAN_PATH="${DEF_BUILDENV}/embedian"
#64 bit CROSS_COMPILER config and paths
readonly G_CROSS_COMPILER_64BIT_NAME="gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu"
readonly G_CROSS_COMPILER_ARCHIVE_64BIT="${G_CROSS_COMPILER_64BIT_NAME}.tar.xz"
readonly G_EXT_CROSS_64BIT_COMPILER_LINK="https://developer.arm.com/-/media/Files/downloads/gnu-a/8.3-2019.03/binrel/${G_CROSS_COMPILER_ARCHIVE_64BIT}"
readonly G_CROSS_COMPILER_64BIT_PREFIX="aarch64-linux-gnu-"
#### user rootfs packages ####
readonly G_USER_PACKAGES=""
export LC_ALL=C
#### Input params ####
PARAM_DEB_LOCAL_MIRROR="${DEF_DEBIAN_MIRROR}"
PARAM_OUTPUT_DIR="${DEF_BUILDENV}/output"
PARAM_DEBUG="0"
PARAM_CMD="all"
PARAM_BLOCK_DEVICE="na"
### usage ###
function usage()
{
echo "Make Debian ${DEB_RELEASE} image and create a bootabled SD card"
echo
echo "Usage:"
echo " MACHINE=<smarcimx8m2g|smarcimx8m4g> ./${SCRIPT_NAME} options"
echo
echo "Options:"
echo " -h|--help -- print this help"
echo " -c|--cmd <command>"
echo " Supported commands:"
echo " deploy -- prepare environment for all commands"
echo " all -- build or rebuild kernel/bootloader/rootfs"
echo " bootloader -- build or rebuild U-Boot"
echo " kernel -- build or rebuild the Linux kernel"
echo " kernelheaders -- build or rebuild Linux kernel headers"
echo " modules -- build or rebuild the Linux kernel modules & headers and install them in the rootfs dir"
echo " rootfs -- build or rebuild the Debian root filesystem and create rootfs.tar.gz"
echo " (including: make & install Debian packages, firmware and kernel modules & headers)"
echo " rtar -- generate or regenerate rootfs.tar.gz image from the rootfs folder"
echo " clean -- clean all build artifacts (without deleting sources code or resulted images)"
echo " sdcard -- create a bootable SD card"
echo " -o|--output -- custom select output directory (default: \"${PARAM_OUTPUT_DIR}\")"
echo " -d|--dev -- specify SD card device (exmple: -d /dev/sde)"
echo " --debug -- enable debug mode for this script"
echo "Examples of use:"
echo " deploy and build: ./${SCRIPT_NAME} --cmd deploy && sudo ./${SCRIPT_NAME} --cmd all"
echo " make the Linux kernel only: sudo ./${SCRIPT_NAME} --cmd kernel"
echo " make rootfs only: sudo ./${SCRIPT_NAME} --cmd rootfs"
echo " create SD card: sudo ./${SCRIPT_NAME} --cmd sdcard --dev /dev/sdX"
echo
}
if [ "${MACHINE}" = "smarcimx8m2g" ] ||
[ "${MACHINE}" = "smarcimx8m4g" ]; then
if [ ! -e ${G_EMBEDIAN_PATH}/smarcimx8mq/smarcimx8mq.sh ]; then
echo "Illegal MACHINE: ${MACHINE}"
echo
usage
exit 1
fi
source ${G_EMBEDIAN_PATH}/smarcimx8mq/smarcimx8mq.sh
fi
# Setup cross compiler path, name, kernel dtb path, kernel image type, helper scripts
if [ "${ARCH_CPU}" = "64BIT" ]; then
G_CROSS_COMPILER_NAME=${G_CROSS_COMPILER_64BIT_NAME}
G_EXT_CROSS_COMPILER_LINK=${G_EXT_CROSS_64BIT_COMPILER_LINK}
G_CROSS_COMPILER_ARCHIVE=${G_CROSS_COMPILER_ARCHIVE_64BIT}
G_CROSS_COMPILER_PREFIX=${G_CROSS_COMPILER_64BIT_PREFIX}
ARCH_ARGS="arm64"
BUILD_IMAGE_TYPE="Image"
KERNEL_BOOT_IMAGE_SRC="arch/arm64/boot/"
KERNEL_DTB_IMAGE_PATH="arch/arm64/boot/dts/embedian/"
# Include weston backend rootfs helper
source ${G_EMBEDIAN_PATH}/weston_rootfs.sh
source ${G_EMBEDIAN_PATH}/linux-headers_debian_src/create_kernel_tree.sh
else
echo " Error unknown CPU type"
exit 1
fi
G_CROSS_COMPILER_PATH="${G_TOOLS_PATH}/${G_CROSS_COMPILER_NAME}/bin"
## parse input arguments ##
readonly SHORTOPTS="c:o:d:h"
readonly LONGOPTS="cmd:,output:,dev:,help,debug"
ARGS=$(getopt -s bash --options ${SHORTOPTS} \
--longoptions ${LONGOPTS} --name ${SCRIPT_NAME} -- "$@" )
eval set -- "$ARGS"
while true; do
case $1 in
-c|--cmd ) # script command
shift
PARAM_CMD="$1";
;;
-o|--output ) # select output dir
shift
PARAM_OUTPUT_DIR="$1";
;;
-d|--dev ) # SD card block device
shift
[ -e ${1} ] && {
PARAM_BLOCK_DEVICE=${1};
};
;;
--debug ) # enable debug
PARAM_DEBUG=1;
;;
-h|--help ) # get help
usage
exit 0;
;;
-- )
shift
break
;;
* )
shift
break
;;
esac
shift
done
# enable trace option in debug mode
[ "${PARAM_DEBUG}" = "1" ] && {
echo "Debug mode enabled!"
set -x
};
echo "=============== Build summary ==============="
echo "Building Debian ${DEB_RELEASE} for ${MACHINE}"
echo "U-Boot config: ${G_UBOOT_DEF_CONFIG_MMC}"
echo "Kernel config: ${G_LINUX_KERNEL_DEF_CONFIG}"
echo "Default kernel dtb: ${DEFAULT_BOOT_DTB}"
echo "kernel dtbs: ${G_LINUX_DTB}"
echo "============================================="
echo
## declarate dynamic variables ##
readonly G_ROOTFS_TARBALL_PATH="${PARAM_OUTPUT_DIR}/${DEF_ROOTFS_TARBALL_NAME}"
###### local functions ######
### printing functions ###
# print error message
# $1 - printing string
function pr_error()
{
echo "E: $1"
}
# print warning message
# $1 - printing string
function pr_warning()
{
echo "W: $1"
}
# print info message
# $1 - printing string
function pr_info()
{
echo "I: $1"
}
# print debug message
# $1 - printing string
function pr_debug() {
echo "D: $1"
}
### work functions ###
# get sources from git repository
# $1 - git repository
# $2 - branch name
# $3 - output dir
# $4 - commit id
function get_git_src()
{
# clone src code
git clone ${1} -b ${2} ${3}
cd ${3}
git reset --hard ${4}
cd -
}
# get remote file
# $1 - remote file
# $2 - local file
function get_remote_file()
{
# download remote file
wget -c ${1} -O ${2}
}
function make_prepare()
{
# create src dir
mkdir -p ${DEF_SRC_DIR}
# create toolchain dir
mkdir -p ${G_TOOLS_PATH}
# create rootfs dir
mkdir -p ${G_ROOTFS_DIR}
# create out dir
mkdir -p ${PARAM_OUTPUT_DIR}
# create tmp dir
mkdir -p ${G_TMP_DIR}
}
# make tarball from footfs
# $1 -- packet folder
# $2 -- output tarball file (full name)
function make_tarball()
{
cd $1
chown root:root .
pr_info "make tarball from folder ${1}"
pr_info "Remove old tarball $2"
rm -f $2
pr_info "Create $2"
RETVAL=0
tar czf $2 . || {
RETVAL=1
rm -f $2
};
cd -
return $RETVAL
}
# make Linux kernel image & dtbs
# $1 -- cross compiler prefix
# $2 -- Linux defconfig file
# $3 -- Linux dtb files
# $4 -- Linux dirname
# $5 -- out path
function make_kernel()
{
pr_info "make kernel .config"
make ARCH=${ARCH_ARGS} CROSS_COMPILE=${1} ${G_CROSS_COMPILER_JOPTION} -C ${4}/ ${2}
pr_info "make kernel"
if [ ! -z "${UIMAGE_LOADADDR}" ]; then
IMAGE_EXTRA_ARGS="LOADADDR=${UIMAGE_LOADADDR}"
fi
make CROSS_COMPILE=${1} ARCH=${ARCH_ARGS} ${G_CROSS_COMPILER_JOPTION} ${IMAGE_EXTRA_ARGS}\
-C ${4}/ ${BUILD_IMAGE_TYPE}
pr_info "make ${3}"
make CROSS_COMPILE=${1} ARCH=${ARCH_ARGS} ${G_CROSS_COMPILER_JOPTION} -C ${4} ${3}
pr_info "Copy kernel and dtb files to output dir: ${5}"
cp ${4}/${KERNEL_BOOT_IMAGE_SRC}/${BUILD_IMAGE_TYPE} ${5}/;
cp ${4}/${KERNEL_DTB_IMAGE_PATH}*.dtb ${5}/;
}
# clean kernel
# $1 -- Linux dir path
function clean_kernel()
{
pr_info "Clean the Linux kernel"
make ARCH=${ARCH_ARGS} -C ${1}/ mrproper
}
# make Linux kernel modules
# $1 -- cross compiler prefix
# $2 -- Linux defconfig file
# $3 -- Linux dirname
# $4 -- out modules path
function make_kernel_modules()
{
pr_info "make kernel defconfig"
make ARCH=${ARCH_ARGS} CROSS_COMPILE=${1} ${G_CROSS_COMPILER_JOPTION} -C ${3} ${2}
pr_info "Compiling kernel modules"
make ARCH=${ARCH_ARGS} CROSS_COMPILE=${1} ${G_CROSS_COMPILER_JOPTION} -C ${3} modules
}
# make Linux kernel headers package
# $1 -- cross compiler prefix
# $2 -- Linux defconfig file
# $3 -- Linux dirname
# $4 -- out modules path
function make_kernel_headers_package()
{
pr_info "make kernel defconfig"
create_debian_kernel_headers_package ${3} \
${PARAM_OUTPUT_DIR}/kernel-headers ${G_EMBEDIAN_PATH}
pr_info "Installing kernel modules to ${4}"
make ARCH=${ARCH_ARGS} CROSS_COMPILE=${1} \
${G_CROSS_COMPILER_JOPTION} -C ${3} \
INSTALL_MOD_PATH=${4} modules_install
}
# install the Linux kernel modules
# $1 -- cross compiler prefix
# $2 -- Linux defconfig file
# $3 -- Linux dirname
# $4 -- out modules path
function install_kernel_modules()
{
pr_info "Installing kernel headers to ${4}"
make ARCH=${ARCH_ARGS} CROSS_COMPILE=${1} ${G_CROSS_COMPILER_JOPTION} -C ${3} \
INSTALL_HDR_PATH=${4}/usr/local headers_install
pr_info "Installing kernel modules to ${4}"
make ARCH=${ARCH_ARGS} CROSS_COMPILE=${1} ${G_CROSS_COMPILER_JOPTION} -C ${3} \
INSTALL_MOD_PATH=${4} modules_install
}
# make U-Boot
# $1 U-Boot path
# $2 Output dir
function make_uboot()
{
pr_info "Make U-Boot: ${G_UBOOT_DEF_CONFIG_MMC}"
# clean work directory
make ARCH=${ARCH_ARGS} -C ${1} \
CROSS_COMPILE=${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} \
${G_CROSS_COMPILER_JOPTION} mrproper
# make U-Boot mmc defconfig
make ARCH=${ARCH_ARGS} -C ${1} \
CROSS_COMPILE=${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} \
${G_CROSS_COMPILER_JOPTION} ${G_UBOOT_DEF_CONFIG_MMC}
# make U-Boot
make -C ${1} \
CROSS_COMPILE=${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} \
${G_CROSS_COMPILER_JOPTION}
if [ "${MACHINE}" = "smarcimx8m2g" ] ||
[ "${MACHINE}" = "smarcimx8m4g" ]; then
cd ${DEF_SRC_DIR}/imx-atf
LDFLAGS="" make CROSS_COMPILE=${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} \
PLAT=imx8mq bl31
cd -
cp ${DEF_SRC_DIR}/imx-atf/build/imx8mq/release/bl31.bin \
${DEF_SRC_DIR}/imx-mkimage/iMX8M/bl31.bin
cp ${G_EMBEDIAN_PATH}/smarcimx8mq/imx-boot-tools/signed_hdmi_imx8m.bin \
src/imx-mkimage/iMX8M/signed_hdmi_imx8m.bin
cp ${G_EMBEDIAN_PATH}/smarcimx8mq/imx-boot-tools/signed_dp_imx8m.bin \
src/imx-mkimage/iMX8M/signed_dp_imx8m.bin
cp ${G_EMBEDIAN_PATH}/smarcimx8mq/imx-boot-tools/lpddr4_pmu_train_1d_imem.bin \
src/imx-mkimage/iMX8M/lpddr4_pmu_train_1d_imem.bin
cp ${G_EMBEDIAN_PATH}/smarcimx8mq/imx-boot-tools/lpddr4_pmu_train_1d_dmem.bin \
src/imx-mkimage/iMX8M/lpddr4_pmu_train_1d_dmem.bin
cp ${G_EMBEDIAN_PATH}/smarcimx8mq/imx-boot-tools/lpddr4_pmu_train_2d_imem.bin \
src/imx-mkimage/iMX8M/lpddr4_pmu_train_2d_imem.bin
cp ${G_EMBEDIAN_PATH}/smarcimx8mq/imx-boot-tools/lpddr4_pmu_train_2d_dmem.bin \
src/imx-mkimage/iMX8M/lpddr4_pmu_train_2d_dmem.bin
cp ${G_EMBEDIAN_PATH}/smarcimx8mq/imx-boot-tools/soc.mak \
src/imx-mkimage/iMX8M/
cp ${1}/u-boot.bin ${DEF_SRC_DIR}/imx-mkimage/iMX8M/
cp ${1}/u-boot-nodtb.bin ${DEF_SRC_DIR}/imx-mkimage/iMX8M/
cp ${1}/spl/u-boot-spl.bin ${DEF_SRC_DIR}/imx-mkimage/iMX8M/
cp ${1}/arch/arm/dts/${UBOOT_DTB} ${DEF_SRC_DIR}/imx-mkimage/iMX8M/
cp ${1}/tools/mkimage ${DEF_SRC_DIR}/imx-mkimage/iMX8M/mkimage_uboot
chown -R $USER:$USER ${DEF_SRC_DIR}/imx-mkimage
cd ${DEF_SRC_DIR}/imx-mkimage
make SOC=iMX8M flash_evk
cp ${DEF_SRC_DIR}/imx-mkimage/iMX8M/flash.bin \
${DEF_SRC_DIR}/imx-mkimage/${G_UBOOT_NAME_FOR_EMMC}
cp ${G_UBOOT_NAME_FOR_EMMC} ${2}/${G_UBOOT_NAME_FOR_EMMC}
make SOC=iMX8M clean
make SOC=iMX8M flash_dp_evk
cp ${DEF_SRC_DIR}/imx-mkimage/iMX8M/flash.bin \
${DEF_SRC_DIR}/imx-mkimage/${G_UBOOT_NAME_FOR_EMMC_DP}
cp ${G_UBOOT_NAME_FOR_EMMC_DP} ${2}/${G_UBOOT_NAME_FOR_EMMC_DP}
fi
}
# clean U-Boot
# $1 -- U-Boot dir path
function clean_uboot()
{
pr_info "Clean U-Boot"
make ARCH=${ARCH_ARGS} -C ${1}/ mrproper
}
# verify the SD card
# $1 -- block device
function check_sdcard()
{
# Check that parameter is a valid block device
if [ ! -b "$1" ]; then
pr_error "$1 is not a valid block device, exiting"
return 1
fi
local dev=$(basename $1)
# Check that /sys/block/$dev exists
if [ ! -d /sys/block/$dev ]; then
pr_error "Directory /sys/block/${dev} missing, exiting"
return 1
fi
# Get device parameters
local removable=$(cat /sys/block/${dev}/removable)
local block_size=$(cat /sys/class/block/${dev}/queue/physical_block_size)
local size_bytes=$((${block_size}*$(cat /sys/class/block/${dev}/size)))
local size_gib=$(bc <<< "scale=1; ${size_bytes}/(1024*1024*1024)")
# Non removable SD card readers require additional check
if [ "${removable}" != "1" ]; then
local drive=$(udisksctl info -b /dev/${dev}|grep "Drive:"|cut -d"'" -f 2)
local mediaremovable=$(gdbus call --system --dest org.freedesktop.UDisks2 --object-path ${drive} \
--method org.freedesktop.DBus.Properties.Get org.freedesktop.UDisks2.Drive MediaRemovable)
if [[ "${mediaremovable}" = *"true"* ]]; then
removable=1
fi
fi
# Check that device is either removable or loop
if [ "$removable" != "1" -a $(stat -c '%t' /dev/$dev) != ${LOOP_MAJOR} ]; then
pr_error "$1 is not a removable device, exiting"
return 1
fi
# Check that device is attached
if [ ${size_bytes} -eq 0 ]; then
pr_error "$1 is not attached, exiting"
return 1
fi
pr_info "Device: ${LPARAM_BLOCK_DEVICE}, ${size_gib}GiB"
echo "============================================="
read -p "Press Enter to continue"
return 0
}
# make imx sdma firmware
# $1 -- linux-firmware directory
# $2 -- rootfs output dir
function make_imx_sdma_fw() {
pr_info "Install imx sdma firmware"
install -d ${2}/lib/firmware/imx/sdma
install -m 0644 ${1}/LICENSE.sdma_firmware ${2}/lib/firmware/
}
################ commands ################
function cmd_make_deploy()
{
# get linaro toolchain
(( `ls ${G_CROSS_COMPILER_PATH} 2>/dev/null | wc -l` == 0 )) && {
pr_info "Get and unpack cross compiler";
get_remote_file ${G_EXT_CROSS_COMPILER_LINK} \
${DEF_SRC_DIR}/${G_CROSS_COMPILER_ARCHIVE}
tar -xJf ${DEF_SRC_DIR}/${G_CROSS_COMPILER_ARCHIVE} \
-C ${G_TOOLS_PATH}/
};
# get U-Boot repository
(( `ls ${G_UBOOT_SRC_DIR} 2>/dev/null | wc -l` == 0 )) && {
pr_info "Get U-Boot repository";
get_git_src ${G_UBOOT_GIT} ${G_UBOOT_BRANCH} \
${G_UBOOT_SRC_DIR} ${G_UBOOT_REV}
};
# get kernel repository
(( `ls ${G_LINUX_KERNEL_SRC_DIR} 2>/dev/null | wc -l` == 0 )) && {
pr_info "Get kernel repository";
get_git_src ${G_LINUX_KERNEL_GIT} ${G_LINUX_KERNEL_BRANCH} \
${G_LINUX_KERNEL_SRC_DIR} ${G_LINUX_KERNEL_REV}
# patch kernel for SDMA module build
if [ "${MACHINE}" = "smarcimx8m2g" ] ||
[ "${MACHINE}" = "smarcimx8m4g" ]; then
cd ${G_LINUX_KERNEL_SRC_DIR}
git am < ${G_EMBEDIAN_PATH}/patches/kernel/0001-smarcimx8m_defconfig-Compile-SDMA-as-kernel-modu.patch
cd -
fi
};
if [ ! -z "${G_IMXBOOT_GIT}" ]; then
# get IMXBoot Source repository
(( `ls ${G_IMXBOOT_SRC_DIR} 2>/dev/null | wc -l` == 0 )) && {
pr_info "Get imx-boot";
get_git_src ${G_IMXBOOT_GIT} \
${G_IMXBOOT_BRACH} ${G_IMXBOOT_SRC_DIR} ${G_IMXBOOT_REV}
};
fi
# get imx-atf repository
if [ ! -z "${G_IMX_ATF_GIT}" ]; then
(( `ls ${G_IMX_ATF_SRC_DIR} 2>/dev/null | wc -l` == 0 )) && {
pr_info "Get IMX ATF repository";
get_git_src ${G_IMX_ATF_GIT} ${G_IMX_ATF_BRANCH} \
${G_IMX_ATF_SRC_DIR} ${G_IMX_ATF_REV}
# patch imx-atf
if [ "${MACHINE}" = "smarcimx8m2g" ] ||
[ "${MACHINE}" = "smarcimx8m4g" ]; then
cd ${G_IMX_ATF_SRC_DIR}
patch -p1 < ${G_EMBEDIAN_PATH}/smarcimx8mq/imx-boot-tools/imx-atf/imx8m-atf-ddr-timing.patch
cd -
fi
};
fi
return 0
}
function cmd_make_rootfs()
{
make_prepare;
# make debian weston backend rootfs for imx8 family
cd ${G_ROOTFS_DIR}
make_debian_weston_rootfs ${G_ROOTFS_DIR}
cd -
# pack rootfs
make_tarball ${G_ROOTFS_DIR} ${G_ROOTFS_TARBALL_PATH}
}
function cmd_make_uboot()
{
make_uboot ${G_UBOOT_SRC_DIR} ${PARAM_OUTPUT_DIR}
}
function cmd_make_kernel()
{
make_kernel ${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} \
${G_LINUX_KERNEL_DEF_CONFIG} "${G_LINUX_DTB}" \
${G_LINUX_KERNEL_SRC_DIR} ${PARAM_OUTPUT_DIR}
}
function cmd_make_kernel_header_deb()
{
make_kernel_headers_package \
${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} \
${G_LINUX_KERNEL_DEF_CONFIG} ${G_LINUX_KERNEL_SRC_DIR} \
${PARAM_OUTPUT_DIR}/kernel-headers/kernel
}
function cmd_make_kmodules()
{
rm -rf ${G_ROOTFS_DIR}/lib/modules/*
make_kernel_modules ${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} \
${G_LINUX_KERNEL_DEF_CONFIG} ${G_LINUX_KERNEL_SRC_DIR} \
${G_ROOTFS_DIR}
install_kernel_modules ${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} \
${G_LINUX_KERNEL_DEF_CONFIG} \
${G_LINUX_KERNEL_SRC_DIR} ${G_ROOTFS_DIR}
}
function cmd_make_rfs_tar()
{
# pack rootfs
make_tarball ${G_ROOTFS_DIR} ${G_ROOTFS_TARBALL_PATH}
}
function cmd_make_sdcard()
{
make_weston_sdcard ${PARAM_BLOCK_DEVICE} ${PARAM_OUTPUT_DIR}
}
function cmd_make_firmware() {
make_imx_sdma_fw ${G_IMX_SDMA_FW_SRC_DIR} ${G_ROOTFS_DIR}
}
function cmd_make_clean()
{
# clean kernel, dtb, modules
clean_kernel ${G_LINUX_KERNEL_SRC_DIR}
# clean U-Boot
clean_uboot ${G_UBOOT_SRC_DIR}
# delete tmp dirs and etc
pr_info "Delete tmp dir ${G_TMP_DIR}"
rm -rf ${G_TMP_DIR}
pr_info "Delete rootfs dir ${G_ROOTFS_DIR}"
rm -rf ${G_ROOTFS_DIR}
}
################ main function ################
# test for root access support
[ "$PARAM_CMD" != "deploy" ] && [ "$PARAM_CMD" != "bootloader" ] &&
[ "$PARAM_CMD" != "kernel" ] && [ "$PARAM_CMD" != "modules" ] &&
[ ${EUID} -ne 0 ] && {
pr_error "this command must be run as root (or sudo/su)"
exit 1;
};
pr_info "Command: \"$PARAM_CMD\" start..."
make_prepare
case $PARAM_CMD in
deploy )
cmd_make_deploy
;;
rootfs )
cmd_make_rootfs
;;
bootloader )
cmd_make_uboot
;;
kernel )
cmd_make_kernel
;;
modules )
cmd_make_kmodules
;;
kernelheaders )
cmd_make_kernel_header_deb
;;
firmware )
cmd_make_firmware
;;
sdcard )
cmd_make_sdcard
;;
rtar )
cmd_make_rfs_tar
;;
all )
cmd_make_uboot &&
cmd_make_kernel &&
cmd_make_kmodules &&
cmd_make_kernel_header_deb &&
cmd_make_rootfs
;;
clean )
cmd_make_clean
;;
* )
pr_error "Invalid input command: \"${PARAM_CMD}\"";
;;
esac
echo
pr_info "Command: \"$PARAM_CMD\" end."
echo