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