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