Difference between revisions of "DESK-MX8M-L/Development/How to create a bootable microSD card"

From DAVE Developer's Wiki
Jump to: navigation, search
 
(2 intermediate revisions by 2 users not shown)
Line 4: Line 4:
 
|-  
 
|-  
 
|-  
 
|-  
!style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#73B2C7; padding:5px; color:white"|ID#
 
 
!style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#73B2C7; padding:5px; color:white"|Issue Date
 
!style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#73B2C7; padding:5px; color:white"|Issue Date
 
!style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#73B2C7; padding:5px; color:white"|Notes
 
!style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#73B2C7; padding:5px; color:white"|Notes
 
|-
 
|-
|style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000"|{{oldid|16139|16139}}
+
|style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000"|{{oldid|16139|2022/02/17}}
|style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000"|17/02/2022
 
 
|style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000"|First DESK-MX8M-L release
 
|style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000"|First DESK-MX8M-L release
 
|-
 
|-
| style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#ededed; padding:5px; color:#000000" |{{oldid|17546|17546}}
+
| style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#ededed; padding:5px; color:#000000" |{{oldid|17546|2023/02/24}}
| style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#ededed; padding:5px; color:#000000" |24/02/2023
 
 
| style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#ededed; padding:5px; color:#000000" |DESK-MX8M-L-2.0.0 release
 
| style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#ededed; padding:5px; color:#000000" |DESK-MX8M-L-2.0.0 release
 
|-
 
|-
! style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#ededed; padding:5px; color:#000000" |{{oldid|17546|17546}}
+
! style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#ededed; padding:5px; color:#000000" |2023/08/23
! style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#ededed; padding:5px; color:#000000" |25/07/2023
 
 
! style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#ededed; padding:5px; color:#000000" |DESK-MX8M-L-4.0.0 release
 
! style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#ededed; padding:5px; color:#000000" |DESK-MX8M-L-4.0.0 release
 
|-
 
|-
Line 27: Line 23:
 
==How to create a bootable SD card==
 
==How to create a bootable SD card==
  
{{ImportantMessage|text=The procedure described here was tested with a virtual machine such as the [[Managed_Virtual_Machine_(MVM)|MVM]]. The USB controller of the MVM should be enabled by default. If you are using Linux-based distribution and are having trouble detecting a USB device in virtual machine, please make sure your user belongs to the vboxusers group.}}
+
This article shows how to (re)create the bootable SD card, from the binary images produced by the DESK-MX-L Yocto build, using a standard SD image flasher like [https://etcher.balena.io/ balenaEtcher]
  
This article shows how to create a bootable microSD for the [[DESK-MX8M-L/General/Release_Notes_(DESK-MX8M-L)|DESK-MX8M-L Release Notes] kit by using a simple bash script. <br>
+
The process is relatively straightforward: it consists of writing the WIC file of interest generated by Yocto onto the SD card.
'''Note:''' Starting from '''DESK-MX8M-L-2.0.0''' release the support for the SPL has been introduced in U-Boot. Previous versions of this script will no longer produce a fully functional and bootable microSD card. <br>
+
The following instruction explains how to use ''balenaEtcher'' on a Windows host. The procedure is similar when working with a Linux host.
+
* download the desired binary image to flash (<code>*.wic</code> or <code>*.wic.bz2</code>) from the [https://mirror.dave.eu/desk-mx-l/ mirror binary server] selecting the proper [[DESK-MX8M-L | DESK-MX8M-L]] release
The procedure has been tested on a MVM released with '''DESK-MX8M-L 4.0.0''' release with  
+
**among the binaries made available in the [[mirror:desk-mp1-l/| mirror]] there are several <code>*.wic.bz2</code> files for the available releases. In particular, there is the <code>dave-image-devel-desk-mx8mp.wic.bz2</code> (for ORCA) or <code>dave-image-devel-desk-mx8mm.wic.bz2</code> (for MITO8M Mini) files. This image is the one used to program the microSD card delivered along with the evaluation kit.
*a 32 GB microSD card [1]
+
* connect the microSD card to the PC Host
*a USB SD card reader
+
* open balenaEtcher tool
*the binary files delivered along with the [[DESK-MX8M-L/General/Release_Notes#Downloadable_binary_images_3|DESK-MX8M-L 4.0.0]]
+
* once the tool is open:
The resulting card is partitioned as depicted [[ORCA_SOM/ORCA_Evaluation_Kit/Getting_started/Unboxing#microSD_Layout|here]].
+
** select the binary to flash by clicking on "Flash from file"
 +
** select the microSD to flash by clicking on "Select target"
 +
** flash the uSD by clicking o "Flash".
  
The script - named <code>desk-mx8m-l-4.0.0_mksd.sh</code> - can be realized with the following code:
+
{| class="wikitable" style="text-align: center"
 
+
|[[File:DESK-MP1-L-1.0.0 balenaEtcher unpack.png|center|thumb|200x200px|Unpacking]]
<pre class="workstation-terminal">
+
|[[File:DESK-MP1-L-1.0.0 balenaEtcher flash.png|center|thumb|200x200px|Flashing]]
#!/bin/bash
+
|[[File:DESK-MP1-L-1.0.0 balenaEtcher valid.png|center|thumb|200x200px|Validating]]
 
+
|}
if [[ -z $1 || -z $2 || -z $3 || -z $4 ]]
 
then
 
echo "$0 Usage:"
 
echo " $0 <device> <flash.bin> <binaries directory> <rootfs tar.bz2>"
 
echo " Example: $0 /dev/sdc flash.bin binaries/ rootfs.tar.bz2"
 
exit
 
fi
 
 
 
if [ "$(whoami)" != "root" ]
 
then
 
echo "you must be root to run this script!"
 
exit
 
fi
 
 
 
if ! [[ -b $1 ]]
 
then
 
echo "$1 is not a valid block device!"
 
exit
 
fi
 
 
 
if ! [[ -e $2 ]]
 
then
 
echo "Incorrect flash.bin location!"
 
exit
 
fi
 
 
 
if ! [[ -d $3 ]]
 
then
 
echo "Incorrect Binaries location!"
 
exit
 
fi
 
 
 
if ! [[ -f $4 ]]
 
then
 
echo "Incorrect rootfs location!"
 
exit
 
fi
 
 
 
DRIVE=$1
 
if [[ "$DRIVE" == *"mmcblk"* ]]
 
then
 
echo "You're using a mmc device, I need to fix partition names"
 
PART="p"
 
else
 
PART=""
 
fi
 
BOOT=$2
 
BINARIES=$3
 
RFS=$4
 
 
 
echo "All data on "$DRIVE" now will be destroyed! Continue? [y/n]"
 
read ans
 
if ! [ $ans == 'y' ]
 
then
 
exit
 
fi
 
 
 
echo "[Partitioning $1...]"
 
 
 
dd if=/dev/zero of=$DRIVE bs=1024 count=1024
 
 
 
SIZE=`fdisk -l $DRIVE | grep Disk | awk '{print $5}'`
 
 
 
echo DISK SIZE - $SIZE bytes
 
 
 
CYLINDERS=`echo $SIZE/255/63/512 | bc`
 
 
 
# check if we're running an old (e.g. 2.20.x) or new (e.g. 2.24.x) sfdisk
 
sfdisk --help | grep -- -H
 
 
 
if [ "$?" -eq "0" ]
 
then
 
{
 
echo 40,1380,0x0c,*
 
echo 1420,,83,-
 
} | sfdisk -D -H 255 -S 63 -C $CYLINDERS $DRIVE
 
else
 
{
 
    echo 16M,8176M,0x0c,*
 
    echo 8192M,,83,-
 
} | sfdisk $DRIVE
 
fi
 
 
 
partprobe
 
 
 
 
 
echo "[Making filesystems...]"
 
mkfs.vfat -F 32 -n BOOT "$DRIVE$PART"1 #> /dev/null
 
mkfs.ext3 -F -L ROOTFS "$DRIVE$PART"2 #> /dev/null
 
 
 
echo "[Copying files...]"
 
 
 
binaries_dir=${BINARIES%/}
 
mount "$DRIVE$PART"1 /mnt
 
cp -av --no-preserve=ownership $binaries_dir/* /mnt/
 
umount "$DRIVE$PART"1
 
 
 
echo "[Extracting rfs (this may take a while...)]"
 
mount "$DRIVE$PART"2 /mnt
 
tar jxf $RFS -C /mnt > /dev/null
 
chmod 755 /mnt
 
umount "$DRIVE$PART"2
 
 
 
echo "[Programming flash.bin]"
 
dd if=$BOOT of=$DRIVE bs=1k seek=32 conv=fsync
 
 
 
echo "[Done]"
 
</pre>
 
{{ImportantMessage|text=if you are making a uSD for MITO 8M Mini SOM, then the last line must be modified with '''dd if=$BOOT of=$DRIVE bs=1k seek=33'''.}}
 
 
 
Here is an example that shows how to use this script. We use here files delivered with [[DESK-MX8M-L/General/Release_Notes#Downloadable_binary_images_3|DESK-MX8M-L 4.0.0]] release. Before invoking the script, the following files has to be renamed in order to make them compatible with the default U-Boot environment variables:
 
* bootscript: <code>boot.scr</code>
 
* Linux kernel: <code>Image</code>
 
* Device tree blob: <code>imx8mp-mito8mplus-cb1008.dtb</code> or <code>imx8mm-mito8mmini-cb100a.dtb</code>
 
 
 
Let's start with creating <code>boot.scr</code>. On MVM there is <code>/home/dvdk/desk-mx-l/desk-mx8m-l-4.0.0_bootscript.txt</code> file that we can use to create needed file.
 
 
 
Here below there is an example on how to create a <code>boot.scr</code> file from the '''desk-mx8m-l-4.0.0_bootscript.txt''' for booting from SD card:
 
 
 
<pre class="workstation-terminal">
 
echo 'bootscript generated with command "mkimage -A ARM -T script -C none -n DESK-MX8M -d bootscript.txt boot.scr"'
 
 
 
setenv desk_release 'desk-mx8m-l-4.0.0'
 
 
 
if test 0x${cb_configid#} = 0x00001001;
 
then
 
setenv fdtfile imx8mp-mito8mplus-cb1001.dtb
 
elif test 0x${cb_configid#} = 0x00001004;
 
then
 
setenv fdtfile imx8mp-mito8mplus-cb1004.dtb
 
elif test 0x${cb_configid#} = 0x00001005;
 
then
 
setenv fdtfile imx8mp-mito8mplus-cb1005.dtb
 
# CM7 boot
 
setenv cm7_loadaddr 0x48000000
 
setenv cm7_tcm_start 0x7e0000
 
setenv cm7_boot 'fatload mmc ${sd_dev}:1 ${cm7_loadaddr} stress_m7.bin;cp.b ${cm7_loadaddr} ${cm7_tcm_start} 20000; bootaux ${cm7_tcm_start}'
 
elif test 0x${cb_configid#} = 0x00001008;
 
then
 
setenv fdtfile imx8mp-mito8mplus-cb1008.dtb
 
elif test 0x${cb_configid#} = 0x0000100a;
 
then
 
setenv fdtfile imx8mm-mito8mmini-cb100a.dtb
 
else
 
echo Invalid CB ConfigID! Autoreset ...
 
sleep 30
 
reset
 
fi
 
 
 
setenv bootfile Image
 
setenv mmc_loadk 'fatload mmc ${sd_dev}:1 ${loadaddr} ${bootfile}'
 
setenv mmc_loadfdt 'fatload mmc ${sd_dev}:1 ${fdt_addr} ${fdtfile}'
 
setenv mmcboot 'run mmc_loadk; run mmc_loadfdt; run bootk'
 
setenv bootargs 'console=ttymxc1,115200 earlycon=ec_imx6q,0x30890000,115200 root=/dev/mmcblk1p2'
 
setenv bootk 'booti ${loadaddr} - ${fdt_addr}'
 
 
 
echo Booting DESK-MX8M via mmcboot with ${fdtfile} as device tree
 
 
 
run mmcboot
 
 
 
echo mmcboot FAILURE
 
 
 
</pre>
 
 
 
and compile it using:
 
<pre class="workstation-terminal">
 
dvdk@vagrant:~$ mkimage -A ARM -T script -C none -n DESK-MX8M -d ~/desk-mx-l/desk-mx8m-l-4.0.0_bootscript.txt ~/desk-mx-l/boot.scr
 
Image Name:  DESK-MX8M
 
Created:      Tue Jul 25 12:24:35 2023
 
Image Type:  ARM Linux Script (uncompressed)
 
Data Size:    1371 Bytes = 1.34 KiB = 0.00 MiB
 
Load Address: 00000000
 
Entry Point:  00000000
 
Contents:
 
  Image 0: 1363 Bytes = 1.33 KiB = 0.00 MiB
 
dvdk@vagrant:~$
 
</pre>
 
 
 
In the case of you don't have some file on MVM, please download it from [https://mirror.dave.eu/desk-mx-l mirro.dave.eu].
 
 
 
We will copy them into <code>~/desk-mx-l/desk</code> directory. Needed binary files can be found on <code>MVM</code> in the following location:
 
 
 
<pre class="workstation-terminal">
 
dvdk@vagrant:~$ mkdir -p ~/desk-mx-l/desk
 
dvdk@vagrant:~$ cd ~/desk-mx-l/desk
 
dvdk@vagrant:~/desk-mx-l/desk$ ls /tftpboot/desk-mx8m-l/ -l
 
total 34872
 
-rw-r--r-- 1 dvdk root 31351296 Jul 24 08:50 desk-mx8m-l-4.0.0_Image
 
-rw-r--r-- 1 dvdk root  1406688 Jul 24 08:48 desk-mx8m-l-4.0.0_imx8mm_flash.bin
 
-rw-r--r-- 1 dvdk root    43034 Jul 24 08:50 desk-mx8m-l-4.0.0_imx8mm-mito8mmini-cb100a.dtb
 
-rw-r--r-- 1 dvdk root    43022 Jul 24 08:50 desk-mx8m-l-4.0.0_imx8mm-mito8mmini.dtb
 
-rw-r--r-- 1 dvdk root  1433040 Jul 24 08:48 desk-mx8m-l-4.0.0_imx8mp_flash.bin
 
-rw-r--r-- 1 dvdk root    60443 Jul 24 08:50 desk-mx8m-l-4.0.0_imx8mp-mito8mplus-cb1001.dtb
 
-rw-r--r-- 1 dvdk root    62520 Jul 24 08:50 desk-mx8m-l-4.0.0_imx8mp-mito8mplus-cb1004.dtb
 
-rw-r--r-- 1 dvdk root    61258 Jul 24 08:50 desk-mx8m-l-4.0.0_imx8mp-mito8mplus-cb1005.dtb
 
-rw-r--r-- 1 dvdk root    61299 Jul 24 08:50 desk-mx8m-l-4.0.0_imx8mp-mito8mplus-cb1008.dtb
 
lrwxrwxrwx 1 root root      49 Jul 24 09:42 Image -> /tftpboot/desk-mx8m-l/desk-mx8m-l-4.0.0_Image
 
lrwxrwxrwx 1 root root      60 Jul 24 09:42 imx8mm_flash.bin -> /tftpboot/desk-mx8m-l/desk-mx8m-l-4.0.0_imx8mm_flash.bin
 
lrwxrwxrwx 1 root root      72 Jul 24 09:42 imx8mm-mito8mmini-cb100a.dtb -> /tftpboot/desk-mx8m-l/desk-mx8m-l-4.0.0_imx8mm-mito8mmini-cb100a.dtb
 
lrwxrwxrwx 1 root root      60 Jul 24 09:42 imx8mp_flash.bin -> /tftpboot/desk-mx8m-l/desk-mx8m-l-4.0.0_imx8mp_flash.bin
 
lrwxrwxrwx 1 root root      72 Jul 24 09:42 imx8mp-mito8mplus-cb1008.dtb -> /tftpboot/desk-mx8m-l/desk-mx8m-l-4.0.0_imx8mp-mito8mplus-cb1008.dtb
 
-rw-r--r-- 1 dvdk root  1152054 Jul 24 08:48 splash_image.bmp
 
dvdk@vagrant:~/desk-mx-l/desk$ mkdir binaries
 
dvdk@vagrant:~/desk-mx-l/desk$ cp /tftpboot/desk-mx8m-l/Image binaries/
 
dvdk@vagrant:~/desk-mx-l/desk$ cp /tftpboot/desk-mx8m-l/imx8mp-mito8mplus-cb1008.dtb binaries/
 
dvdk@vagrant:~/desk-mx-l/desk$ cp ~/desk-mx-l/boot.scr binaries/
 
dvdk@vagrant:~/desk-mx-l/desk$ cp /tftpboot/desk-mx8m-l/imx8mp_flash.bin flash.bin
 
dvdk@vagrant:~/desk-mx-l/desk$
 
</pre>
 
You can now run the script, by passing the following parameters:
 
*Device file of the microSD card (<code>/dev/sdb</code> in the example)
 
*Boot image
 
*Path of the directory containing the bootscript file, the Linux kernel image, and the device tree blob files
 
*Archive of the target's root file system (compressed as <code>.tar.bz2</code> file).
 
<pre class="workstation-terminal">
 
dvdk@vagrant:~/desk-mx-l/desk$ cd ~/desk-mx-l/
 
dvdk@vagrant:~/desk-mx-l$ sudo umount /dev/sdb*
 
umount: /dev/sdb: not mounted.
 
umount: /dev/sdb1: not mounted.
 
dvdk@vagrant:~/desk-mx-l$ sudo ./desk-mx8m-l-4.0.0_mksd.sh /dev/sdb desk/flash.bin desk/binaries/ rfs/desk-mx8m-l-4.0.0_desk-image-qt6-desk-mx8mp.tar.bz2
 
All data on /dev/sdb now will be destroyed! Continue? [y/n]
 
y
 
[Partitioning /dev/sdb...]
 
1024+0 records in
 
1024+0 records out
 
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.285905 s, 3.7 MB/s
 
DISK SIZE - 31914983424 bytes
 
Checking that no-one is using this disk right now ... OK
 
 
 
Disk /dev/sdb: 29.74 GiB, 31914983424 bytes, 62333952 sectors
 
Disk model: Transcend     
 
Units: sectors of 1 * 512 = 512 bytes
 
Sector size (logical/physical): 512 bytes / 512 bytes
 
I/O size (minimum/optimal): 512 bytes / 512 bytes
 
 
 
>>> Created a new DOS disklabel with disk identifier 0x688f6e07.
 
/dev/sdb1: Created a new partition 1 of type 'W95 FAT32 (LBA)' and of size 8 GiB.
 
/dev/sdb2: Created a new partition 2 of type 'Linux' and of size 21.7 GiB.
 
/dev/sdb3: Done.
 
  
New situation:
+
=== SD card structure ===
Disklabel type: dos
+
The created SD card has the following structure:
Disk identifier: 0x688f6e07
+
* raw sectors for the bootloader storage: tipically this is a 8MB raw part where storing the bootloader binaries (like <code>imx8mp_flash.bin</code>) for the bootrom startup
 +
* <code>FAT32</code> first partition: this will be mapped to the <code>/dev/mmcblk1p1</code> device in Linux
 +
** usually this partition contains the Linux kernel binary and the device tree blob
 +
** the splash screen image is stored in this partition too for a splash image showing during U-Boot startup
 +
* <code>ext4</code> second partition: this will be mapped to the <code>/dev/mmcblk1p2</code> device in Linux
 +
** this partition contains the Linux ''root file system''
  
Device    Boot    Start      End  Sectors  Size Id Type
+
=== Creating the SD card from binary artifacts ===
/dev/sdb1  *      32768 16777215 16744448    8G  c W95 FAT32 (LBA)
 
/dev/sdb2      16777216 62333951 45556736 21.7G 83 Linux
 
  
The partition table has been altered.
+
Even if the overall binary artifacts have been created by the Yocto build, it is highly discouraged to manually create the SD card starting from them.
Calling ioctl() to re-read partition table.
 
Syncing disks.
 
[Making filesystems...]
 
mkfs.fat 4.1 (2017-01-24)
 
mke2fs 1.45.5 (07-Jan-2020)
 
Creating filesystem with 5694592 4k blocks and 1425408 inodes
 
Filesystem UUID: 393fccfd-00af-487c-ae97-a255d18ab558
 
Superblock backups stored on blocks:
 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
 
        4096000
 
  
Allocating group tables: done
+
The Yocto build take care about the overall binary consistance (like kernel modules and so on) avoiding to mistmatch different version.
Writing inode tables: done                           
 
Creating journal (32768 blocks): done
 
Writing superblocks and filesystem accounting information: done 
 
  
[Copying files...]
+
Moreover, the SD card is intended to be used during the development process and not for the production phase (where other deployment specifications and details have to be taken into account).
'desk/binaries/boot.scr' -> '/mnt/boot.scr'
 
'desk/binaries/desk-mx8m-l-4.0.0_bootscript.txt' -> '/mnt/desk-mx8m-l-4.0.0_bootscript.txt'
 
'desk/binaries/Image' -> '/mnt/Image'
 
'desk/binaries/imx8mp-mito8mplus-cb1008.dtb' -> '/mnt/imx8mp-mito8mplus-cb1008.dtb'
 
[Extracting rfs (this may take a while...)]
 
[Programming flash.bin]
 
1399+1 records in
 
1399+1 records out
 
1433040 bytes (1.4 MB, 1.4 MiB) copied, 0.30112 s, 4.8 MB/s
 
[Done]
 
dvdk@vagrant:~/desk-mx-l$
 
</pre>
 
  
[1] In case you have a different size, you'll need to change the <code>sfdisk</code> parameters accordingly.
 
  
 
----
 
----
  
 
[[Category:ORCA]] [[Category:MITO 8M Mini]]
 
[[Category:ORCA]] [[Category:MITO 8M Mini]]

Latest revision as of 18:17, 27 December 2023

History
Issue Date Notes

2022/02/17

First DESK-MX8M-L release

2023/02/24

DESK-MX8M-L-2.0.0 release
2023/08/23 DESK-MX8M-L-4.0.0 release



How to create a bootable SD card[edit | edit source]

This article shows how to (re)create the bootable SD card, from the binary images produced by the DESK-MX-L Yocto build, using a standard SD image flasher like balenaEtcher

The process is relatively straightforward: it consists of writing the WIC file of interest generated by Yocto onto the SD card. The following instruction explains how to use balenaEtcher on a Windows host. The procedure is similar when working with a Linux host.

  • download the desired binary image to flash (*.wic or *.wic.bz2) from the mirror binary server selecting the proper DESK-MX8M-L release
    • among the binaries made available in the mirror there are several *.wic.bz2 files for the available releases. In particular, there is the dave-image-devel-desk-mx8mp.wic.bz2 (for ORCA) or dave-image-devel-desk-mx8mm.wic.bz2 (for MITO8M Mini) files. This image is the one used to program the microSD card delivered along with the evaluation kit.
  • connect the microSD card to the PC Host
  • open balenaEtcher tool
  • once the tool is open:
    • select the binary to flash by clicking on "Flash from file"
    • select the microSD to flash by clicking on "Select target"
    • flash the uSD by clicking o "Flash".
Unpacking
Flashing
Validating

SD card structure[edit | edit source]

The created SD card has the following structure:

  • raw sectors for the bootloader storage: tipically this is a 8MB raw part where storing the bootloader binaries (like imx8mp_flash.bin) for the bootrom startup
  • FAT32 first partition: this will be mapped to the /dev/mmcblk1p1 device in Linux
    • usually this partition contains the Linux kernel binary and the device tree blob
    • the splash screen image is stored in this partition too for a splash image showing during U-Boot startup
  • ext4 second partition: this will be mapped to the /dev/mmcblk1p2 device in Linux
    • this partition contains the Linux root file system

Creating the SD card from binary artifacts[edit | edit source]

Even if the overall binary artifacts have been created by the Yocto build, it is highly discouraged to manually create the SD card starting from them.

The Yocto build take care about the overall binary consistance (like kernel modules and so on) avoiding to mistmatch different version.

Moreover, the SD card is intended to be used during the development process and not for the production phase (where other deployment specifications and details have to be taken into account).