Commit f54c5688a47c14f9dfe35b77da02a662e3516011
1 parent
632c1e3a66
Exists in
8mq_5.10.9_1.0.0_gatesgarth
Script typo fixed
Showing 1 changed file with 1 additions and 1 deletions Inline Diff
scripts/emb_mk_yocto_sdcard/emb-create-yocto-emmc.sh
1 | #!/bin/bash -e | 1 | #!/bin/bash -e |
2 | 2 | ||
3 | blue_underlined_bold_echo() | 3 | blue_underlined_bold_echo() |
4 | { | 4 | { |
5 | echo -e "\e[34m\e[4m\e[1m$@\e[0m" | 5 | echo -e "\e[34m\e[4m\e[1m$@\e[0m" |
6 | } | 6 | } |
7 | 7 | ||
8 | blue_bold_echo() | 8 | blue_bold_echo() |
9 | { | 9 | { |
10 | echo -e "\e[34m\e[1m$@\e[0m" | 10 | echo -e "\e[34m\e[1m$@\e[0m" |
11 | } | 11 | } |
12 | 12 | ||
13 | red_bold_echo() | 13 | red_bold_echo() |
14 | { | 14 | { |
15 | echo -e "\e[31m\e[1m$@\e[0m" | 15 | echo -e "\e[31m\e[1m$@\e[0m" |
16 | } | 16 | } |
17 | 17 | ||
18 | IMGS_PATH=/opt/images/Yocto | 18 | IMGS_PATH=/opt/images/Yocto |
19 | UBOOT_IMAGE=imx-boot-sd.bin | 19 | UBOOT_IMAGE=imx-boot-sd.bin |
20 | KERNEL_IMAGE=Image | 20 | KERNEL_IMAGE=Image |
21 | ROOTFS_IMAGE=rootfs.tar.bz2 | 21 | ROOTFS_IMAGE=rootfs.tar.bz2 |
22 | BOOTLOADER_RESERVED_SIZE=4 | 22 | BOOTLOADER_RESERVED_SIZE=4 |
23 | PART1_SIZE=48 | 23 | PART1_SIZE=48 |
24 | BOOTLOADER_OFFSET=33 | 24 | BOOTLOADER_OFFSET=33 |
25 | DISPLAY=-hdmi | 25 | DISPLAY=-hdmi |
26 | PART=p | 26 | PART=p |
27 | BOOTPART=1 | 27 | BOOTPART=1 |
28 | ROOTFSPART=2 | 28 | ROOTFSPART=2 |
29 | BOOTDIR=/boot | 29 | BOOTDIR=/boot |
30 | 30 | ||
31 | check_board() | 31 | check_board() |
32 | { | 32 | { |
33 | if grep -q "i.MX8MQ" /sys/devices/soc0/soc_id; then | 33 | if grep -q "i.MX8MQ" /sys/devices/soc0/soc_id; then |
34 | BOARD=smarc-imx8mq | 34 | BOARD=smarc-imx8mq |
35 | DTB_PREFIX=imx8mq-smarc | 35 | DTB_PREFIX=imx8mq-smarc |
36 | BLOCK=mmcblk0 | 36 | BLOCK=mmcblk0 |
37 | 37 | ||
38 | if [[ $DISPLAY != "-dcss-lvds" && $DISPLAY != "-hdmi" && \ | 38 | if [[ $DISPLAY != "-dcss-lvds" && $DISPLAY != "-hdmi" && \ |
39 | $DISPLAY != "-lcdif-lvds" && $DISPLAY != "-dp" && \ | 39 | $DISPLAY != "-lcdif-lvds" && $DISPLAY != "-dp" && \ |
40 | $DISPLAY != "-dual-display" && $DISPLAY != "" ]]; then | 40 | $DISPLAY != "-dual-display" && $DISPLAY != "" ]]; then |
41 | red_bold_echo "ERROR: invalid display, should be dcss-lvds, hdmi, lcdif-lvds, dual-display or empty" | 41 | red_bold_echo "ERROR: invalid display, should be dcss-lvds, hdmi, lcdif-lvds, dual-display or empty" |
42 | exit 1 | 42 | exit 1 |
43 | fi | 43 | fi |
44 | else | 44 | else |
45 | red_bold_echo "ERROR: Unsupported board" | 45 | red_bold_echo "ERROR: Unsupported board" |
46 | exit 1 | 46 | exit 1 |
47 | fi | 47 | fi |
48 | 48 | ||
49 | 49 | ||
50 | if [[ ! -b /dev/${BLOCK} ]] ; then | 50 | if [[ ! -b /dev/${BLOCK} ]] ; then |
51 | red_bold_echo "ERROR: Can't find eMMC device (/dev/${BLOCK})." | 51 | red_bold_echo "ERROR: Can't find eMMC device (/dev/${BLOCK})." |
52 | red_bold_echo "Please verify you are using the correct options for your SMARC Module." | 52 | red_bold_echo "Please verify you are using the correct options for your SMARC Module." |
53 | exit 1 | 53 | exit 1 |
54 | fi | 54 | fi |
55 | } | 55 | } |
56 | 56 | ||
57 | check_images() | 57 | check_images() |
58 | { | 58 | { |
59 | if [[ ! -f $IMGS_PATH/$UBOOT_IMAGE ]] ; then | 59 | if [[ ! -f $IMGS_PATH/$UBOOT_IMAGE ]] ; then |
60 | red_bold_echo "ERROR: \"$IMGS_PATH/$UBOOT_IMAGE\" does not exist" | 60 | red_bold_echo "ERROR: \"$IMGS_PATH/$UBOOT_IMAGE\" does not exist" |
61 | exit 1 | 61 | exit 1 |
62 | fi | 62 | fi |
63 | 63 | ||
64 | if [[ ! -f $IMGS_PATH/$KERNEL_IMAGE ]] ; then | 64 | if [[ ! -f $IMGS_PATH/$KERNEL_IMAGE ]] ; then |
65 | red_bold_echo "ERROR: \"$IMGS_PATH/$KERNEL_IMAGE\" does not exist" | 65 | red_bold_echo "ERROR: \"$IMGS_PATH/$KERNEL_IMAGE\" does not exist" |
66 | exit 1 | 66 | exit 1 |
67 | fi | 67 | fi |
68 | 68 | ||
69 | if [[ ! -f $IMGS_PATH/${DTB_PREFIX}${DISPLAY}.dtb ]] ; then | 69 | if [[ ! -f $IMGS_PATH/${DTB_PREFIX}${DISPLAY}.dtb ]] ; then |
70 | red_bold_echo "ERROR: \"$IMGS_PATH/${DTB_PREFIX}${DISPLAY}.dtb\" does not exist" | 70 | red_bold_echo "ERROR: \"$IMGS_PATH/${DTB_PREFIX}${DISPLAY}.dtb\" does not exist" |
71 | exit 1 | 71 | exit 1 |
72 | fi | 72 | fi |
73 | 73 | ||
74 | if [[ ! -f $IMGS_PATH/uEnv.txt ]] ; then | 74 | if [[ ! -f $IMGS_PATH/uEnv.txt ]] ; then |
75 | red_bold_echo "ERROR: \"$IMGS_PATH/uEnv.txt\" does not exist" | 75 | red_bold_echo "ERROR: \"$IMGS_PATH/uEnv.txt\" does not exist" |
76 | exit 1 | 76 | exit 1 |
77 | fi | 77 | fi |
78 | 78 | ||
79 | if [[ ! -f $IMGS_PATH/$ROOTFS_IMAGE ]] ; then | 79 | if [[ ! -f $IMGS_PATH/$ROOTFS_IMAGE ]] ; then |
80 | red_bold_echo "ERROR: \"$IMGS_PATH/$ROOTFS_IMAGE\" does not exist" | 80 | red_bold_echo "ERROR: \"$IMGS_PATH/$ROOTFS_IMAGE\" does not exist" |
81 | exit 1 | 81 | exit 1 |
82 | fi | 82 | fi |
83 | } | 83 | } |
84 | 84 | ||
85 | delete_emmc() | 85 | delete_emmc() |
86 | { | 86 | { |
87 | echo | 87 | echo |
88 | blue_underlined_bold_echo "Deleting current partitions" | 88 | blue_underlined_bold_echo "Deleting current partitions" |
89 | 89 | ||
90 | umount /dev/${BLOCK}${PART}* 2>/dev/null || true | 90 | umount /dev/${BLOCK}${PART}* 2>/dev/null || true |
91 | 91 | ||
92 | for ((i=1; i<=16; i++)); do | 92 | for ((i=1; i<=16; i++)); do |
93 | if [[ -e /dev/${BLOCK}${PART}${i} ]]; then | 93 | if [[ -e /dev/${BLOCK}${PART}${i} ]]; then |
94 | dd if=/dev/zero of=/dev/${BLOCK}${PART}${i} bs=1M count=1 2>/dev/null || true | 94 | dd if=/dev/zero of=/dev/${BLOCK}${PART}${i} bs=1M count=1 2>/dev/null || true |
95 | fi | 95 | fi |
96 | done | 96 | done |
97 | sync | 97 | sync |
98 | 98 | ||
99 | dd if=/dev/zero of=/dev/${BLOCK} bs=1M count=${BOOTLOADER_RESERVED_SIZE} | 99 | dd if=/dev/zero of=/dev/${BLOCK} bs=1M count=${BOOTLOADER_RESERVED_SIZE} |
100 | 100 | ||
101 | sync; sleep 1 | 101 | sync; sleep 1 |
102 | } | 102 | } |
103 | 103 | ||
104 | create_emmc_parts() | 104 | create_emmc_parts() |
105 | { | 105 | { |
106 | echo | 106 | echo |
107 | blue_underlined_bold_echo "Creating new partitions" | 107 | blue_underlined_bold_echo "Creating new partitions" |
108 | 108 | ||
109 | SECT_SIZE_BYTES=`cat /sys/block/${BLOCK}/queue/hw_sector_size` | 109 | SECT_SIZE_BYTES=`cat /sys/block/${BLOCK}/queue/hw_sector_size` |
110 | PART1_FIRST_SECT=$(($BOOTLOADER_RESERVED_SIZE * 1024 * 1024 / $SECT_SIZE_BYTES)) | 110 | PART1_FIRST_SECT=$(($BOOTLOADER_RESERVED_SIZE * 1024 * 1024 / $SECT_SIZE_BYTES)) |
111 | PART1_END_SECT=$((($BOOTLOADER_RESERVED_SIZE + $PART1_SIZE) * 1024 * 1024 / $SECT_SIZE_BYTES)) | 111 | PART1_END_SECT=$((($BOOTLOADER_RESERVED_SIZE + $PART1_SIZE) * 1024 * 1024 / $SECT_SIZE_BYTES)) |
112 | PART2_FIRST_SECT=`expr ${PART1_END_SECT} + 1` | 112 | PART2_FIRST_SECT=`expr ${PART1_END_SECT} + 1` |
113 | 113 | ||
114 | (echo n; echo p; echo $BOOTPART; echo $PART1_FIRST_SECT; \ | 114 | (echo n; echo p; echo $BOOTPART; echo $PART1_FIRST_SECT; \ |
115 | echo $PART1_END_SECT; echo n; echo p; echo $ROOTFSPART; \ | 115 | echo $PART1_END_SECT; echo n; echo p; echo $ROOTFSPART; \ |
116 | echo $PART2_FIRST_SECT; echo; \ | 116 | echo $PART2_FIRST_SECT; echo; \ |
117 | echo p; echo w) | fdisk -u /dev/${BLOCK} > /dev/null | 117 | echo p; echo w) | fdisk -u /dev/${BLOCK} > /dev/null |
118 | 118 | ||
119 | sync; sleep 1 | 119 | sync; sleep 1 |
120 | fdisk -u -l /dev/${BLOCK} | 120 | fdisk -u -l /dev/${BLOCK} |
121 | } | 121 | } |
122 | 122 | ||
123 | format_emmc_parts() | 123 | format_emmc_parts() |
124 | { | 124 | { |
125 | echo | 125 | echo |
126 | blue_underlined_bold_echo "Formatting partitions" | 126 | blue_underlined_bold_echo "Formatting partitions" |
127 | 127 | ||
128 | mkfs.vfat -F 16 /dev/${BLOCK}${PART}${BOOTPART} -n boot | 128 | mkfs.vfat -F 16 /dev/${BLOCK}${PART}${BOOTPART} -n boot |
129 | mkfs.ext4 /dev/${BLOCK}${PART}${ROOTFSPART} -L rootfs | 129 | mkfs.ext4 /dev/${BLOCK}${PART}${ROOTFSPART} -L rootfs |
130 | 130 | ||
131 | sync; sleep 1 | 131 | sync; sleep 1 |
132 | } | 132 | } |
133 | 133 | ||
134 | install_bootloader_to_emmc() | 134 | install_bootloader_to_emmc() |
135 | { | 135 | { |
136 | echo | 136 | echo |
137 | blue_underlined_bold_echo "Installing booloader" | 137 | blue_underlined_bold_echo "Installing booloader" |
138 | 138 | ||
139 | dd if=${IMGS_PATH}/${UBOOT_IMAGE} of=/dev/${BLOCK} bs=1K seek=${BOOTLOADER_OFFSET} | 139 | dd if=${IMGS_PATH}/${UBOOT_IMAGE} of=/dev/${BLOCK} bs=1K seek=${BOOTLOADER_OFFSET} |
140 | sync | 140 | sync |
141 | } | 141 | } |
142 | 142 | ||
143 | install_kernel_to_emmc() | 143 | install_kernel_to_emmc() |
144 | { | 144 | { |
145 | echo | 145 | echo |
146 | blue_underlined_bold_echo "Installing kernel" | 146 | blue_underlined_bold_echo "Installing kernel" |
147 | 147 | ||
148 | MOUNTDIR=/run/media/${BLOCK}${PART}${BOOTPART} | 148 | MOUNTDIR=/run/media/${BLOCK}${PART}${BOOTPART} |
149 | mkdir -p ${MOUNTDIR} | 149 | mkdir -p ${MOUNTDIR} |
150 | mount /dev/${BLOCK}${PART}${BOOTPART} ${MOUNTDIR} | 150 | mount /dev/${BLOCK}${PART}${BOOTPART} ${MOUNTDIR} |
151 | mkdir -p ${MOUNTDIR}/dtbs/ | 151 | mkdir -p ${MOUNTDIR}/dtbs/ |
152 | cp -v ${IMGS_PATH}/${KERNEL_IMAGE} ${MOUNTDIR} | 152 | cp -v ${IMGS_PATH}/${KERNEL_IMAGE} ${MOUNTDIR} |
153 | cp -v ${IMGS_PATH}/${DTB_PREFIX}${DISPLAY}.dtb ${MOUNTDIR}/dtbs/imx8mq-smarc.dtb | 153 | cp -v ${IMGS_PATH}/${DTB_PREFIX}${DISPLAY}.dtb ${MOUNTDIR}/dtbs/imx8mq-smarc.dtb |
154 | cp -v ${IMGS_PATH}/uEnv.txt ${MOUNTDIR} | 154 | cp -v ${IMGS_PATH}/uEnv.txt ${MOUNTDIR} |
155 | 155 | ||
156 | echo | 156 | echo |
157 | sync | 157 | sync |
158 | 158 | ||
159 | umount ${MOUNTDIR} | 159 | umount ${MOUNTDIR} |
160 | } | 160 | } |
161 | 161 | ||
162 | install_rootfs_to_emmc() | 162 | install_rootfs_to_emmc() |
163 | { | 163 | { |
164 | echo | 164 | echo |
165 | blue_underlined_bold_echo "Installing rootfs" | 165 | blue_underlined_bold_echo "Installing rootfs" |
166 | 166 | ||
167 | MOUNTDIR=/run/media/${BLOCK}${PART}${ROOTFSPART} | 167 | MOUNTDIR=/run/media/${BLOCK}${PART}${ROOTFSPART} |
168 | mkdir -p ${MOUNTDIR} | 168 | mkdir -p ${MOUNTDIR} |
169 | mount /dev/${BLOCK}${PART}${ROOTFSPART} ${MOUNTDIR} | 169 | mount /dev/${BLOCK}${PART}${ROOTFSPART} ${MOUNTDIR} |
170 | 170 | ||
171 | printf "Extracting files" | 171 | printf "Extracting files" |
172 | tar --warning=no-timestamp -jxvf ${IMGS_PATH}/${ROOTFS_IMAGE} -C ${MOUNTDIR} --checkpoint=.1200 | 172 | tar --warning=no-timestamp -jxvf ${IMGS_PATH}/${ROOTFS_IMAGE} -C ${MOUNTDIR} --checkpoint=.1200 |
173 | 173 | ||
174 | # Create DTB symlink | 174 | # Create DTB symlink |
175 | (cd ${MOUNTDIR}/${BOOTDIR}; ln -fs ${DTB_PREFIX}${DISPLAY}.dtb ${DTB_PREFIX}.dtb) | 175 | (cd ${MOUNTDIR}/${BOOTDIR}; ln -fs ${DTB_PREFIX}${DISPLAY}.dtb ${DTB_PREFIX}.dtb) |
176 | 176 | ||
177 | echo | 177 | echo |
178 | sync | 178 | sync |
179 | 179 | ||
180 | umount ${MOUNTDIR} | 180 | umount ${MOUNTDIR} |
181 | } | 181 | } |
182 | 182 | ||
183 | stop_udev() | 183 | stop_udev() |
184 | { | 184 | { |
185 | if [ -f /lib/systemd/system/systemd-udevd.service ]; then | 185 | if [ -f /lib/systemd/system/systemd-udevd.service ]; then |
186 | systemctl -q mask --runtime systemd-udevd | 186 | systemctl -q mask --runtime systemd-udevd |
187 | systemctl -q stop systemd-udevd | 187 | systemctl -q stop systemd-udevd |
188 | fi | 188 | fi |
189 | } | 189 | } |
190 | 190 | ||
191 | start_udev() | 191 | start_udev() |
192 | { | 192 | { |
193 | if [ -f /lib/systemd/system/systemd-udevd.service ]; then | 193 | if [ -f /lib/systemd/system/systemd-udevd.service ]; then |
194 | systemctl -q unmask --runtime systemd-udevd | 194 | systemctl -q unmask --runtime systemd-udevd |
195 | systemctl -q start systemd-udevd | 195 | systemctl -q start systemd-udevd |
196 | fi | 196 | fi |
197 | } | 197 | } |
198 | 198 | ||
199 | usage() | 199 | usage() |
200 | { | 200 | { |
201 | echo | 201 | echo |
202 | echo "This script installs Yocto Rootfs on the SMARC-iMX8MQ's internal eMMC storage device" | 202 | echo "This script installs Yocto Rootfs on the SMARC-iMX8MQ's internal eMMC storage device" |
203 | echo | 203 | echo |
204 | echo " Usage: $(basename $0) <option>" | 204 | echo " Usage: $(basename $0) <option>" |
205 | echo | 205 | echo |
206 | echo " options:" | 206 | echo " options:" |
207 | echo " -h show help message" | 207 | echo " -h show help message" |
208 | echo " -d <lvds|hdmi|dual-display> set display type, default is lvds" | 208 | echo " -d <lvds|hdmi|dual-display> set display type, default is lvds" |
209 | echo | 209 | echo |
210 | } | 210 | } |
211 | 211 | ||
212 | finish() | 212 | finish() |
213 | { | 213 | { |
214 | echo | 214 | echo |
215 | blue_bold_echo "Yocto Sumo installed successfully" | 215 | blue_bold_echo "Yocto Gatesgarth installed successfully" |
216 | exit 0 | 216 | exit 0 |
217 | } | 217 | } |
218 | 218 | ||
219 | ################################################# | 219 | ################################################# |
220 | # Execution starts here # | 220 | # Execution starts here # |
221 | ################################################# | 221 | ################################################# |
222 | 222 | ||
223 | if [[ $EUID != 0 ]] ; then | 223 | if [[ $EUID != 0 ]] ; then |
224 | red_bold_echo "This script must be run with super-user privileges" | 224 | red_bold_echo "This script must be run with super-user privileges" |
225 | exit 1 | 225 | exit 1 |
226 | fi | 226 | fi |
227 | 227 | ||
228 | blue_underlined_bold_echo "*** Embedian SMARC-iMX8MQ on-module eMMC Recovery ***" | 228 | blue_underlined_bold_echo "*** Embedian SMARC-iMX8MQ on-module eMMC Recovery ***" |
229 | echo | 229 | echo |
230 | 230 | ||
231 | while getopts d:h OPTION; | 231 | while getopts d:h OPTION; |
232 | do | 232 | do |
233 | case $OPTION in | 233 | case $OPTION in |
234 | d) | 234 | d) |
235 | DISPLAY=$OPTARG | 235 | DISPLAY=$OPTARG |
236 | ;; | 236 | ;; |
237 | h) | 237 | h) |
238 | usage | 238 | usage |
239 | exit 0 | 239 | exit 0 |
240 | ;; | 240 | ;; |
241 | *) | 241 | *) |
242 | usage | 242 | usage |
243 | exit 1 | 243 | exit 1 |
244 | ;; | 244 | ;; |
245 | esac | 245 | esac |
246 | done | 246 | done |
247 | 247 | ||
248 | printf "Board: " | 248 | printf "Board: " |
249 | blue_bold_echo $BOARD | 249 | blue_bold_echo $BOARD |
250 | 250 | ||
251 | printf "Installing to internal storage device: " | 251 | printf "Installing to internal storage device: " |
252 | blue_bold_echo eMMC | 252 | blue_bold_echo eMMC |
253 | 253 | ||
254 | check_board | 254 | check_board |
255 | check_images | 255 | check_images |
256 | stop_udev | 256 | stop_udev |
257 | delete_emmc | 257 | delete_emmc |
258 | create_emmc_parts | 258 | create_emmc_parts |
259 | format_emmc_parts | 259 | format_emmc_parts |
260 | install_bootloader_to_emmc | 260 | install_bootloader_to_emmc |
261 | install_kernel_to_emmc | 261 | install_kernel_to_emmc |
262 | install_rootfs_to_emmc | 262 | install_rootfs_to_emmc |
263 | start_udev | 263 | start_udev |
264 | finish | 264 | finish |
265 | 265 |