wenxue.guo
2023-12-22 7d0d561ec2bc45714186abb794a99343275c6a66
commit | author | age
849fbd 1 #!/bin/bash
G 2
3 # this project absolute path
4 PRJ_PATH=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd)
5
6 # top project absolute path
7 TOP_PATH=$(realpath $PRJ_PATH/..)
8
9 # binaries build prefix install path
10 PRFX_PATH=$PRJ_PATH/install
11
12 # binaries finally install path if needed
13 #INST_PATH=/tftp
14
15 # config file path
16 CONF_FILE=$TOP_PATH/config.json
17
18 # shell script will exit once get command error
19 set -e
20
21 #+-------------------------+
22 #| Shell script functions  |
23 #+-------------------------+
24
25 function pr_error() {
26     echo -e "\033[40;31m $1 \033[0m"
27 }
28
29 function pr_warn() {
30     echo -e "\033[40;33m $1 \033[0m"
31 }
32
33 function pr_info() {
34     echo -e "\033[40;32m $1 \033[0m"
35 }
36
37 # parser configure file and export environment variable
38 function export_env()
39 {
40     export BOARD=`jq -r ".bsp.board" $CONF_FILE | tr 'A-Z' 'a-z'`
41     export BSP_VER=`jq -r ".bsp.version" $CONF_FILE | tr 'A-Z' 'a-z'`
42     export GIT_URL=`jq -r ".bsp.giturl" $CONF_FILE | tr 'A-Z' 'a-z'`
43     export CROSS_COMPILE=`jq -r ".bsp.cortexAtool" $CONF_FILE | tr 'A-Z' 'a-z'`
44
45     export BRANCH=$BSP_VER
46     export KER_PATH=$PRJ_PATH/linux-imx
47
48     export JOBS=`cat /proc/cpuinfo | grep processor | wc -l`
49     export ARCH=arm64
50     export SRCS="linux-imx"
51 }
52
53 function build_kernel()
54 {
b05652 55     defconfig=${BOARD}_defconfig
G 56     patch_file=$PRJ_PATH/patches/$BOARD/linux-imx-$BSP_VER.patch
849fbd 57
G 58     cd $PRJ_PATH
59
60     if [ -d $KER_PATH ] ; then
61         pr_info "linux kernel source code fetched already"
62     else
63         pr_info "start fetch linux kernel source code"
64         git clone $GIT_URL/linux-imx.git -b $BRANCH --depth=1
65     fi
66
67     pr_info "Start build linux kernel source code"
68
69     cd $KER_PATH
70
d451d0 71     if [ ! -s arch/arm64/configs/$defconfig -a -s $patch_file ] ; then
b05652 72         pr_warn "do patch for $KER_PATH now..."
G 73         patch -p1 < $patch_file
74     fi
75
849fbd 76     if [ ! -s .config ] ; then
G 77         make ${defconfig}
78     fi
79
80     make -j ${JOBS}
81 }
82
83 function do_install()
84 {
85     pr_info "start install linux kernel images"
86
87     cd $KER_PATH
88
89     if [ -d $PRFX_PATH ] ; then
90         rm -rf $PRFX_PATH/*
91     else
92         mkdir -p $PRFX_PATH
93     fi
94
95     # Install image
96     cp arch/arm64/boot/Image $PRFX_PATH
97     cp arch/arm64/boot/dts/freescale/${BOARD}.dtb $PRFX_PATH
98
99     # Install kernel modules
100     make modules_install INSTALL_MOD_PATH=$PRFX_PATH INSTALL_MOD_STRIP=1
101
102     echo ""
103     pr_info "linux kernel installed to '$PRFX_PATH'"
104     ls $PRFX_PATH && echo ""
105
106     if [[ -n "$INST_PATH" && -w $INST_PATH ]] ; then
107         pr_info "install linux kernel to '$INST_PATH'"
108         cp $PRFX_PATH/Image $INST_PATH
109         cp $PRFX_PATH/${BOARD}.dtb $INST_PATH
110     fi
111 }
112
113 function do_build()
114 {
115     cd $PRJ_PATH
116
117     build_kernel
118
119     do_install
120 }
121
122 function do_clean()
123 {
124     cd $PRJ_PATH
125
126     for d in $SRCS
127     do
128         rm -rf $PRJ_PATH/$d
129     done
130
131     rm -rf $PRFX_PATH
132 }
133
134 #+-------------------------+
135 #| Shell script body entry |
136 #+-------------------------+
137
138 export_env
139
140 if [[ $# == 1 && $1 == -c ]] ;then
141     pr_warn "start clean linux kernel"
142     do_clean
143     exit;
144 fi
145
146 pr_warn "start build linux kernel for ${BOARD}"
147
148 do_build
149