Commit c66ac2dcc24293a7b5909ed4f61e296d328d72ac

Authored by Eric Lee
1 parent 89ed589067

Make changes to hardware revision 00F0: Replace Ethernet PHY by RTL8211FD-CG

Showing 1 changed file with 3 additions and 2 deletions Inline Diff

make_smarc_mx8m_debian.sh
1 #!/bin/bash 1 #!/bin/bash
2 # It is designed to build Debian linux for Embedian SMARC-imx8m modules 2 # It is designed to build Debian linux for Embedian SMARC-imx8m modules
3 # prepare host OS system: 3 # prepare host OS system:
4 # sudo apt-get install binfmt-support qemu qemu-user-static debootstrap kpartx 4 # sudo apt-get install binfmt-support qemu qemu-user-static debootstrap kpartx
5 # sudo apt-get install lvm2 dosfstools gpart binutils git lib32ncurses5-dev python-m2crypto 5 # sudo apt-get install lvm2 dosfstools gpart binutils git lib32ncurses5-dev python-m2crypto
6 # sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev 6 # sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev
7 # sudo apt-get install autoconf libtool libglib2.0-dev libarchive-dev 7 # sudo apt-get install autoconf libtool libglib2.0-dev libarchive-dev
8 # sudo apt-get install python-git xterm sed cvs subversion coreutils texi2html 8 # sudo apt-get install python-git xterm sed cvs subversion coreutils texi2html
9 # sudo apt-get install docbook-utils python-pysqlite2 help2man make gcc g++ desktop-file-utils libgl1-mesa-dev 9 # sudo apt-get install docbook-utils python-pysqlite2 help2man make gcc g++ desktop-file-utils libgl1-mesa-dev
10 # sudo apt-get install libglu1-mesa-dev mercurial automake groff curl lzop asciidoc u-boot-tools mtd-utils 10 # sudo apt-get install libglu1-mesa-dev mercurial automake groff curl lzop asciidoc u-boot-tools mtd-utils
11 # 11 #
12 12
13 # -e Exit immediately if a command exits with a non-zero status. 13 # -e Exit immediately if a command exits with a non-zero status.
14 set -e 14 set -e
15 15
16 SCRIPT_NAME=${0##*/} 16 SCRIPT_NAME=${0##*/}
17 readonly SCRIPT_VERSION="0.5" 17 readonly SCRIPT_VERSION="0.5"
18 18
19 19
20 #### Exports Variables #### 20 #### Exports Variables ####
21 #### global variables #### 21 #### global variables ####
22 readonly ABSOLUTE_FILENAME=`readlink -e "$0"` 22 readonly ABSOLUTE_FILENAME=`readlink -e "$0"`
23 readonly ABSOLUTE_DIRECTORY=`dirname ${ABSOLUTE_FILENAME}` 23 readonly ABSOLUTE_DIRECTORY=`dirname ${ABSOLUTE_FILENAME}`
24 readonly SCRIPT_POINT=${ABSOLUTE_DIRECTORY} 24 readonly SCRIPT_POINT=${ABSOLUTE_DIRECTORY}
25 readonly SCRIPT_START_DATE=`date +%Y%m%d` 25 readonly SCRIPT_START_DATE=`date +%Y%m%d`
26 readonly LOOP_MAJOR=7 26 readonly LOOP_MAJOR=7
27 27
28 # default mirror 28 # default mirror
29 readonly DEF_DEBIAN_MIRROR="http://httpredir.debian.org/debian" 29 readonly DEF_DEBIAN_MIRROR="http://httpredir.debian.org/debian"
30 readonly DEB_RELEASE="stretch" 30 readonly DEB_RELEASE="stretch"
31 readonly DEF_ROOTFS_TARBAR_NAME="rootfs.tar.gz" 31 readonly DEF_ROOTFS_TARBAR_NAME="rootfs.tar.gz"
32 32
33 ## display 33 ## display
34 readonly DISPLAY="-hdmi" 34 readonly DISPLAY="-hdmi"
35 35
36 ## base paths 36 ## base paths
37 readonly DEF_BUILDENV="${ABSOLUTE_DIRECTORY}" 37 readonly DEF_BUILDENV="${ABSOLUTE_DIRECTORY}"
38 readonly DEF_SRC_DIR="${DEF_BUILDENV}/src" 38 readonly DEF_SRC_DIR="${DEF_BUILDENV}/src"
39 readonly G_ROOTFS_DIR="${DEF_BUILDENV}/rootfs" 39 readonly G_ROOTFS_DIR="${DEF_BUILDENV}/rootfs"
40 readonly G_TMP_DIR="${DEF_BUILDENV}/tmp" 40 readonly G_TMP_DIR="${DEF_BUILDENV}/tmp"
41 readonly G_TOOLS_PATH="${DEF_BUILDENV}/toolchain" 41 readonly G_TOOLS_PATH="${DEF_BUILDENV}/toolchain"
42 readonly G_EMBEDIAN_PATH="${DEF_BUILDENV}/embedian" 42 readonly G_EMBEDIAN_PATH="${DEF_BUILDENV}/embedian"
43 43
44 ## LINUX kernel: git, config, paths and etc 44 ## LINUX kernel: git, config, paths and etc
45 readonly G_LINUX_KERNEL_SRC_DIR="${DEF_SRC_DIR}/kernel" 45 readonly G_LINUX_KERNEL_SRC_DIR="${DEF_SRC_DIR}/kernel"
46 readonly G_LINUX_KERNEL_GIT="git@git.embedian.com:developer/smarc-fsl-linux-kernel.git" 46 readonly G_LINUX_KERNEL_GIT="git@git.embedian.com:developer/smarc-fsl-linux-kernel.git"
47 readonly G_LINUX_KERNEL_BRANCH="smarc_8m_imx_4.14.78_1.0.0_ga" 47 readonly G_LINUX_KERNEL_BRANCH="smarc_8m_imx_4.14.78_1.0.0_ga"
48 readonly G_LINUX_KERNEL_REV="505564416eacf8b48162b150974ae28823e113ec" 48 readonly G_LINUX_KERNEL_REV="f87f42a63189a693346c3a5d2a83953b614fe3bd"
49 readonly G_LINUX_KERNEL_DEF_CONFIG='smarcimx8m_defconfig' 49 readonly G_LINUX_KERNEL_DEF_CONFIG='smarcimx8m_defconfig'
50 readonly G_LINUX_DTB='embedian/fsl-smarcimx8mq.dtb embedian/fsl-smarcimx8mq-dcss-lvds.dtb embedian/fsl-smarcimx8mq-hdmi.dtb embedian/fsl-smarcimx8mq-lcdif-lvds.dtb embedian/fsl-smarcimx8mq-dual-display.dtb embedian/fsl-smarcimx8mq-dp.dtb embedian/fsl-smarcimx8mq-edp.dtb' 50 readonly G_LINUX_DTB='embedian/fsl-smarcimx8mq.dtb embedian/fsl-smarcimx8mq-dcss-lvds.dtb embedian/fsl-smarcimx8mq-hdmi.dtb embedian/fsl-smarcimx8mq-lcdif-lvds.dtb embedian/fsl-smarcimx8mq-dual-display.dtb embedian/fsl-smarcimx8mq-dp.dtb embedian/fsl-smarcimx8mq-edp.dtb'
51 51
52 ## uboot 52 ## uboot
53 readonly G_UBOOT_SRC_DIR="${DEF_SRC_DIR}/uboot" 53 readonly G_UBOOT_SRC_DIR="${DEF_SRC_DIR}/uboot"
54 readonly G_UBOOT_GIT="git@git.embedian.com:developer/smarc-t335x-uboot.git" 54 readonly G_UBOOT_GIT="git@git.embedian.com:developer/smarc-t335x-uboot.git"
55 readonly G_UBOOT_BRANCH="smarc-imx_v2018.03_4.14.78_1.0.0_ga" 55 readonly G_UBOOT_BRANCH="smarc-imx_v2018.03_4.14.78_1.0.0_ga"
56 readonly G_UBOOT_REV="44d379cf3d846b046b2edf2df5c302159a5b1ac5" 56 readonly G_UBOOT_REV="4e4f4cd1fe0b62a27fd4e8c5854f867e402cc5d7"
57 readonly G_UBOOT_DEF_CONFIG='smarcimx8mq_4g_ser3_defconfig' 57 readonly G_UBOOT_DEF_CONFIG='smarcimx8mq_4g_ser3_defconfig'
58 readonly G_UBOOT_NAME='imx-boot-sd.bin' 58 readonly G_UBOOT_NAME='imx-boot-sd.bin'
59 59
60 ## CROSS_COMPILER config and paths 60 ## CROSS_COMPILER config and paths
61 readonly G_CROSS_COMPILER_NAME="gcc-linaro-6.4.1-2017.11-x86_64_aarch64-linux-gnu" 61 readonly G_CROSS_COMPILER_NAME="gcc-linaro-6.4.1-2017.11-x86_64_aarch64-linux-gnu"
62 readonly G_CROSS_COMPILER_ARCHIVE="${G_CROSS_COMPILER_NAME}.tar.xz" 62 readonly G_CROSS_COMPILER_ARCHIVE="${G_CROSS_COMPILER_NAME}.tar.xz"
63 readonly G_CROSS_COMPILER_PATH="${G_TOOLS_PATH}/${G_CROSS_COMPILER_NAME}/bin" 63 readonly G_CROSS_COMPILER_PATH="${G_TOOLS_PATH}/${G_CROSS_COMPILER_NAME}/bin"
64 readonly G_CROSS_COMPILER_PREFIX="aarch64-linux-gnu-" 64 readonly G_CROSS_COMPILER_PREFIX="aarch64-linux-gnu-"
65 readonly G_CROSS_COMPILER_JOPTION="-j 4" 65 readonly G_CROSS_COMPILER_JOPTION="-j 4"
66 readonly G_EXT_CROSS_COMPILER_LINK="http://releases.linaro.org/components/toolchain/binaries/6.4-2017.11/aarch64-linux-gnu/${G_CROSS_COMPILER_ARCHIVE}" 66 readonly G_EXT_CROSS_COMPILER_LINK="http://releases.linaro.org/components/toolchain/binaries/6.4-2017.11/aarch64-linux-gnu/${G_CROSS_COMPILER_ARCHIVE}"
67 67
68 ############## user rootfs packages ########## 68 ############## user rootfs packages ##########
69 readonly G_USER_PACKAGES="" 69 readonly G_USER_PACKAGES=""
70 70
71 export LC_ALL=C 71 export LC_ALL=C
72 72
73 SOM="smarc-imx8m" 73 SOM="smarc-imx8m"
74 74
75 #### Input params ##### 75 #### Input params #####
76 PARAM_DEB_LOCAL_MIRROR="${DEF_DEBIAN_MIRROR}" 76 PARAM_DEB_LOCAL_MIRROR="${DEF_DEBIAN_MIRROR}"
77 PARAM_OUTPUT_DIR="${DEF_BUILDENV}/output" 77 PARAM_OUTPUT_DIR="${DEF_BUILDENV}/output"
78 PARAM_DEBUG="0" 78 PARAM_DEBUG="0"
79 PARAM_CMD="all" 79 PARAM_CMD="all"
80 PARAM_BLOCK_DEVICE="na" 80 PARAM_BLOCK_DEVICE="na"
81 81
82 82
83 ### usage ### 83 ### usage ###
84 function usage() { 84 function usage() {
85 echo "This program version ${SCRIPT_VERSION}" 85 echo "This program version ${SCRIPT_VERSION}"
86 echo " Used for make debian(${DEB_RELEASE}) image for \"smarc-imx8m\" board" 86 echo " Used for make debian(${DEB_RELEASE}) image for \"smarc-imx8m\" board"
87 echo " and create booted sdcard" 87 echo " and create booted sdcard"
88 echo "" 88 echo ""
89 echo "Usage:" 89 echo "Usage:"
90 echo " ./${SCRIPT_NAME} options" 90 echo " ./${SCRIPT_NAME} options"
91 echo "" 91 echo ""
92 echo "Options:" 92 echo "Options:"
93 echo " -h|--help -- print this help" 93 echo " -h|--help -- print this help"
94 echo " -c|--cmd <command>" 94 echo " -c|--cmd <command>"
95 echo " Supported commands:" 95 echo " Supported commands:"
96 echo " deploy -- prepare environment for all commands" 96 echo " deploy -- prepare environment for all commands"
97 echo " all -- build or rebuild kernel/bootloader/rootfs" 97 echo " all -- build or rebuild kernel/bootloader/rootfs"
98 echo " bootloader -- build or rebuild bootloader (u-boot+SPL)" 98 echo " bootloader -- build or rebuild bootloader (u-boot+SPL)"
99 echo " kernel -- build or rebuild linux kernel for this board" 99 echo " kernel -- build or rebuild linux kernel for this board"
100 echo " modules -- build or rebuild linux kernel modules and install in rootfs directory for this board" 100 echo " modules -- build or rebuild linux kernel modules and install in rootfs directory for this board"
101 echo " rootfs -- build or rebuild debian rootfs filesystem (includes: make debian apks, make and install kernel moduled," 101 echo " rootfs -- build or rebuild debian rootfs filesystem (includes: make debian apks, make and install kernel moduled,"
102 echo " make and install extern modules (wifi/bt), create rootfs.tar.gz)" 102 echo " make and install extern modules (wifi/bt), create rootfs.tar.gz)"
103 echo " rtar -- generate or regenerate rootfs.tar.gz image from rootfs folder " 103 echo " rtar -- generate or regenerate rootfs.tar.gz image from rootfs folder "
104 echo " clean -- clean all build artifacts (not delete sources code and resulted images (output folder))" 104 echo " clean -- clean all build artifacts (not delete sources code and resulted images (output folder))"
105 echo " sdcard -- create bootting sdcard for this device" 105 echo " sdcard -- create bootting sdcard for this device"
106 echo " -o|--output -- custom select output directory (default: \"${PARAM_OUTPUT_DIR}\")" 106 echo " -o|--output -- custom select output directory (default: \"${PARAM_OUTPUT_DIR}\")"
107 echo " -d|--dev -- select sdcard device (exmple: -d /dev/sde)" 107 echo " -d|--dev -- select sdcard device (exmple: -d /dev/sde)"
108 echo " --debug -- enable debug mode for this script" 108 echo " --debug -- enable debug mode for this script"
109 echo "Examples of use:" 109 echo "Examples of use:"
110 echo " make only linux kernel for board: sudo ./${SCRIPT_NAME} --cmd kernel" 110 echo " make only linux kernel for board: sudo ./${SCRIPT_NAME} --cmd kernel"
111 echo " make only rootfs for board: sudo ./${SCRIPT_NAME} --cmd rootfs" 111 echo " make only rootfs for board: sudo ./${SCRIPT_NAME} --cmd rootfs"
112 echo " create boot sdcard: sudo ./${SCRIPT_NAME} --cmd sdcard --dev /dev/sdX" 112 echo " create boot sdcard: sudo ./${SCRIPT_NAME} --cmd sdcard --dev /dev/sdX"
113 echo " deploy and build: ./${SCRIPT_NAME} --cmd deploy && sudo ./${SCRIPT_NAME} --cmd all" 113 echo " deploy and build: ./${SCRIPT_NAME} --cmd deploy && sudo ./${SCRIPT_NAME} --cmd all"
114 echo "" 114 echo ""
115 } 115 }
116 116
117 ###### parse input arguments ## 117 ###### parse input arguments ##
118 readonly SHORTOPTS="c:o:d:s:h" 118 readonly SHORTOPTS="c:o:d:s:h"
119 readonly LONGOPTS="cmd:,output:,dev:,som:,help,debug" 119 readonly LONGOPTS="cmd:,output:,dev:,som:,help,debug"
120 120
121 ARGS=$(getopt -s bash --options ${SHORTOPTS} \ 121 ARGS=$(getopt -s bash --options ${SHORTOPTS} \
122 --longoptions ${LONGOPTS} --name ${SCRIPT_NAME} -- "$@" ) 122 --longoptions ${LONGOPTS} --name ${SCRIPT_NAME} -- "$@" )
123 123
124 eval set -- "$ARGS" 124 eval set -- "$ARGS"
125 125
126 while true; do 126 while true; do
127 case $1 in 127 case $1 in
128 -c|--cmd ) # script command 128 -c|--cmd ) # script command
129 shift 129 shift
130 PARAM_CMD="$1"; 130 PARAM_CMD="$1";
131 ;; 131 ;;
132 -o|--output ) # select output dir 132 -o|--output ) # select output dir
133 shift 133 shift
134 PARAM_OUTPUT_DIR="$1"; 134 PARAM_OUTPUT_DIR="$1";
135 ;; 135 ;;
136 -d|--dev ) # block device (for create sdcard) 136 -d|--dev ) # block device (for create sdcard)
137 shift 137 shift
138 [ -e ${1} ] && { 138 [ -e ${1} ] && {
139 PARAM_BLOCK_DEVICE=${1}; 139 PARAM_BLOCK_DEVICE=${1};
140 }; 140 };
141 ;; 141 ;;
142 --debug ) # enable debug 142 --debug ) # enable debug
143 PARAM_DEBUG=1; 143 PARAM_DEBUG=1;
144 ;; 144 ;;
145 -h|--help ) # get help 145 -h|--help ) # get help
146 usage 146 usage
147 exit 0; 147 exit 0;
148 ;; 148 ;;
149 -s|--som ) # target SOM 149 -s|--som ) # target SOM
150 shift 150 shift
151 SOM="$1"; 151 SOM="$1";
152 ;; 152 ;;
153 -- ) 153 -- )
154 shift 154 shift
155 break 155 break
156 ;; 156 ;;
157 * ) 157 * )
158 shift 158 shift
159 break 159 break
160 ;; 160 ;;
161 esac 161 esac
162 shift 162 shift
163 done 163 done
164 164
165 ## enable tarce options in debug mode 165 ## enable tarce options in debug mode
166 [ "${PARAM_DEBUG}" = "1" ] && { 166 [ "${PARAM_DEBUG}" = "1" ] && {
167 echo "Debug mode enabled!" 167 echo "Debug mode enabled!"
168 set -x 168 set -x
169 }; 169 };
170 170
171 if [ "${SOM}" = "smarc-imx8m" ]; then 171 if [ "${SOM}" = "smarc-imx8m" ]; then
172 IMXGSTPLG="imx-gst1.0-plugin-mx8mq" 172 IMXGSTPLG="imx-gst1.0-plugin-mx8mq"
173 else 173 else
174 echo "Unknown target SOM ${SOM}" 174 echo "Unknown target SOM ${SOM}"
175 exit 1 175 exit 1
176 fi 176 fi
177 177
178 if [ -d ${G_EMBEDIAN_PATH}/${SOM} ]; then 178 if [ -d ${G_EMBEDIAN_PATH}/${SOM} ]; then
179 echo "Building Debian for SOM ${SOM}" 179 echo "Building Debian for SOM ${SOM}"
180 else 180 else
181 echo "Missing custom files for SOM ${SOM}" 181 echo "Missing custom files for SOM ${SOM}"
182 exit 1 182 exit 1
183 fi 183 fi
184 184
185 ## declarate dinamic variables ## 185 ## declarate dinamic variables ##
186 readonly G_ROOTFS_TARBAR_PATH="${PARAM_OUTPUT_DIR}/${DEF_ROOTFS_TARBAR_NAME}" 186 readonly G_ROOTFS_TARBAR_PATH="${PARAM_OUTPUT_DIR}/${DEF_ROOTFS_TARBAR_NAME}"
187 187
188 ###### local functions ###### 188 ###### local functions ######
189 189
190 ### printing functions ### 190 ### printing functions ###
191 191
192 # print error message 192 # print error message
193 # $1 - printing string 193 # $1 - printing string
194 function pr_error() { 194 function pr_error() {
195 echo "E: $1" 195 echo "E: $1"
196 } 196 }
197 197
198 # print warning message 198 # print warning message
199 # $1 - printing string 199 # $1 - printing string
200 function pr_warning() { 200 function pr_warning() {
201 echo "W: $1" 201 echo "W: $1"
202 } 202 }
203 203
204 # print info message 204 # print info message
205 # $1 - printing string 205 # $1 - printing string
206 function pr_info() { 206 function pr_info() {
207 echo "I: $1" 207 echo "I: $1"
208 } 208 }
209 209
210 # print debug message 210 # print debug message
211 # $1 - printing string 211 # $1 - printing string
212 function pr_debug() { 212 function pr_debug() {
213 echo "D: $1" 213 echo "D: $1"
214 } 214 }
215 215
216 ### work functions ### 216 ### work functions ###
217 217
218 # get sources from git repository 218 # get sources from git repository
219 # $1 - git repository 219 # $1 - git repository
220 # $2 - branch name 220 # $2 - branch name
221 # $3 - output dir 221 # $3 - output dir
222 # $4 - commit id 222 # $4 - commit id
223 function get_git_src() { 223 function get_git_src() {
224 # clone src code 224 # clone src code
225 git clone ${1} -b ${2} ${3} 225 git clone ${1} -b ${2} ${3}
226 cd ${3} 226 cd ${3}
227 git reset --hard ${4} 227 git reset --hard ${4}
228 RET=$? 228 RET=$?
229 cd - 229 cd -
230 return $RET 230 return $RET
231 } 231 }
232 232
233 # get remote file 233 # get remote file
234 # $1 - remote file 234 # $1 - remote file
235 # $2 - local file 235 # $2 - local file
236 function get_remote_file() { 236 function get_remote_file() {
237 # download remote file 237 # download remote file
238 wget -c ${1} -O ${2} 238 wget -c ${1} -O ${2}
239 return $? 239 return $?
240 } 240 }
241 241
242 function make_prepare() { 242 function make_prepare() {
243 ## create src dir 243 ## create src dir
244 mkdir -p ${DEF_SRC_DIR} && :; 244 mkdir -p ${DEF_SRC_DIR} && :;
245 245
246 ## create toolchain dir 246 ## create toolchain dir
247 mkdir -p ${G_TOOLS_PATH} && :; 247 mkdir -p ${G_TOOLS_PATH} && :;
248 248
249 ## create rootfs dir 249 ## create rootfs dir
250 mkdir -p ${G_ROOTFS_DIR} && :; 250 mkdir -p ${G_ROOTFS_DIR} && :;
251 251
252 ## create out dir 252 ## create out dir
253 mkdir -p ${PARAM_OUTPUT_DIR} && :; 253 mkdir -p ${PARAM_OUTPUT_DIR} && :;
254 254
255 ## create tmp dir 255 ## create tmp dir
256 mkdir -p ${G_TMP_DIR} && :; 256 mkdir -p ${G_TMP_DIR} && :;
257 } 257 }
258 258
259 # function generate rootfs in input dir 259 # function generate rootfs in input dir
260 # $1 - rootfs base dir 260 # $1 - rootfs base dir
261 function make_debian_rootfs() { 261 function make_debian_rootfs() {
262 local ROOTFS_BASE=$1 262 local ROOTFS_BASE=$1
263 263
264 pr_info "Make debian(${DEB_RELEASE}) rootfs start..." 264 pr_info "Make debian(${DEB_RELEASE}) rootfs start..."
265 265
266 ## umount previus mounts (if fail) 266 ## umount previus mounts (if fail)
267 umount ${ROOTFS_BASE}/{sys,proc,dev/pts,dev} 2>/dev/null && :; 267 umount ${ROOTFS_BASE}/{sys,proc,dev/pts,dev} 2>/dev/null && :;
268 268
269 ## clear rootfs dir 269 ## clear rootfs dir
270 rm -rf ${ROOTFS_BASE}/* && :; 270 rm -rf ${ROOTFS_BASE}/* && :;
271 271
272 pr_info "rootfs: debootstrap" 272 pr_info "rootfs: debootstrap"
273 debootstrap --verbose --foreign --arch arm64 ${DEB_RELEASE} ${ROOTFS_BASE}/ ${PARAM_DEB_LOCAL_MIRROR} 273 debootstrap --verbose --foreign --arch arm64 ${DEB_RELEASE} ${ROOTFS_BASE}/ ${PARAM_DEB_LOCAL_MIRROR}
274 274
275 ## prepare qemu 275 ## prepare qemu
276 pr_info "rootfs: debootstrap in rootfs (second-stage)" 276 pr_info "rootfs: debootstrap in rootfs (second-stage)"
277 cp /usr/bin/qemu-aarch64-static ${ROOTFS_BASE}/usr/bin/ 277 cp /usr/bin/qemu-aarch64-static ${ROOTFS_BASE}/usr/bin/
278 mount -o bind /proc ${ROOTFS_BASE}/proc 278 mount -o bind /proc ${ROOTFS_BASE}/proc
279 mount -o bind /dev ${ROOTFS_BASE}/dev 279 mount -o bind /dev ${ROOTFS_BASE}/dev
280 mount -o bind /dev/pts ${ROOTFS_BASE}/dev/pts 280 mount -o bind /dev/pts ${ROOTFS_BASE}/dev/pts
281 mount -o bind /sys ${ROOTFS_BASE}/sys 281 mount -o bind /sys ${ROOTFS_BASE}/sys
282 chroot $ROOTFS_BASE /debootstrap/debootstrap --second-stage 282 chroot $ROOTFS_BASE /debootstrap/debootstrap --second-stage
283 283
284 # delete unused folder 284 # delete unused folder
285 chroot $ROOTFS_BASE rm -rf ${ROOTFS_BASE}/debootstrap 285 chroot $ROOTFS_BASE rm -rf ${ROOTFS_BASE}/debootstrap
286 286
287 pr_info "rootfs: generate default configs" 287 pr_info "rootfs: generate default configs"
288 mkdir -p ${ROOTFS_BASE}/etc/sudoers.d/ 288 mkdir -p ${ROOTFS_BASE}/etc/sudoers.d/
289 echo "user ALL=(root) /usr/bin/apt-get, /usr/bin/dpkg, /usr/bin/vi, /sbin/reboot" > ${ROOTFS_BASE}/etc/sudoers.d/user 289 echo "user ALL=(root) /usr/bin/apt-get, /usr/bin/dpkg, /usr/bin/vi, /sbin/reboot" > ${ROOTFS_BASE}/etc/sudoers.d/user
290 chmod 0440 ${ROOTFS_BASE}/etc/sudoers.d/user 290 chmod 0440 ${ROOTFS_BASE}/etc/sudoers.d/user
291 291
292 mkdir -p ${ROOTFS_BASE}/srv/local-apt-repository 292 mkdir -p ${ROOTFS_BASE}/srv/local-apt-repository
293 cp -r ${G_EMBEDIAN_PATH}/deb/* ${ROOTFS_BASE}/srv/local-apt-repository 293 cp -r ${G_EMBEDIAN_PATH}/deb/* ${ROOTFS_BASE}/srv/local-apt-repository
294 294
295 ## added mirror to source list 295 ## added mirror to source list
296 echo "deb ${DEF_DEBIAN_MIRROR} ${DEB_RELEASE} main contrib non-free 296 echo "deb ${DEF_DEBIAN_MIRROR} ${DEB_RELEASE} main contrib non-free
297 deb-src ${DEF_DEBIAN_MIRROR} ${DEB_RELEASE} main contrib non-free 297 deb-src ${DEF_DEBIAN_MIRROR} ${DEB_RELEASE} main contrib non-free
298 deb ${DEF_DEBIAN_MIRROR} ${DEB_RELEASE}-backports main contrib non-free 298 deb ${DEF_DEBIAN_MIRROR} ${DEB_RELEASE}-backports main contrib non-free
299 deb-src ${DEF_DEBIAN_MIRROR} ${DEB_RELEASE}-backports main contrib non-free 299 deb-src ${DEF_DEBIAN_MIRROR} ${DEB_RELEASE}-backports main contrib non-free
300 " > etc/apt/sources.list 300 " > etc/apt/sources.list
301 301
302 ## raise backports priority 302 ## raise backports priority
303 echo "Package: * 303 echo "Package: *
304 Pin: release n=${DEB_RELEASE}-backports 304 Pin: release n=${DEB_RELEASE}-backports
305 Pin-Priority: 500 305 Pin-Priority: 500
306 " > etc/apt/preferences.d/backports 306 " > etc/apt/preferences.d/backports
307 307
308 ## maximize local repo priority 308 ## maximize local repo priority
309 echo "Package: * 309 echo "Package: *
310 Pin: origin "" 310 Pin: origin ""
311 Pin-Priority: 1000 311 Pin-Priority: 1000
312 " > etc/apt/preferences.d/local 312 " > etc/apt/preferences.d/local
313 313
314 echo " 314 echo "
315 # /dev/mmcblk0p1 /boot vfat defaults 0 0 315 # /dev/mmcblk0p1 /boot vfat defaults 0 0
316 " > etc/fstab 316 " > etc/fstab
317 317
318 echo "smarc-imx8m" > etc/hostname 318 echo "smarc-imx8m" > etc/hostname
319 319
320 echo "auto lo 320 echo "auto lo
321 iface lo inet loopback 321 iface lo inet loopback
322 " > etc/network/interfaces 322 " > etc/network/interfaces
323 323
324 echo " 324 echo "
325 locales locales/locales_to_be_generated multiselect en_US.UTF-8 UTF-8 325 locales locales/locales_to_be_generated multiselect en_US.UTF-8 UTF-8
326 locales locales/default_environment_locale select en_US.UTF-8 326 locales locales/default_environment_locale select en_US.UTF-8
327 console-common console-data/keymap/policy select Select keymap from full list 327 console-common console-data/keymap/policy select Select keymap from full list
328 keyboard-configuration keyboard-configuration/variant select 'English (US)' 328 keyboard-configuration keyboard-configuration/variant select 'English (US)'
329 openssh-server openssh-server/permit-root-login select true 329 openssh-server openssh-server/permit-root-login select true
330 " > debconf.set 330 " > debconf.set
331 331
332 pr_info "rootfs: prepare install packages in rootfs" 332 pr_info "rootfs: prepare install packages in rootfs"
333 ## apt-get install without starting 333 ## apt-get install without starting
334 cat > ${ROOTFS_BASE}/usr/sbin/policy-rc.d << EOF 334 cat > ${ROOTFS_BASE}/usr/sbin/policy-rc.d << EOF
335 #!/bin/sh 335 #!/bin/sh
336 exit 101 336 exit 101
337 EOF 337 EOF
338 338
339 chmod +x ${ROOTFS_BASE}/usr/sbin/policy-rc.d 339 chmod +x ${ROOTFS_BASE}/usr/sbin/policy-rc.d
340 340
341 ## third packages stage 341 ## third packages stage
342 cat > third-stage << EOF 342 cat > third-stage << EOF
343 #!/bin/bash 343 #!/bin/bash
344 # apply debconfig options 344 # apply debconfig options
345 debconf-set-selections /debconf.set 345 debconf-set-selections /debconf.set
346 rm -f /debconf.set 346 rm -f /debconf.set
347 347
348 348
349 function protected_install() { 349 function protected_install() {
350 local _name=\${1} 350 local _name=\${1}
351 local repeated_cnt=5; 351 local repeated_cnt=5;
352 local RET_CODE=1; 352 local RET_CODE=1;
353 353
354 echo Installing \${_name} 354 echo Installing \${_name}
355 for (( c=0; c<\${repeated_cnt}; c++ )) 355 for (( c=0; c<\${repeated_cnt}; c++ ))
356 do 356 do
357 apt install -y \${_name} && { 357 apt install -y \${_name} && {
358 RET_CODE=0; 358 RET_CODE=0;
359 break; 359 break;
360 }; 360 };
361 361
362 echo "" 362 echo ""
363 echo "###########################" 363 echo "###########################"
364 echo "## Fix missing packages ###" 364 echo "## Fix missing packages ###"
365 echo "###########################" 365 echo "###########################"
366 echo "" 366 echo ""
367 367
368 sleep 2; 368 sleep 2;
369 369
370 apt --fix-broken install -y && { 370 apt --fix-broken install -y && {
371 RET_CODE=0; 371 RET_CODE=0;
372 break; 372 break;
373 }; 373 };
374 done 374 done
375 375
376 return \${RET_CODE} 376 return \${RET_CODE}
377 } 377 }
378 378
379 # update packages and install base 379 # update packages and install base
380 apt-get update || apt-get upgrade 380 apt-get update || apt-get upgrade
381 381
382 # local-apt-repository support 382 # local-apt-repository support
383 protected_install local-apt-repository 383 protected_install local-apt-repository
384 384
385 # update packages and install base 385 # update packages and install base
386 apt-get update || apt-get upgrade 386 apt-get update || apt-get upgrade
387 387
388 protected_install locales 388 protected_install locales
389 protected_install ntp 389 protected_install ntp
390 protected_install openssh-server 390 protected_install openssh-server
391 protected_install nfs-common 391 protected_install nfs-common
392 392
393 # packages required when flashing emmc 393 # packages required when flashing emmc
394 protected_install dosfstools 394 protected_install dosfstools
395 395
396 # fix config for sshd (permit root login) 396 # fix config for sshd (permit root login)
397 sed -i -e 's/#PermitRootLogin.*/PermitRootLogin\tyes/g' /etc/ssh/sshd_config 397 sed -i -e 's/#PermitRootLogin.*/PermitRootLogin\tyes/g' /etc/ssh/sshd_config
398 398
399 # net-tools (ifconfig, etc.) 399 # net-tools (ifconfig, etc.)
400 protected_install net-tools 400 protected_install net-tools
401 protected_install network-manager 401 protected_install network-manager
402 402
403 # sdma package 403 # sdma package
404 protected_install imx-firmware-sdma 404 protected_install imx-firmware-sdma
405 405
406 # graphical packages 406 # graphical packages
407 protected_install libdrm-vivante1 407 protected_install libdrm-vivante1
408 protected_install imx-gpu-viv-core 408 protected_install imx-gpu-viv-core
409 protected_install weston 409 protected_install weston
410 410
411 # added alsa & gstreamer 411 # added alsa & gstreamer
412 protected_install alsa-utils 412 protected_install alsa-utils
413 protected_install gstreamer1.0-alsa 413 protected_install gstreamer1.0-alsa
414 protected_install gstreamer1.0-plugins-bad 414 protected_install gstreamer1.0-plugins-bad
415 protected_install gstreamer1.0-plugins-base 415 protected_install gstreamer1.0-plugins-base
416 protected_install gstreamer1.0-plugins-base-apps 416 protected_install gstreamer1.0-plugins-base-apps
417 protected_install gstreamer1.0-plugins-ugly 417 protected_install gstreamer1.0-plugins-ugly
418 protected_install gstreamer1.0-plugins-good 418 protected_install gstreamer1.0-plugins-good
419 protected_install gstreamer1.0-tools 419 protected_install gstreamer1.0-tools
420 protected_install ${IMXGSTPLG} 420 protected_install ${IMXGSTPLG}
421 421
422 # added i2c tools 422 # added i2c tools
423 protected_install i2c-tools 423 protected_install i2c-tools
424 424
425 # added usb tools 425 # added usb tools
426 protected_install usbutils 426 protected_install usbutils
427 427
428 # added net tools 428 # added net tools
429 protected_install iperf 429 protected_install iperf
430 430
431 # mtd 431 # mtd
432 protected_install mtd-utils 432 protected_install mtd-utils
433 433
434 # bluetooth 434 # bluetooth
435 protected_install bluetooth 435 protected_install bluetooth
436 protected_install bluez-obexd 436 protected_install bluez-obexd
437 protected_install bluez-tools 437 protected_install bluez-tools
438 protected_install blueman 438 protected_install blueman
439 protected_install gconf2 439 protected_install gconf2
440 440
441 # wifi support packages 441 # wifi support packages
442 #protected_install hostapd 442 #protected_install hostapd
443 protected_install udhcpd 443 protected_install udhcpd
444 444
445 # can support 445 # can support
446 protected_install can-utils 446 protected_install can-utils
447 447
448 apt-get -y autoremove 448 apt-get -y autoremove
449 449
450 # create users and set password 450 # create users and set password
451 useradd -m -G audio -s /bin/bash user 451 useradd -m -G audio -s /bin/bash user
452 usermod -a -G video user 452 usermod -a -G video user
453 echo "user:user" | chpasswd 453 echo "user:user" | chpasswd
454 echo "root:root" | chpasswd 454 echo "root:root" | chpasswd
455 455
456 # sado kill 456 # sado kill
457 rm -f third-stage 457 rm -f third-stage
458 EOF 458 EOF
459 459
460 pr_info "rootfs: install selected debian packages (third-stage)" 460 pr_info "rootfs: install selected debian packages (third-stage)"
461 chmod +x third-stage 461 chmod +x third-stage
462 chroot ${ROOTFS_BASE} /third-stage 462 chroot ${ROOTFS_BASE} /third-stage
463 463
464 ### install weston service 464 ### install weston service
465 install -d -m 0755 ${ROOTFS_BASE}/etc/xdg/weston 465 install -d -m 0755 ${ROOTFS_BASE}/etc/xdg/weston
466 install -m 0644 ${G_EMBEDIAN_PATH}/${SOM}/weston.ini ${ROOTFS_BASE}/etc/xdg/weston 466 install -m 0644 ${G_EMBEDIAN_PATH}/${SOM}/weston.ini ${ROOTFS_BASE}/etc/xdg/weston
467 install -m 0755 ${G_EMBEDIAN_PATH}/${SOM}/weston.config ${ROOTFS_BASE}/etc/default/weston 467 install -m 0755 ${G_EMBEDIAN_PATH}/${SOM}/weston.config ${ROOTFS_BASE}/etc/default/weston
468 install -m 0755 ${G_EMBEDIAN_PATH}/weston-start ${ROOTFS_BASE}/usr/bin/weston-start 468 install -m 0755 ${G_EMBEDIAN_PATH}/weston-start ${ROOTFS_BASE}/usr/bin/weston-start
469 install -m 0755 ${G_EMBEDIAN_PATH}/weston.profile ${ROOTFS_BASE}/etc/profile.d/weston.sh 469 install -m 0755 ${G_EMBEDIAN_PATH}/weston.profile ${ROOTFS_BASE}/etc/profile.d/weston.sh
470 install -m 0644 ${G_EMBEDIAN_PATH}/weston.service ${ROOTFS_BASE}/lib/systemd/system 470 install -m 0644 ${G_EMBEDIAN_PATH}/weston.service ${ROOTFS_BASE}/lib/systemd/system
471 ln -s /lib/systemd/system/weston.service \ 471 ln -s /lib/systemd/system/weston.service \
472 ${ROOTFS_BASE}/etc/systemd/system/multi-user.target.wants/weston.service 472 ${ROOTFS_BASE}/etc/systemd/system/multi-user.target.wants/weston.service
473 473
474 ## end packages stage ## 474 ## end packages stage ##
475 [ "${G_USER_PACKAGES}" != "" ] && { 475 [ "${G_USER_PACKAGES}" != "" ] && {
476 476
477 pr_info "rootfs: install user defined packages (user-stage)" 477 pr_info "rootfs: install user defined packages (user-stage)"
478 pr_info "rootfs: G_USER_PACKAGES \"${G_USER_PACKAGES}\" " 478 pr_info "rootfs: G_USER_PACKAGES \"${G_USER_PACKAGES}\" "
479 479
480 echo "#!/bin/bash 480 echo "#!/bin/bash
481 # update packages 481 # update packages
482 apt-get update 482 apt-get update
483 apt-get upgrade 483 apt-get upgrade
484 484
485 # install all user packages 485 # install all user packages
486 apt-get -y install ${G_USER_PACKAGES} 486 apt-get -y install ${G_USER_PACKAGES}
487 487
488 rm -f user-stage 488 rm -f user-stage
489 " > user-stage 489 " > user-stage
490 490
491 chmod +x user-stage 491 chmod +x user-stage
492 chroot ${ROOTFS_BASE} /user-stage 492 chroot ${ROOTFS_BASE} /user-stage
493 493
494 }; 494 };
495 495
496 ## binaries rootfs patching ## 496 ## binaries rootfs patching ##
497 install -m 0644 ${G_EMBEDIAN_PATH}/issue ${ROOTFS_BASE}/etc/ 497 install -m 0644 ${G_EMBEDIAN_PATH}/issue ${ROOTFS_BASE}/etc/
498 install -m 0644 ${G_EMBEDIAN_PATH}/issue.net ${ROOTFS_BASE}/etc/ 498 install -m 0644 ${G_EMBEDIAN_PATH}/issue.net ${ROOTFS_BASE}/etc/
499 install -m 0755 ${G_EMBEDIAN_PATH}/rc.local ${ROOTFS_BASE}/etc/ 499 install -m 0755 ${G_EMBEDIAN_PATH}/rc.local ${ROOTFS_BASE}/etc/
500 install -m 0644 ${G_EMBEDIAN_PATH}/splash.bmp ${ROOTFS_BASE}/boot/ 500 install -m 0644 ${G_EMBEDIAN_PATH}/splash.bmp ${ROOTFS_BASE}/boot/
501 cp ${PARAM_OUTPUT_DIR}/Image ${ROOTFS_BASE}/boot 501 cp ${PARAM_OUTPUT_DIR}/Image ${ROOTFS_BASE}/boot
502 cp ${PARAM_OUTPUT_DIR}/*.dtb ${ROOTFS_BASE}/boot 502 cp ${PARAM_OUTPUT_DIR}/*.dtb ${ROOTFS_BASE}/boot
503 ln -sf fsl-smarcimx8mq${DISPLAY}.dtb ${ROOTFS_BASE}/boot/fsl-smarcimx8mq.dtb 503 ln -sf fsl-smarcimx8mq${DISPLAY}.dtb ${ROOTFS_BASE}/boot/fsl-smarcimx8mq.dtb
504 504
505 mkdir -p ${ROOTFS_BASE}/usr/share/images/desktop-base/ 505 mkdir -p ${ROOTFS_BASE}/usr/share/images/desktop-base/
506 install -m 0644 ${G_EMBEDIAN_PATH}/wallpaper.png \ 506 install -m 0644 ${G_EMBEDIAN_PATH}/wallpaper.png \
507 ${ROOTFS_BASE}/usr/share/images/desktop-base/default 507 ${ROOTFS_BASE}/usr/share/images/desktop-base/default
508 508
509 ## added alsa default configs ## 509 ## added alsa default configs ##
510 install -m 0644 ${G_EMBEDIAN_PATH}/asound.state ${ROOTFS_BASE}/var/lib/alsa/ 510 install -m 0644 ${G_EMBEDIAN_PATH}/asound.state ${ROOTFS_BASE}/var/lib/alsa/
511 install -m 0644 ${G_EMBEDIAN_PATH}/asound.conf ${ROOTFS_BASE}/etc/ 511 install -m 0644 ${G_EMBEDIAN_PATH}/asound.conf ${ROOTFS_BASE}/etc/
512 512
513 ## Revert regular booting 513 ## Revert regular booting
514 rm -f ${ROOTFS_BASE}/usr/sbin/policy-rc.d 514 rm -f ${ROOTFS_BASE}/usr/sbin/policy-rc.d
515 515
516 ## install kernel modules in rootfs 516 ## install kernel modules in rootfs
517 install_kernel_modules ${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} ${G_LINUX_KERNEL_DEF_CONFIG} ${G_LINUX_KERNEL_SRC_DIR} ${ROOTFS_BASE} || { 517 install_kernel_modules ${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} ${G_LINUX_KERNEL_DEF_CONFIG} ${G_LINUX_KERNEL_SRC_DIR} ${ROOTFS_BASE} || {
518 pr_error "Failed #$? in function install_kernel_modules" 518 pr_error "Failed #$? in function install_kernel_modules"
519 return 2; 519 return 2;
520 } 520 }
521 521
522 ## copy all kernel headers for development 522 ## copy all kernel headers for development
523 mkdir -p ${ROOTFS_BASE}/usr/local/src/linux-imx/drivers/staging/android/uapi 523 mkdir -p ${ROOTFS_BASE}/usr/local/src/linux-imx/drivers/staging/android/uapi
524 cp ${G_LINUX_KERNEL_SRC_DIR}/drivers/staging/android/uapi/* ${ROOTFS_BASE}/usr/local/src/linux-imx/drivers/staging/android/uapi 524 cp ${G_LINUX_KERNEL_SRC_DIR}/drivers/staging/android/uapi/* ${ROOTFS_BASE}/usr/local/src/linux-imx/drivers/staging/android/uapi
525 cp -r ${G_LINUX_KERNEL_SRC_DIR}/include ${ROOTFS_BASE}/usr/local/src/linux-imx/ 525 cp -r ${G_LINUX_KERNEL_SRC_DIR}/include ${ROOTFS_BASE}/usr/local/src/linux-imx/
526 526
527 ## copy custom files 527 ## copy custom files
528 cp ${G_EMBEDIAN_PATH}/10-imx.rules ${ROOTFS_BASE}/etc/udev/rules.d 528 cp ${G_EMBEDIAN_PATH}/10-imx.rules ${ROOTFS_BASE}/etc/udev/rules.d
529 cp ${G_EMBEDIAN_PATH}/${SOM}/*.rules ${ROOTFS_BASE}/etc/udev/rules.d 529 cp ${G_EMBEDIAN_PATH}/${SOM}/*.rules ${ROOTFS_BASE}/etc/udev/rules.d
530 530
531 531
532 ## clenup command 532 ## clenup command
533 echo "#!/bin/bash 533 echo "#!/bin/bash
534 apt-get clean 534 apt-get clean
535 rm -f cleanup 535 rm -f cleanup
536 " > cleanup 536 " > cleanup
537 537
538 # clean all packages 538 # clean all packages
539 pr_info "rootfs: clean" 539 pr_info "rootfs: clean"
540 chmod +x cleanup 540 chmod +x cleanup
541 chroot ${ROOTFS_BASE} /cleanup 541 chroot ${ROOTFS_BASE} /cleanup
542 umount ${ROOTFS_BASE}/{sys,proc,dev/pts,dev} 542 umount ${ROOTFS_BASE}/{sys,proc,dev/pts,dev}
543 543
544 ## kill latest dbus-daemon instance due to qemu-aarch64-static 544 ## kill latest dbus-daemon instance due to qemu-aarch64-static
545 QEMU_PROC_ID=$(ps axf | grep dbus-daemon | grep qemu-aarch64-static | awk '{print $1}') 545 QEMU_PROC_ID=$(ps axf | grep dbus-daemon | grep qemu-aarch64-static | awk '{print $1}')
546 if [ -n "$QEMU_PROC_ID" ] 546 if [ -n "$QEMU_PROC_ID" ]
547 then 547 then
548 kill -9 $QEMU_PROC_ID 548 kill -9 $QEMU_PROC_ID
549 fi 549 fi
550 550
551 rm ${ROOTFS_BASE}/usr/bin/qemu-aarch64-static 551 rm ${ROOTFS_BASE}/usr/bin/qemu-aarch64-static
552 552
553 return 0; 553 return 0;
554 } 554 }
555 555
556 # make tarbar arx from footfs 556 # make tarbar arx from footfs
557 # $1 -- packet folder 557 # $1 -- packet folder
558 # $2 -- output arx full name 558 # $2 -- output arx full name
559 function make_tarbar() { 559 function make_tarbar() {
560 cd $1 560 cd $1
561 561
562 chown root:root . 562 chown root:root .
563 pr_info "make tarbar arx from folder ${1}" 563 pr_info "make tarbar arx from folder ${1}"
564 pr_info "Remove old arx $2" 564 pr_info "Remove old arx $2"
565 rm $2 > /dev/null 2>&1 && :; 565 rm $2 > /dev/null 2>&1 && :;
566 566
567 pr_info "Create $2" 567 pr_info "Create $2"
568 568
569 tar czf $2 . 569 tar czf $2 .
570 success=$? 570 success=$?
571 [ $success -eq 0 ] || { 571 [ $success -eq 0 ] || {
572 # fail 572 # fail
573 rm $2 > /dev/null 2>&1 && :; 573 rm $2 > /dev/null 2>&1 && :;
574 }; 574 };
575 575
576 cd - 576 cd -
577 } 577 }
578 578
579 # make linux kernel modules 579 # make linux kernel modules
580 # $1 -- cross compiler prefix 580 # $1 -- cross compiler prefix
581 # $2 -- linux defconfig file 581 # $2 -- linux defconfig file
582 # $3 -- linux dtb files 582 # $3 -- linux dtb files
583 # $4 -- linux dirname 583 # $4 -- linux dirname
584 # $5 -- out path 584 # $5 -- out path
585 function make_kernel() { 585 function make_kernel() {
586 pr_info "make kernel .config" 586 pr_info "make kernel .config"
587 make ARCH=arm64 CROSS_COMPILE=${1} ${G_CROSS_COMPILER_JOPTION} -C ${4}/ ${2} 587 make ARCH=arm64 CROSS_COMPILE=${1} ${G_CROSS_COMPILER_JOPTION} -C ${4}/ ${2}
588 588
589 pr_info "make kernel" 589 pr_info "make kernel"
590 make CROSS_COMPILE=${1} ARCH=arm64 ${G_CROSS_COMPILER_JOPTION} -C ${4}/ Image 590 make CROSS_COMPILE=${1} ARCH=arm64 ${G_CROSS_COMPILER_JOPTION} -C ${4}/ Image
591 591
592 pr_info "make ${3}" 592 pr_info "make ${3}"
593 make CROSS_COMPILE=${1} ARCH=arm64 ${G_CROSS_COMPILER_JOPTION} -C ${4} ${3} 593 make CROSS_COMPILE=${1} ARCH=arm64 ${G_CROSS_COMPILER_JOPTION} -C ${4} ${3}
594 594
595 pr_info "Copy kernel and dtb files to output dir: ${5}" 595 pr_info "Copy kernel and dtb files to output dir: ${5}"
596 cp ${4}/arch/arm64/boot/Image ${5}/; 596 cp ${4}/arch/arm64/boot/Image ${5}/;
597 cp ${4}/arch/arm64/boot/dts/embedian/*.dtb ${5}/; 597 cp ${4}/arch/arm64/boot/dts/embedian/*.dtb ${5}/;
598 598
599 return 0; 599 return 0;
600 } 600 }
601 601
602 # clean kernel 602 # clean kernel
603 # $1 -- linux dir path 603 # $1 -- linux dir path
604 function clean_kernel() { 604 function clean_kernel() {
605 pr_info "Clean linux kernel" 605 pr_info "Clean linux kernel"
606 606
607 make ARCH=arm64 -C ${1}/ mrproper 607 make ARCH=arm64 -C ${1}/ mrproper
608 608
609 return 0; 609 return 0;
610 } 610 }
611 611
612 # make linux kernel modules 612 # make linux kernel modules
613 # $1 -- cross compiler prefix 613 # $1 -- cross compiler prefix
614 # $2 -- linux defconfig file 614 # $2 -- linux defconfig file
615 # $3 -- linux dirname 615 # $3 -- linux dirname
616 # $4 -- out modules path 616 # $4 -- out modules path
617 function make_kernel_modules() { 617 function make_kernel_modules() {
618 pr_info "make kernel defconfig" 618 pr_info "make kernel defconfig"
619 make ARCH=arm64 CROSS_COMPILE=${1} ${G_CROSS_COMPILER_JOPTION} -C ${3} ${2} 619 make ARCH=arm64 CROSS_COMPILE=${1} ${G_CROSS_COMPILER_JOPTION} -C ${3} ${2}
620 620
621 pr_info "Compiling kernel modules" 621 pr_info "Compiling kernel modules"
622 make ARCH=arm64 CROSS_COMPILE=${1} ${G_CROSS_COMPILER_JOPTION} -C ${3} modules 622 make ARCH=arm64 CROSS_COMPILE=${1} ${G_CROSS_COMPILER_JOPTION} -C ${3} modules
623 } 623 }
624 624
625 # install linux kernel modules 625 # install linux kernel modules
626 # $1 -- cross compiler prefix 626 # $1 -- cross compiler prefix
627 # $2 -- linux defconfig file 627 # $2 -- linux defconfig file
628 # $3 -- linux dirname 628 # $3 -- linux dirname
629 # $4 -- out modules path 629 # $4 -- out modules path
630 function install_kernel_modules() { 630 function install_kernel_modules() {
631 pr_info "Installing kernel headers to ${4}" 631 pr_info "Installing kernel headers to ${4}"
632 make ARCH=arm64 CROSS_COMPILE=${1} ${G_CROSS_COMPILER_JOPTION} -C ${3} INSTALL_HDR_PATH=${4}/usr/local headers_install 632 make ARCH=arm64 CROSS_COMPILE=${1} ${G_CROSS_COMPILER_JOPTION} -C ${3} INSTALL_HDR_PATH=${4}/usr/local headers_install
633 633
634 pr_info "Installing kernel modules to ${4}" 634 pr_info "Installing kernel modules to ${4}"
635 make ARCH=arm64 CROSS_COMPILE=${1} ${G_CROSS_COMPILER_JOPTION} -C ${3} INSTALL_MOD_PATH=${4} modules_install 635 make ARCH=arm64 CROSS_COMPILE=${1} ${G_CROSS_COMPILER_JOPTION} -C ${3} INSTALL_MOD_PATH=${4} modules_install
636 636
637 return 0; 637 return 0;
638 } 638 }
639 639
640 # make uboot 640 # make uboot
641 # $1 uboot path 641 # $1 uboot path
642 # $2 outputdir 642 # $2 outputdir
643 function make_uboot() { 643 function make_uboot() {
644 ### make emmc uboot ### 644 ### make emmc uboot ###
645 pr_info "Make SPL & u-boot: ${G_UBOOT_DEF_CONFIG}" 645 pr_info "Make SPL & u-boot: ${G_UBOOT_DEF_CONFIG}"
646 # clean work directory 646 # clean work directory
647 make ARCH=arm64 -C ${1} CROSS_COMPILE=${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} ${G_CROSS_COMPILER_JOPTION} mrproper 647 make ARCH=arm64 -C ${1} CROSS_COMPILE=${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} ${G_CROSS_COMPILER_JOPTION} mrproper
648 648
649 # make uboot config for mmc 649 # make uboot config for mmc
650 make ARCH=arm64 -C ${1} CROSS_COMPILE=${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} ${G_CROSS_COMPILER_JOPTION} ${G_UBOOT_DEF_CONFIG} 650 make ARCH=arm64 -C ${1} CROSS_COMPILE=${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} ${G_CROSS_COMPILER_JOPTION} ${G_UBOOT_DEF_CONFIG}
651 651
652 # make uboot 652 # make uboot
653 make -C ${1} CROSS_COMPILE=${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} ${G_CROSS_COMPILER_JOPTION} 653 make -C ${1} CROSS_COMPILE=${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} ${G_CROSS_COMPILER_JOPTION}
654 654
655 if [ "${SOM}" = "smarc-imx8m" ]; then 655 if [ "${SOM}" = "smarc-imx8m" ]; then
656 HDMI=yes 656 HDMI=yes
657 UBOOT_DTB="fsl-smarcimx8mq.dtb" 657 UBOOT_DTB="fsl-smarcimx8mq.dtb"
658 fi 658 fi
659 659
660 # Copy u-boot, SPL and DTB 660 # Copy u-boot, SPL and DTB
661 chown -R $USER:$USER ${G_EMBEDIAN_PATH}/${SOM}/imx-mkimage
661 cd ${G_EMBEDIAN_PATH}/${SOM}/imx-mkimage 662 cd ${G_EMBEDIAN_PATH}/${SOM}/imx-mkimage
662 rm -f iMX8M/u-boot* iMX8M/*.dtb 663 rm -f iMX8M/u-boot* iMX8M/*.dtb
663 cp ${1}/u-boot.bin ${1}/u-boot-nodtb.bin ${1}/spl/u-boot-spl.bin ${1}/arch/arm/dts/${UBOOT_DTB} iMX8M/ 664 cp ${1}/u-boot.bin ${1}/u-boot-nodtb.bin ${1}/spl/u-boot-spl.bin ${1}/arch/arm/dts/${UBOOT_DTB} iMX8M/
664 665
665 # Build final image 666 # Build final image
666 if [ "${HDMI}" = "yes" ]; then 667 if [ "${HDMI}" = "yes" ]; then
667 make CROSS_COMPILE=${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} ${G_CROSS_COMPILER_JOPTION} SOC=iMX8M flash_hdmi_spl_uboot 668 make CROSS_COMPILE=${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} ${G_CROSS_COMPILER_JOPTION} SOC=iMX8M flash_hdmi_spl_uboot
668 else 669 else
669 make CROSS_COMPILE=${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} ${G_CROSS_COMPILER_JOPTION} SOC=iMX8M flash_spl_uboot 670 make CROSS_COMPILE=${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} ${G_CROSS_COMPILER_JOPTION} SOC=iMX8M flash_spl_uboot
670 fi 671 fi
671 672
672 # copy images 673 # copy images
673 cp iMX8M/flash.bin ${2}/${G_UBOOT_NAME} 674 cp iMX8M/flash.bin ${2}/${G_UBOOT_NAME}
674 675
675 return 0; 676 return 0;
676 } 677 }
677 678
678 # clean uboot 679 # clean uboot
679 # $1 -- u-boot dir path 680 # $1 -- u-boot dir path
680 function clean_uboot() { 681 function clean_uboot() {
681 pr_info "Clean uboot" 682 pr_info "Clean uboot"
682 683
683 make ARCH=arm64 -C ${1}/ mrproper 684 make ARCH=arm64 -C ${1}/ mrproper
684 685
685 return 0; 686 return 0;
686 } 687 }
687 688
688 # make sdcard for device 689 # make sdcard for device
689 # $1 -- block device 690 # $1 -- block device
690 function check_sdcard() 691 function check_sdcard()
691 { 692 {
692 # Check that parameter is a valid block device 693 # Check that parameter is a valid block device
693 if [ ! -b "$1" ]; then 694 if [ ! -b "$1" ]; then
694 pr_error "$1 is not a valid block device, exiting" 695 pr_error "$1 is not a valid block device, exiting"
695 return 1 696 return 1
696 fi 697 fi
697 698
698 local dev=$(basename $1) 699 local dev=$(basename $1)
699 700
700 # Check that /sys/block/$dev exists 701 # Check that /sys/block/$dev exists
701 if [ ! -d /sys/block/$dev ]; then 702 if [ ! -d /sys/block/$dev ]; then
702 pr_error "Directory /sys/block/${dev} missing, exiting" 703 pr_error "Directory /sys/block/${dev} missing, exiting"
703 return 1 704 return 1
704 fi 705 fi
705 706
706 # Get device parameters 707 # Get device parameters
707 local removable=$(cat /sys/block/${dev}/removable) 708 local removable=$(cat /sys/block/${dev}/removable)
708 local block_size=$(cat /sys/class/block/${dev}/queue/physical_block_size) 709 local block_size=$(cat /sys/class/block/${dev}/queue/physical_block_size)
709 local size_bytes=$((${block_size}*$(cat /sys/class/block/${dev}/size))) 710 local size_bytes=$((${block_size}*$(cat /sys/class/block/${dev}/size)))
710 local size_gib=$(bc <<< "scale=1; ${size_bytes}/(1024*1024*1024)") 711 local size_gib=$(bc <<< "scale=1; ${size_bytes}/(1024*1024*1024)")
711 712
712 # non removable SD card readers require additional check 713 # non removable SD card readers require additional check
713 if [ "${removable}" != "1" ]; then 714 if [ "${removable}" != "1" ]; then
714 local drive=$(udisksctl info -b /dev/${dev}|grep "Drive:"|cut -d"'" -f 2) 715 local drive=$(udisksctl info -b /dev/${dev}|grep "Drive:"|cut -d"'" -f 2)
715 local mediaremovable=$(gdbus call --system --dest org.freedesktop.UDisks2 --object-path ${drive} --method org.freedesktop.DBus.Properties.Get org.freedesktop.UDisks2.Drive MediaRemovable) 716 local mediaremovable=$(gdbus call --system --dest org.freedesktop.UDisks2 --object-path ${drive} --method org.freedesktop.DBus.Properties.Get org.freedesktop.UDisks2.Drive MediaRemovable)
716 if [[ "${mediaremovable}" = *"true"* ]]; then 717 if [[ "${mediaremovable}" = *"true"* ]]; then
717 removable=1 718 removable=1
718 fi 719 fi
719 fi 720 fi
720 721
721 # Check that device is either removable or loop 722 # Check that device is either removable or loop
722 if [ "$removable" != "1" -a $(stat -c '%t' /dev/$dev) != ${LOOP_MAJOR} ]; then 723 if [ "$removable" != "1" -a $(stat -c '%t' /dev/$dev) != ${LOOP_MAJOR} ]; then
723 pr_error "$1 is not a removable device, exiting" 724 pr_error "$1 is not a removable device, exiting"
724 return 1 725 return 1
725 fi 726 fi
726 727
727 # Check that device is attached 728 # Check that device is attached
728 if [ ${size_bytes} -eq 0 ]; then 729 if [ ${size_bytes} -eq 0 ]; then
729 pr_error "$1 is not attached, exiting" 730 pr_error "$1 is not attached, exiting"
730 return 1 731 return 1
731 fi 732 fi
732 733
733 pr_info "Device: ${LPARAM_BLOCK_DEVICE}, ${size_gib}GiB" 734 pr_info "Device: ${LPARAM_BLOCK_DEVICE}, ${size_gib}GiB"
734 pr_info "================================================" 735 pr_info "================================================"
735 read -p "Press Enter to continue" 736 read -p "Press Enter to continue"
736 737
737 return 0 738 return 0
738 } 739 }
739 740
740 # make sdcard for device 741 # make sdcard for device
741 # $1 -- block device 742 # $1 -- block device
742 # $2 -- output images dir 743 # $2 -- output images dir
743 function make_sdcard() { 744 function make_sdcard() {
744 readonly local LPARAM_BLOCK_DEVICE=${1} 745 readonly local LPARAM_BLOCK_DEVICE=${1}
745 readonly local LPARAM_OUTPUT_DIR=${2} 746 readonly local LPARAM_OUTPUT_DIR=${2}
746 readonly local P1_MOUNT_DIR="${G_TMP_DIR}/p1" 747 readonly local P1_MOUNT_DIR="${G_TMP_DIR}/p1"
747 readonly local P2_MOUNT_DIR="${G_TMP_DIR}/p2" 748 readonly local P2_MOUNT_DIR="${G_TMP_DIR}/p2"
748 readonly local DEBIAN_IMAGES_TO_ROOTFS_POINT="opt/images/Debian" 749 readonly local DEBIAN_IMAGES_TO_ROOTFS_POINT="opt/images/Debian"
749 750
750 readonly local BOOTLOAD_RESERVE_SIZE=2 751 readonly local BOOTLOAD_RESERVE_SIZE=2
751 readonly local PART1_SIZE=48 752 readonly local PART1_SIZE=48
752 readonly local BOOTPART=1 753 readonly local BOOTPART=1
753 readonly local ROOTFSPART=2 754 readonly local ROOTFSPART=2
754 readonly local SPARE_SIZE=4 755 readonly local SPARE_SIZE=4
755 756
756 [ "${LPARAM_BLOCK_DEVICE}" = "na" ] && { 757 [ "${LPARAM_BLOCK_DEVICE}" = "na" ] && {
757 pr_warning "No valid block device: ${LPARAM_BLOCK_DEVICE}" 758 pr_warning "No valid block device: ${LPARAM_BLOCK_DEVICE}"
758 return 1; 759 return 1;
759 }; 760 };
760 761
761 local part="" 762 local part=""
762 if [ `echo ${LPARAM_BLOCK_DEVICE} | grep -c mmcblk` -ne 0 ]; then 763 if [ `echo ${LPARAM_BLOCK_DEVICE} | grep -c mmcblk` -ne 0 ]; then
763 part="p" 764 part="p"
764 fi 765 fi
765 766
766 # Check that we're using a valid device 767 # Check that we're using a valid device
767 if ! check_sdcard ${LPARAM_BLOCK_DEVICE}; then 768 if ! check_sdcard ${LPARAM_BLOCK_DEVICE}; then
768 return 1 769 return 1
769 fi 770 fi
770 771
771 for ((i=0; i<10; i++)) 772 for ((i=0; i<10; i++))
772 do 773 do
773 if [ `mount | grep -c ${LPARAM_BLOCK_DEVICE}${part}$i` -ne 0 ]; then 774 if [ `mount | grep -c ${LPARAM_BLOCK_DEVICE}${part}$i` -ne 0 ]; then
774 umount ${LPARAM_BLOCK_DEVICE}${part}$i 775 umount ${LPARAM_BLOCK_DEVICE}${part}$i
775 fi 776 fi
776 done 777 done
777 778
778 function format_sdcard 779 function format_sdcard
779 { 780 {
780 pr_info "Formating SDCARD partitions" 781 pr_info "Formating SDCARD partitions"
781 mkfs.vfat -F 16 ${LPARAM_BLOCK_DEVICE}${part}1 -n boot 782 mkfs.vfat -F 16 ${LPARAM_BLOCK_DEVICE}${part}1 -n boot
782 mkfs.ext4 ${LPARAM_BLOCK_DEVICE}${part}2 -L rootfs 783 mkfs.ext4 ${LPARAM_BLOCK_DEVICE}${part}2 -L rootfs
783 } 784 }
784 785
785 function flash_u-boot 786 function flash_u-boot
786 { 787 {
787 pr_info "Flashing U-Boot" 788 pr_info "Flashing U-Boot"
788 dd if=${LPARAM_OUTPUT_DIR}/${G_UBOOT_NAME} of=${LPARAM_BLOCK_DEVICE} bs=1K seek=33; sync 789 dd if=${LPARAM_OUTPUT_DIR}/${G_UBOOT_NAME} of=${LPARAM_BLOCK_DEVICE} bs=1K seek=33; sync
789 } 790 }
790 791
791 function flash_sdcard 792 function flash_sdcard
792 { 793 {
793 pr_info "Flashing \"Image, device tree and rootfs\" partition" 794 pr_info "Flashing \"Image, device tree and rootfs\" partition"
794 cp -v ${LPARAM_OUTPUT_DIR}/Image ${P1_MOUNT_DIR}/ 795 cp -v ${LPARAM_OUTPUT_DIR}/Image ${P1_MOUNT_DIR}/
795 mkdir -p ${P1_MOUNT_DIR}/dtbs/ 796 mkdir -p ${P1_MOUNT_DIR}/dtbs/
796 cp -v ${LPARAM_OUTPUT_DIR}/fsl-smarcimx8mq${DISPLAY}.dtb ${P1_MOUNT_DIR}/dtbs/fsl-smarcimx8mq.dtb 797 cp -v ${LPARAM_OUTPUT_DIR}/fsl-smarcimx8mq${DISPLAY}.dtb ${P1_MOUNT_DIR}/dtbs/fsl-smarcimx8mq.dtb
797 cp -v ${G_EMBEDIAN_PATH}/uEnv.txt ${P1_MOUNT_DIR}/ 798 cp -v ${G_EMBEDIAN_PATH}/uEnv.txt ${P1_MOUNT_DIR}/
798 tar -xpf ${LPARAM_OUTPUT_DIR}/${DEF_ROOTFS_TARBAR_NAME} -C ${P2_MOUNT_DIR}/ 799 tar -xpf ${LPARAM_OUTPUT_DIR}/${DEF_ROOTFS_TARBAR_NAME} -C ${P2_MOUNT_DIR}/
799 } 800 }
800 801
801 function copy_debian_images 802 function copy_debian_images
802 { 803 {
803 mkdir -p ${P2_MOUNT_DIR}/${DEBIAN_IMAGES_TO_ROOTFS_POINT} 804 mkdir -p ${P2_MOUNT_DIR}/${DEBIAN_IMAGES_TO_ROOTFS_POINT}
804 805
805 pr_info "Copying Debian images to /${DEBIAN_IMAGES_TO_ROOTFS_POINT}" 806 pr_info "Copying Debian images to /${DEBIAN_IMAGES_TO_ROOTFS_POINT}"
806 cp ${LPARAM_OUTPUT_DIR}/${DEF_ROOTFS_TARBAR_NAME} ${P2_MOUNT_DIR}/${DEBIAN_IMAGES_TO_ROOTFS_POINT}/${DEF_ROOTFS_TARBAR_NAME} 807 cp ${LPARAM_OUTPUT_DIR}/${DEF_ROOTFS_TARBAR_NAME} ${P2_MOUNT_DIR}/${DEBIAN_IMAGES_TO_ROOTFS_POINT}/${DEF_ROOTFS_TARBAR_NAME}
807 808
808 pr_info "Copying U-Boot to /${DEBIAN_IMAGES_TO_ROOTFS_POINT}" 809 pr_info "Copying U-Boot to /${DEBIAN_IMAGES_TO_ROOTFS_POINT}"
809 cp ${LPARAM_OUTPUT_DIR}/${G_UBOOT_NAME} ${P2_MOUNT_DIR}/${DEBIAN_IMAGES_TO_ROOTFS_POINT}/ 810 cp ${LPARAM_OUTPUT_DIR}/${G_UBOOT_NAME} ${P2_MOUNT_DIR}/${DEBIAN_IMAGES_TO_ROOTFS_POINT}/
810 811
811 pr_info "Copying Image and device tree files to /${DEBIAN_IMAGES_TO_ROOTFS_POINT}" 812 pr_info "Copying Image and device tree files to /${DEBIAN_IMAGES_TO_ROOTFS_POINT}"
812 cp ${LPARAM_OUTPUT_DIR}/Image ${P2_MOUNT_DIR}/${DEBIAN_IMAGES_TO_ROOTFS_POINT}/ 813 cp ${LPARAM_OUTPUT_DIR}/Image ${P2_MOUNT_DIR}/${DEBIAN_IMAGES_TO_ROOTFS_POINT}/
813 cp ${LPARAM_OUTPUT_DIR}/*.dtb ${P2_MOUNT_DIR}/${DEBIAN_IMAGES_TO_ROOTFS_POINT}/ 814 cp ${LPARAM_OUTPUT_DIR}/*.dtb ${P2_MOUNT_DIR}/${DEBIAN_IMAGES_TO_ROOTFS_POINT}/
814 cp ${G_EMBEDIAN_PATH}/uEnv_emmc.txt ${P2_MOUNT_DIR}/${DEBIAN_IMAGES_TO_ROOTFS_POINT}/uEnv.txt 815 cp ${G_EMBEDIAN_PATH}/uEnv_emmc.txt ${P2_MOUNT_DIR}/${DEBIAN_IMAGES_TO_ROOTFS_POINT}/uEnv.txt
815 816
816 return 0; 817 return 0;
817 } 818 }
818 819
819 function copy_scripts 820 function copy_scripts
820 { 821 {
821 pr_info "Copying scripts to /${DEBIAN_IMAGES_TO_ROOTFS_POINT}" 822 pr_info "Copying scripts to /${DEBIAN_IMAGES_TO_ROOTFS_POINT}"
822 cp ${G_EMBEDIAN_PATH}/debian-emmc.sh ${P2_MOUNT_DIR}/usr/sbin/ 823 cp ${G_EMBEDIAN_PATH}/debian-emmc.sh ${P2_MOUNT_DIR}/usr/sbin/
823 } 824 }
824 825
825 function ceildiv 826 function ceildiv
826 { 827 {
827 local num=$1 828 local num=$1
828 local div=$2 829 local div=$2
829 echo $(( (num + div - 1) / div )) 830 echo $(( (num + div - 1) / div ))
830 } 831 }
831 832
832 # Delete the partitions 833 # Delete the partitions
833 for ((i=0; i<10; i++)) 834 for ((i=0; i<10; i++))
834 do 835 do
835 if [ `ls ${LPARAM_BLOCK_DEVICE}${part}$i 2> /dev/null | grep -c ${LPARAM_BLOCK_DEVICE}${part}$i` -ne 0 ]; then 836 if [ `ls ${LPARAM_BLOCK_DEVICE}${part}$i 2> /dev/null | grep -c ${LPARAM_BLOCK_DEVICE}${part}$i` -ne 0 ]; then
836 dd if=/dev/zero of=${LPARAM_BLOCK_DEVICE}${part}$i bs=512 count=1024 837 dd if=/dev/zero of=${LPARAM_BLOCK_DEVICE}${part}$i bs=512 count=1024
837 fi 838 fi
838 done 839 done
839 sync 840 sync
840 841
841 ((echo d; echo 1; echo d; echo 2; echo d; echo 3; echo d; echo w) | fdisk ${LPARAM_BLOCK_DEVICE} &> /dev/null) || true 842 ((echo d; echo 1; echo d; echo 2; echo d; echo 3; echo d; echo w) | fdisk ${LPARAM_BLOCK_DEVICE} &> /dev/null) || true
842 sync 843 sync
843 844
844 dd if=/dev/zero of=${LPARAM_BLOCK_DEVICE} bs=1024 count=4096 845 dd if=/dev/zero of=${LPARAM_BLOCK_DEVICE} bs=1024 count=4096
845 sleep 2; sync; 846 sleep 2; sync;
846 847
847 pr_info "Creating new partitions" 848 pr_info "Creating new partitions"
848 849
849 # Create a new partition table 850 # Create a new partition table
850 851
851 # Get total card size 852 # Get total card size
852 TOTAL_SIZE=`fdisk -s ${LPARAM_BLOCK_DEVICE}` 853 TOTAL_SIZE=`fdisk -s ${LPARAM_BLOCK_DEVICE}`
853 TOTAL_SIZE=`expr ${TOTAL_SIZE} / 1024` 854 TOTAL_SIZE=`expr ${TOTAL_SIZE} / 1024`
854 ROOTFS_SIZE=`expr ${TOTAL_SIZE} - ${BOOTLOAD_RESERVE_SIZE} - ${PART1_SIZE} - ${SPARE_SIZE}` 855 ROOTFS_SIZE=`expr ${TOTAL_SIZE} - ${BOOTLOAD_RESERVE_SIZE} - ${PART1_SIZE} - ${SPARE_SIZE}`
855 856
856 pr_info "ROOT SIZE=${ROOTFS_SIZE} TOTAl SIZE=${TOTAL_SIZE}" 857 pr_info "ROOT SIZE=${ROOTFS_SIZE} TOTAl SIZE=${TOTAL_SIZE}"
857 858
858 BLOCK=`echo ${LPARAM_BLOCK_DEVICE} | cut -d "/" -f 3` 859 BLOCK=`echo ${LPARAM_BLOCK_DEVICE} | cut -d "/" -f 3`
859 SECT_SIZE_BYTES=`cat /sys/block/${BLOCK}/queue/physical_block_size` 860 SECT_SIZE_BYTES=`cat /sys/block/${BLOCK}/queue/physical_block_size`
860 861
861 BOOTLOAD_RESERVE_SIZE_BYTES=$((BOOTLOAD_RESERVE_SIZE * 1024 * 1024)) 862 BOOTLOAD_RESERVE_SIZE_BYTES=$((BOOTLOAD_RESERVE_SIZE * 1024 * 1024))
862 PART1_SIZE_BYTES=$((PART1_SIZE * 1024 * 1024)) 863 PART1_SIZE_BYTES=$((PART1_SIZE * 1024 * 1024))
863 PART1_END_BYTES=`expr ${BOOTLOAD_RESERVE_SIZE_BYTES} + ${PART1_SIZE_BYTES}` 864 PART1_END_BYTES=`expr ${BOOTLOAD_RESERVE_SIZE_BYTES} + ${PART1_SIZE_BYTES}`
864 ROOTFS_SIZE_BYTES=$((ROOTFS_SIZE * 1024 * 1024)) 865 ROOTFS_SIZE_BYTES=$((ROOTFS_SIZE * 1024 * 1024))
865 866
866 PART1_FIRST_SECT=`ceildiv ${BOOTLOAD_RESERVE_SIZE_BYTES} ${SECT_SIZE_BYTES}` 867 PART1_FIRST_SECT=`ceildiv ${BOOTLOAD_RESERVE_SIZE_BYTES} ${SECT_SIZE_BYTES}`
867 PART1_END_SECT=`ceildiv ${PART1_END_BYTES} ${SECT_SIZE_BYTES}` 868 PART1_END_SECT=`ceildiv ${PART1_END_BYTES} ${SECT_SIZE_BYTES}`
868 PART2_FIRST_SECT=`expr ${PART1_END_SECT} + 1 ` 869 PART2_FIRST_SECT=`expr ${PART1_END_SECT} + 1 `
869 870
870 (echo n; echo p; echo $BOOTPART; echo $PART1_FIRST_SECT; \ 871 (echo n; echo p; echo $BOOTPART; echo $PART1_FIRST_SECT; \
871 echo $PART1_END_SECT; echo n; echo p; echo $ROOTFSPART; \ 872 echo $PART1_END_SECT; echo n; echo p; echo $ROOTFSPART; \
872 echo $PART2_FIRST_SECT; echo; echo p; echo w) | fdisk -u ${LPARAM_BLOCK_DEVICE} > /dev/null 873 echo $PART2_FIRST_SECT; echo; echo p; echo w) | fdisk -u ${LPARAM_BLOCK_DEVICE} > /dev/null
873 874
874 sleep 2; sync; 875 sleep 2; sync;
875 fdisk -l ${LPARAM_BLOCK_DEVICE} 876 fdisk -l ${LPARAM_BLOCK_DEVICE}
876 877
877 sleep 2; sync; 878 sleep 2; sync;
878 879
879 # Format the partitions 880 # Format the partitions
880 format_sdcard 881 format_sdcard
881 sleep 2; sync; 882 sleep 2; sync;
882 883
883 flash_u-boot 884 flash_u-boot
884 sleep 2; sync; 885 sleep 2; sync;
885 886
886 # Mount the partitions 887 # Mount the partitions
887 mkdir -p ${P1_MOUNT_DIR} 888 mkdir -p ${P1_MOUNT_DIR}
888 mkdir -p ${P2_MOUNT_DIR} 889 mkdir -p ${P2_MOUNT_DIR}
889 sync 890 sync
890 891
891 mount ${LPARAM_BLOCK_DEVICE}${part}1 ${P1_MOUNT_DIR} 892 mount ${LPARAM_BLOCK_DEVICE}${part}1 ${P1_MOUNT_DIR}
892 mount ${LPARAM_BLOCK_DEVICE}${part}2 ${P2_MOUNT_DIR} 893 mount ${LPARAM_BLOCK_DEVICE}${part}2 ${P2_MOUNT_DIR}
893 sleep 2; sync; 894 sleep 2; sync;
894 895
895 flash_sdcard 896 flash_sdcard
896 copy_debian_images 897 copy_debian_images
897 copy_scripts 898 copy_scripts
898 899
899 pr_info "Sync sdcard..." 900 pr_info "Sync sdcard..."
900 sync 901 sync
901 umount ${P1_MOUNT_DIR} 902 umount ${P1_MOUNT_DIR}
902 umount ${P2_MOUNT_DIR} 903 umount ${P2_MOUNT_DIR}
903 904
904 rm -rf ${P1_MOUNT_DIR} 905 rm -rf ${P1_MOUNT_DIR}
905 rm -rf ${P2_MOUNT_DIR} 906 rm -rf ${P2_MOUNT_DIR}
906 907
907 pr_info "Done make sdcard!" 908 pr_info "Done make sdcard!"
908 909
909 return 0; 910 return 0;
910 } 911 }
911 912
912 #################### commands ################ 913 #################### commands ################
913 914
914 function cmd_make_deploy() { 915 function cmd_make_deploy() {
915 make_prepare; 916 make_prepare;
916 917
917 # get linaro toolchain 918 # get linaro toolchain
918 (( `ls ${G_CROSS_COMPILER_PATH} 2>/dev/null | wc -l` == 0 )) && { 919 (( `ls ${G_CROSS_COMPILER_PATH} 2>/dev/null | wc -l` == 0 )) && {
919 pr_info "Get and unpack cross compiler"; 920 pr_info "Get and unpack cross compiler";
920 get_remote_file ${G_EXT_CROSS_COMPILER_LINK} ${DEF_SRC_DIR}/${G_CROSS_COMPILER_ARCHIVE} 921 get_remote_file ${G_EXT_CROSS_COMPILER_LINK} ${DEF_SRC_DIR}/${G_CROSS_COMPILER_ARCHIVE}
921 tar -xJf ${DEF_SRC_DIR}/${G_CROSS_COMPILER_ARCHIVE} -C ${G_TOOLS_PATH}/ 922 tar -xJf ${DEF_SRC_DIR}/${G_CROSS_COMPILER_ARCHIVE} -C ${G_TOOLS_PATH}/
922 }; 923 };
923 924
924 # get uboot repository 925 # get uboot repository
925 (( `ls ${G_UBOOT_SRC_DIR} 2>/dev/null | wc -l` == 0 )) && { 926 (( `ls ${G_UBOOT_SRC_DIR} 2>/dev/null | wc -l` == 0 )) && {
926 pr_info "Get uboot repository"; 927 pr_info "Get uboot repository";
927 get_git_src ${G_UBOOT_GIT} ${G_UBOOT_BRANCH} ${G_UBOOT_SRC_DIR} ${G_UBOOT_REV} 928 get_git_src ${G_UBOOT_GIT} ${G_UBOOT_BRANCH} ${G_UBOOT_SRC_DIR} ${G_UBOOT_REV}
928 }; 929 };
929 930
930 # get kernel repository 931 # get kernel repository
931 (( `ls ${G_LINUX_KERNEL_SRC_DIR} 2>/dev/null | wc -l` == 0 )) && { 932 (( `ls ${G_LINUX_KERNEL_SRC_DIR} 2>/dev/null | wc -l` == 0 )) && {
932 pr_info "Get kernel repository"; 933 pr_info "Get kernel repository";
933 get_git_src ${G_LINUX_KERNEL_GIT} ${G_LINUX_KERNEL_BRANCH} ${G_LINUX_KERNEL_SRC_DIR} ${G_LINUX_KERNEL_REV} 934 get_git_src ${G_LINUX_KERNEL_GIT} ${G_LINUX_KERNEL_BRANCH} ${G_LINUX_KERNEL_SRC_DIR} ${G_LINUX_KERNEL_REV}
934 cd ${G_LINUX_KERNEL_SRC_DIR} 935 cd ${G_LINUX_KERNEL_SRC_DIR}
935 git am < ${G_EMBEDIAN_PATH}/patches/kernel/0001-vivante-gpu-revert-to-6.2.4.p1-driver.patch 936 git am < ${G_EMBEDIAN_PATH}/patches/kernel/0001-vivante-gpu-revert-to-6.2.4.p1-driver.patch
936 git am < ${G_EMBEDIAN_PATH}/patches/kernel/0001-smarc-imx8m-compile-imx-sdma-driver-as-module.patch 937 git am < ${G_EMBEDIAN_PATH}/patches/kernel/0001-smarc-imx8m-compile-imx-sdma-driver-as-module.patch
937 cd - 938 cd -
938 }; 939 };
939 940
940 return 0; 941 return 0;
941 } 942 }
942 943
943 function cmd_make_rootfs() { 944 function cmd_make_rootfs() {
944 make_prepare; 945 make_prepare;
945 946
946 ## make debian rootfs 947 ## make debian rootfs
947 cd ${G_ROOTFS_DIR} 948 cd ${G_ROOTFS_DIR}
948 make_debian_rootfs ${G_ROOTFS_DIR} || { 949 make_debian_rootfs ${G_ROOTFS_DIR} || {
949 pr_error "Failed #$? in function make_debian_rootfs" 950 pr_error "Failed #$? in function make_debian_rootfs"
950 cd -; 951 cd -;
951 return 1; 952 return 1;
952 } 953 }
953 cd - 954 cd -
954 955
955 ## pack rootfs 956 ## pack rootfs
956 make_tarbar ${G_ROOTFS_DIR} ${G_ROOTFS_TARBAR_PATH} || { 957 make_tarbar ${G_ROOTFS_DIR} ${G_ROOTFS_TARBAR_PATH} || {
957 pr_error "Failed #$? in function make_tarbar" 958 pr_error "Failed #$? in function make_tarbar"
958 return 4; 959 return 4;
959 } 960 }
960 961
961 return 0; 962 return 0;
962 } 963 }
963 964
964 function cmd_make_uboot() { 965 function cmd_make_uboot() {
965 make_uboot ${G_UBOOT_SRC_DIR} ${PARAM_OUTPUT_DIR} || { 966 make_uboot ${G_UBOOT_SRC_DIR} ${PARAM_OUTPUT_DIR} || {
966 pr_error "Failed #$? in function make_uboot" 967 pr_error "Failed #$? in function make_uboot"
967 return 1; 968 return 1;
968 }; 969 };
969 970
970 return 0; 971 return 0;
971 } 972 }
972 973
973 function cmd_make_kernel() { 974 function cmd_make_kernel() {
974 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} || { 975 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} || {
975 pr_error "Failed #$? in function make_kernel" 976 pr_error "Failed #$? in function make_kernel"
976 return 1; 977 return 1;
977 }; 978 };
978 979
979 return 0; 980 return 0;
980 } 981 }
981 982
982 function cmd_make_kmodules() { 983 function cmd_make_kmodules() {
983 make_prepare; 984 make_prepare;
984 985
985 rm -rf ${G_ROOTFS_DIR}/lib/modules/* || { 986 rm -rf ${G_ROOTFS_DIR}/lib/modules/* || {
986 pr_error "Failed #$? prepare modules dir" 987 pr_error "Failed #$? prepare modules dir"
987 return 1; 988 return 1;
988 }; 989 };
989 990
990 make_kernel_modules ${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} ${G_LINUX_KERNEL_DEF_CONFIG} ${G_LINUX_KERNEL_SRC_DIR} ${G_ROOTFS_DIR} || { 991 make_kernel_modules ${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} ${G_LINUX_KERNEL_DEF_CONFIG} ${G_LINUX_KERNEL_SRC_DIR} ${G_ROOTFS_DIR} || {
991 pr_error "Failed #$? in function make_kernel_modules" 992 pr_error "Failed #$? in function make_kernel_modules"
992 return 2; 993 return 2;
993 }; 994 };
994 995
995 install_kernel_modules ${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} ${G_LINUX_KERNEL_DEF_CONFIG} ${G_LINUX_KERNEL_SRC_DIR} ${G_ROOTFS_DIR} || { 996 install_kernel_modules ${G_CROSS_COMPILER_PATH}/${G_CROSS_COMPILER_PREFIX} ${G_LINUX_KERNEL_DEF_CONFIG} ${G_LINUX_KERNEL_SRC_DIR} ${G_ROOTFS_DIR} || {
996 pr_error "Failed #$? in function install_kernel_modules" 997 pr_error "Failed #$? in function install_kernel_modules"
997 return 2; 998 return 2;
998 }; 999 };
999 1000
1000 return 0; 1001 return 0;
1001 } 1002 }
1002 1003
1003 function cmd_make_rfs_tar() { 1004 function cmd_make_rfs_tar() {
1004 ## pack rootfs 1005 ## pack rootfs
1005 make_tarbar ${G_ROOTFS_DIR} ${G_ROOTFS_TARBAR_PATH} || { 1006 make_tarbar ${G_ROOTFS_DIR} ${G_ROOTFS_TARBAR_PATH} || {
1006 pr_error "Failed #$? in function make_tarbar" 1007 pr_error "Failed #$? in function make_tarbar"
1007 return 1; 1008 return 1;
1008 } 1009 }
1009 1010
1010 return 0; 1011 return 0;
1011 } 1012 }
1012 1013
1013 function cmd_make_sdcard() { 1014 function cmd_make_sdcard() {
1014 make_sdcard ${PARAM_BLOCK_DEVICE} ${PARAM_OUTPUT_DIR} || { 1015 make_sdcard ${PARAM_BLOCK_DEVICE} ${PARAM_OUTPUT_DIR} || {
1015 pr_error "Failed #$? in function make_sdcard" 1016 pr_error "Failed #$? in function make_sdcard"
1016 return 1; 1017 return 1;
1017 }; 1018 };
1018 1019
1019 return 0; 1020 return 0;
1020 } 1021 }
1021 1022
1022 function cmd_make_clean() { 1023 function cmd_make_clean() {
1023 1024
1024 ## clean kernel, dtb, modules 1025 ## clean kernel, dtb, modules
1025 clean_kernel ${G_LINUX_KERNEL_SRC_DIR} || { 1026 clean_kernel ${G_LINUX_KERNEL_SRC_DIR} || {
1026 pr_error "Failed #$? in function clean_kernel" 1027 pr_error "Failed #$? in function clean_kernel"
1027 return 1; 1028 return 1;
1028 }; 1029 };
1029 1030
1030 ## clean u-boot 1031 ## clean u-boot
1031 clean_uboot ${G_UBOOT_SRC_DIR} || { 1032 clean_uboot ${G_UBOOT_SRC_DIR} || {
1032 pr_error "Failed #$? in function clean_uboot" 1033 pr_error "Failed #$? in function clean_uboot"
1033 return 2; 1034 return 2;
1034 }; 1035 };
1035 1036
1036 ## delete tmp dirs and etc 1037 ## delete tmp dirs and etc
1037 pr_info "Delete tmp dir ${G_TMP_DIR}" 1038 pr_info "Delete tmp dir ${G_TMP_DIR}"
1038 rm -rf ${G_TMP_DIR} && :; 1039 rm -rf ${G_TMP_DIR} && :;
1039 1040
1040 pr_info "Delete rootfs dir ${G_ROOTFS_DIR}" 1041 pr_info "Delete rootfs dir ${G_ROOTFS_DIR}"
1041 rm -rf ${G_ROOTFS_DIR} && :; 1042 rm -rf ${G_ROOTFS_DIR} && :;
1042 1043
1043 return 0; 1044 return 0;
1044 } 1045 }
1045 1046
1046 #################### main function ####################### 1047 #################### main function #######################
1047 1048
1048 ## test for root access support (msrc not allowed) 1049 ## test for root access support (msrc not allowed)
1049 [ "$PARAM_CMD" != "deploy" ] && [ "$PARAM_CMD" != "bootloader" ] && [ "$PARAM_CMD" != "kernel" ] && [ "$PARAM_CMD" != "modules" ] && [ ${EUID} -ne 0 ] && { 1050 [ "$PARAM_CMD" != "deploy" ] && [ "$PARAM_CMD" != "bootloader" ] && [ "$PARAM_CMD" != "kernel" ] && [ "$PARAM_CMD" != "modules" ] && [ ${EUID} -ne 0 ] && {
1050 pr_error "this command must be run as root (or sudo/su)" 1051 pr_error "this command must be run as root (or sudo/su)"
1051 exit 1; 1052 exit 1;
1052 }; 1053 };
1053 1054
1054 V_RET_CODE=0; 1055 V_RET_CODE=0;
1055 1056
1056 pr_info "Command: \"$PARAM_CMD\" start..." 1057 pr_info "Command: \"$PARAM_CMD\" start..."
1057 1058
1058 case $PARAM_CMD in 1059 case $PARAM_CMD in
1059 deploy ) 1060 deploy )
1060 cmd_make_deploy || { 1061 cmd_make_deploy || {
1061 V_RET_CODE=1; 1062 V_RET_CODE=1;
1062 }; 1063 };
1063 ;; 1064 ;;
1064 rootfs ) 1065 rootfs )
1065 cmd_make_rootfs || { 1066 cmd_make_rootfs || {
1066 V_RET_CODE=1; 1067 V_RET_CODE=1;
1067 }; 1068 };
1068 ;; 1069 ;;
1069 bootloader ) 1070 bootloader )
1070 cmd_make_uboot || { 1071 cmd_make_uboot || {
1071 V_RET_CODE=1; 1072 V_RET_CODE=1;
1072 } 1073 }
1073 ;; 1074 ;;
1074 kernel ) 1075 kernel )
1075 cmd_make_kernel || { 1076 cmd_make_kernel || {
1076 V_RET_CODE=1; 1077 V_RET_CODE=1;
1077 }; 1078 };
1078 ;; 1079 ;;
1079 modules ) 1080 modules )
1080 cmd_make_kmodules || { 1081 cmd_make_kmodules || {
1081 V_RET_CODE=1; 1082 V_RET_CODE=1;
1082 }; 1083 };
1083 ;; 1084 ;;
1084 sdcard ) 1085 sdcard )
1085 cmd_make_sdcard || { 1086 cmd_make_sdcard || {
1086 V_RET_CODE=1; 1087 V_RET_CODE=1;
1087 }; 1088 };
1088 ;; 1089 ;;
1089 rtar ) 1090 rtar )
1090 cmd_make_rfs_tar || { 1091 cmd_make_rfs_tar || {
1091 V_RET_CODE=1; 1092 V_RET_CODE=1;
1092 }; 1093 };
1093 ;; 1094 ;;
1094 all ) 1095 all )
1095 (cmd_make_uboot && 1096 (cmd_make_uboot &&
1096 cmd_make_kernel && 1097 cmd_make_kernel &&
1097 cmd_make_kmodules && 1098 cmd_make_kmodules &&
1098 cmd_make_rootfs) || { 1099 cmd_make_rootfs) || {
1099 V_RET_CODE=1; 1100 V_RET_CODE=1;
1100 }; 1101 };
1101 ;; 1102 ;;
1102 clean ) 1103 clean )
1103 cmd_make_clean || { 1104 cmd_make_clean || {
1104 V_RET_CODE=1; 1105 V_RET_CODE=1;
1105 }; 1106 };
1106 ;; 1107 ;;
1107 * ) 1108 * )
1108 pr_error "Invalid input command: \"${PARAM_CMD}\""; 1109 pr_error "Invalid input command: \"${PARAM_CMD}\"";
1109 V_RET_CODE=1; 1110 V_RET_CODE=1;
1110 ;; 1111 ;;
1111 esac 1112 esac
1112 1113
1113 pr_info "" 1114 pr_info ""
1114 pr_info "Command: \"$PARAM_CMD\" end. Exit code: ${V_RET_CODE}" 1115 pr_info "Command: \"$PARAM_CMD\" end. Exit code: ${V_RET_CODE}"
1115 pr_info "" 1116 pr_info ""
1116 1117
1117 1118
1118 exit ${V_RET_CODE}; 1119 exit ${V_RET_CODE};
1119 1120