Commit c881f137ca3644eee9d5367050c37a6e6cf2f089

Authored by Eric Lee
1 parent 42b7ca7de6

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