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

From DAVE Developer's Wiki
Jump to: navigation, search
Line 1: Line 1:
[[File:TBD.png|thumb|center|200px|Work in progress]]
 
 
 
<section begin=History/>
 
<section begin=History/>
 
{| style="border-collapse:collapse; "
 
{| style="border-collapse:collapse; "
Line 10: Line 8:
 
|-
 
|-
 
|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"|1.0.0
 
|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"|1.0.0
|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"|Oct 2020
+
|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"|Jun 2021
 
|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 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 release
 
|}
 
|}
Line 27: Line 25:
 
The procedure has been tested on a Linux PC running Ubuntu LTS (>=''TBD'') distribution with  
 
The procedure has been tested on a Linux PC running Ubuntu LTS (>=''TBD'') distribution with  
 
*a 16 GB microSD card [1]
 
*a 16 GB microSD card [1]
*the binary files delivered along with the [[Axel_Embedded_Linux_Kit_(XELK)#Downloadable_binary_images|DESKMX6-L ''1.x.x'']].
+
*the binary files delivered along with the [[AXEL_Lite_SOM/DESK-MX6-L/General/Release_Notes#Downloadable_binary_images|DESKMX6-L ''1.0.0'']].
The resulting card is partitioned as depicted [[Axel_Embedded_Linux_Kit_(XELK)#XELK_microSD_Layout|here]].
+
The resulting card is partitioned as depicted here below:
  
The script - named <code>mksd.sh</code> - looks like this:
+
* bootable partition (mmcblk0p1, vfat) containing:
 +
** binary images (u-boot and kernel images)
 +
* root file system partition (mmcblk0p2, ext3)
 +
** root file system binaries and init scripts
 +
 
 +
The script - named <code>mksd.sh</code> - can be realized with the following code:
 
<pre>
 
<pre>
 
#!/bin/bash
 
#!/bin/bash
Line 114: Line 117:
 
then
 
then
 
{
 
{
echo 10,1380,0x0c,*
+
echo 40,1380,0x0c,*
echo 1390,,83,-
+
echo 1420,,83,-
 
} | sfdisk -D -H 255 -S 63 -C $CYLINDERS $DRIVE
 
} | sfdisk -D -H 255 -S 63 -C $CYLINDERS $DRIVE
 
else
 
else
 
{
 
{
     echo 10,4086M,0x0c,*
+
     echo 16M,8176M,0x0c,*
     echo 4096M,,83,-
+
     echo 8192M,,83,-
 
} | sfdisk $DRIVE
 
} | sfdisk $DRIVE
 
fi
 
fi
Line 129: Line 132:
 
echo "[Making filesystems...]"
 
echo "[Making filesystems...]"
 
mkfs.vfat -F 32 -n BOOT "$DRIVE$PART"1 #> /dev/null
 
mkfs.vfat -F 32 -n BOOT "$DRIVE$PART"1 #> /dev/null
mkfs.ext3 -L ROOTFS "$DRIVE$PART"2 #> /dev/null
+
mkfs.ext3 -F -L ROOTFS "$DRIVE$PART"2 #> /dev/null
  
 
echo "[Copying files...]"
 
echo "[Copying files...]"
Line 151: Line 154:
  
 
echo "[Done]"
 
echo "[Done]"
 
 
</pre>
 
</pre>
  
Line 158: Line 160:
 
* bootscript: <code>boot.scr</code>
 
* bootscript: <code>boot.scr</code>
 
* Linux kernel: <code>uImage</code>
 
* Linux kernel: <code>uImage</code>
* Device tree blob: <code>imx6q-xelk-l-2-0-0.dtb</code>.
+
* Device tree blob: <code>desk-mx6-l-1.0.0_imx6dl-sbcx-cb0012.dtb</code>.
  
 
This is the list of the binary files that will be used by the script:
 
This is the list of the binary files that will be used by the script:
 
<pre>
 
<pre>
dvdk@vagrant:~/desk-mx-l$ ls -la desk
+
dvdk@vagrant:~/desk-mx-l$ ll /tftpboot/desk-mx-l/
total 7548
+
total 10388
drwxrwxr-x 2 dvdk dvdk    4096 Oct 9 16:22 .
+
drwxr-xr-x 2 dvdk root    4096 Jul  1 14:53 ./
drwxrwxr-x 6 dvdk dvdk    4096 Oct 9 16:22 ..
+
drwxr-xr-x 3 dvdk root   4096 Apr 9 15:52 ../
-rw-r--r-- 1 dvdk dvdk  53760 Oct 9 16:22 imx6q-sbcx-cb0012.dtb
+
-rw-r--r-- 1 dvdk dvdk    1556 Jul  1 14:53 boot.scr
-rw-r--r-- 1 dvdk dvdk  56320 Oct 9 16:22 SPL
+
-rw-r--r-- 1 dvdk root  52939 Apr  9 15:53 desk-mx6-l-1.0.0_imx6dl-sbcx-cb0012.dtb
-rw-r--r-- 1 dvdk dvdk  569864 Oct 9 16:22 u-boot.img
+
-rw-r--r-- 1 dvdk root  53252 Apr  9 15:53 desk-mx6-l-1.0.0_imx6dl-sbcx-cb0013.dtb
-rw-r--r-- 1 dvdk dvdk 7031520 Oct 9 16:22 uImage
+
-rw-r--r-- 1 dvdk root  52837 Apr  9 15:53 desk-mx6-l-1.0.0_imx6dl-sbcx-cb0018.dtb
 +
-rw-r--r-- 1 dvdk root  53939 Apr 9 15:53 desk-mx6-l-1.0.0_imx6dl-sbcx-cb0050.dtb
 +
-rw-r--r-- 1 dvdk root  53212 Apr  9 15:53 desk-mx6-l-1.0.0_imx6dl-sbcx-cb0055.dtb
 +
-rw-r--r-- 1 dvdk root  49142 Apr  9 15:53 desk-mx6-l-1.0.0_imx6dl-xelk-l.dtb
 +
-rw-r--r-- 1 dvdk root   53760 Apr 9 15:53 desk-mx6-l-1.0.0_imx6q-sbcx-cb0012.dtb
 +
-rw-r--r-- 1 dvdk root  54069 Apr  9 15:53 desk-mx6-l-1.0.0_imx6q-sbcx-cb0013.dtb
 +
-rw-r--r-- 1 dvdk root  50131 Apr  9 15:53 desk-mx6-l-1.0.0_imx6q-xelk-l-2-0-0.dtb
 +
-rw-r--r-- 1 dvdk root  49959 Apr  9 15:53 desk-mx6-l-1.0.0_imx6q-xelk-l.dtb
 +
-rw-r--r-- 1 dvdk root   56320 Apr 9 15:52 desk-mx6-l-1.0.0_mx6qdldesk_nand_SPL
 +
-rw-r--r-- 1 dvdk root  570224 Apr  9 15:52 desk-mx6-l-1.0.0_mx6qdldesk_nand_u-boot.img
 +
-rw-r--r-- 1 dvdk root  56320 Apr  9 15:52 desk-mx6-l-1.0.0_mx6qdldesk_spi_SPL
 +
-rw-r--r-- 1 dvdk root  569984 Apr  9 15:52 desk-mx6-l-1.0.0_mx6qdldesk_spi_u-boot.img
 +
-rw-r--r-- 1 dvdk root  56320 Apr  9 15:52 desk-mx6-l-1.0.0_mx6qdldesk_SPL
 +
-rw-r--r-- 1 dvdk root 569864 Apr 9 15:52 desk-mx6-l-1.0.0_mx6qdldesk_u-boot.img
 +
-rw-r--r-- 1 dvdk root 7031584 Apr  9 15:53 desk-mx6-l-1.0.0_uImage
 +
-rw-r--r-- 1 dvdk root 1152054 Apr 9 15:52 splash_image.bmp
 
dvdk@vagrant:~/desk-mx-l$  
 
dvdk@vagrant:~/desk-mx-l$  
 
</pre>
 
</pre>
Line 180: Line 197:
 
*Archive of the target's root file system (compressed as <code>.tar.bz2</code> file).
 
*Archive of the target's root file system (compressed as <code>.tar.bz2</code> file).
 
<pre>
 
<pre>
dvdk@vagrant:~/desk-mx-l$ ./mksd.sh /dev/sd<x> <u-boot.img> <SPL> desk/ <rfs_filename>
+
dvdk@vagrant:~/desk-mx-l$ sudo ./desk-mx6-l-1.0.0_mksd.sh /dev/sdb /tftpboot/desk-mx-l/desk-mx6-l-1.0.0_mx6qdldesk_u-boot.img /tftpboot/desk-mx-l/desk-mx6-l-1.0.0_mx6qdldesk_SPL /tftpboot/desk-mx-l/ ./rfs/dave-image-devel-desk-mx6.tar.bz2
...
+
All data on /dev/sdb now will be destroyed! Continue? [y/n]
...
+
y
TBD
+
[Partitioning /dev/sdb...]
...
+
1024+0 records in
...
+
1024+0 records out
 +
1048576 bytes (1.0 MB, 1.0 MiB) copied, 3.0706 s, 341 kB/s
 +
DISK SIZE - 15931539456 bytes
 +
Checking that no-one is using this disk right now ... OK
 +
 
 +
Disk /dev/sdb: 14.9 GiB, 15931539456 bytes, 31116288 sectors
 +
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 0x2c61a4d6.
 +
Created a new partition 1 of type 'W95 FAT32 (LBA)' and of size 8 GiB.
 +
/dev/sdb2: Sector 16384000 is already allocated.
 +
Created a new partition 2 of type 'Linux' and of size 6.9 GiB.
 +
/dev/sdb3:
 +
New situation:
 +
 
 +
Device    Boot    Start      End  Sectors  Size Id Type
 +
/dev/sdb1  *      32768 16777215 16744448    8G  c W95 FAT32 (LBA)
 +
/dev/sdb2      16777216 31116287 14339072  6.9G 83 Linux
 +
 
 +
The partition table has been altered.
 +
Calling ioctl() to re-read partition table.
 +
Syncing disks.
 +
Warning: Unable to open /dev/sr0 read-write (Read-only file system).  /dev/sr0 has been opened read-only.
 +
Warning: Unable to open /dev/sr0 read-write (Read-only file system).  /dev/sr0 has been opened read-only.
 +
[Making filesystems...]
 +
mkfs.fat 3.0.28 (2015-05-16)
 +
mke2fs 1.42.13 (17-May-2015)
 +
/dev/sdb2 contains a ext3 file system labelled 'ROOTFS'
 +
last mounted on /mnt on Thu Jul  1 14:57:17 2021
 +
Creating filesystem with 1792384 4k blocks and 448800 inodes
 +
Filesystem UUID: 330007bc-831c-4c5d-b51e-626bbac325da
 +
Superblock backups stored on blocks:
 +
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
 +
 
 +
Allocating group tables: done                           
 +
Writing inode tables: done                           
 +
Creating journal (32768 blocks): done
 +
Writing superblocks and filesystem accounting information: done
 +
 
 +
[Copying files...]
 +
'/tftpboot/desk-mx-l/boot.scr' -> '/mnt/boot.scr'
 +
'/tftpboot/desk-mx-l/desk-mx6-l-1.0.0_imx6dl-sbcx-cb0012.dtb' -> '/mnt/desk-mx6-l-1.0.0_imx6dl-sbcx-cb0012.dtb'
 +
'/tftpboot/desk-mx-l/desk-mx6-l-1.0.0_imx6dl-sbcx-cb0013.dtb' -> '/mnt/desk-mx6-l-1.0.0_imx6dl-sbcx-cb0013.dtb'
 +
'/tftpboot/desk-mx-l/desk-mx6-l-1.0.0_imx6dl-sbcx-cb0018.dtb' -> '/mnt/desk-mx6-l-1.0.0_imx6dl-sbcx-cb0018.dtb'
 +
'/tftpboot/desk-mx-l/desk-mx6-l-1.0.0_imx6dl-sbcx-cb0050.dtb' -> '/mnt/desk-mx6-l-1.0.0_imx6dl-sbcx-cb0050.dtb'
 +
'/tftpboot/desk-mx-l/desk-mx6-l-1.0.0_imx6dl-sbcx-cb0055.dtb' -> '/mnt/desk-mx6-l-1.0.0_imx6dl-sbcx-cb0055.dtb'
 +
'/tftpboot/desk-mx-l/desk-mx6-l-1.0.0_imx6dl-xelk-l.dtb' -> '/mnt/desk-mx6-l-1.0.0_imx6dl-xelk-l.dtb'
 +
'/tftpboot/desk-mx-l/desk-mx6-l-1.0.0_imx6q-sbcx-cb0012.dtb' -> '/mnt/desk-mx6-l-1.0.0_imx6q-sbcx-cb0012.dtb'
 +
'/tftpboot/desk-mx-l/desk-mx6-l-1.0.0_imx6q-sbcx-cb0013.dtb' -> '/mnt/desk-mx6-l-1.0.0_imx6q-sbcx-cb0013.dtb'
 +
'/tftpboot/desk-mx-l/desk-mx6-l-1.0.0_imx6q-xelk-l-2-0-0.dtb' -> '/mnt/desk-mx6-l-1.0.0_imx6q-xelk-l-2-0-0.dtb'
 +
'/tftpboot/desk-mx-l/desk-mx6-l-1.0.0_imx6q-xelk-l.dtb' -> '/mnt/desk-mx6-l-1.0.0_imx6q-xelk-l.dtb'
 +
'/tftpboot/desk-mx-l/desk-mx6-l-1.0.0_mx6qdldesk_nand_SPL' -> '/mnt/desk-mx6-l-1.0.0_mx6qdldesk_nand_SPL'
 +
'/tftpboot/desk-mx-l/desk-mx6-l-1.0.0_mx6qdldesk_nand_u-boot.img' -> '/mnt/desk-mx6-l-1.0.0_mx6qdldesk_nand_u-boot.img'
 +
'/tftpboot/desk-mx-l/desk-mx6-l-1.0.0_mx6qdldesk_spi_SPL' -> '/mnt/desk-mx6-l-1.0.0_mx6qdldesk_spi_SPL'
 +
'/tftpboot/desk-mx-l/desk-mx6-l-1.0.0_mx6qdldesk_spi_u-boot.img' -> '/mnt/desk-mx6-l-1.0.0_mx6qdldesk_spi_u-boot.img'
 +
'/tftpboot/desk-mx-l/desk-mx6-l-1.0.0_mx6qdldesk_SPL' -> '/mnt/desk-mx6-l-1.0.0_mx6qdldesk_SPL'
 +
'/tftpboot/desk-mx-l/desk-mx6-l-1.0.0_mx6qdldesk_u-boot.img' -> '/mnt/desk-mx6-l-1.0.0_mx6qdldesk_u-boot.img'
 +
'/tftpboot/desk-mx-l/desk-mx6-l-1.0.0_uImage' -> '/mnt/desk-mx6-l-1.0.0_uImage'
 +
'/tftpboot/desk-mx-l/splash_image.bmp' -> '/mnt/splash_image.bmp'
 +
[Extracting rfs (this may take a while...)]
 +
[Programming SPL]
 +
110+0 records in
 +
110+0 records out
 +
56320 bytes (56 kB, 55 KiB) copied, 0.181772 s, 310 kB/s
 +
[Programming u-boot.img]
 +
556+1 records in
 +
556+1 records out
 +
569864 bytes (570 kB, 557 KiB) copied, 2.31068 s, 247 kB/s
 +
[Done]
 
</pre>
 
</pre>
 
  
 
[1] In case you have a different size, you'll need to change the <code>sfdisk</code> parameters accordingly.
 
[1] In case you have a different size, you'll need to change the <code>sfdisk</code> parameters accordingly.
Line 244: Line 330:
  
 
<pre>
 
<pre>
mkimage -A ARM -T script -C none -n AXEL-Lite-DESK-SBCX -d bootscript.txt boot.scr
+
mkimage -A ARM -T script -C none -n DESK-MX6-L -d bootscript.txt boot.scr
 
</pre>
 
</pre>
  

Revision as of 13:57, 1 July 2021

History
Version Issue Date Notes
1.0.0 Jun 2021 First DESK release



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

200px-Emblem-important.svg.png

The procedure described here was tested with a physical machine. In case of a virtual machine such as the MVM, it might not work properly. Also, it is worth remembering that USB controller of the MVM is disabled by default. See also this section.


This article shows how to create a bootable microSD for the [[DESK-MX6-L/General/Release_Notes_(DESK-MX6-L)|DESK-MX6-L Release Notes] kit by using a simple bash script.
Note: Starting from this release the support for the SPL has been introduced in Uboot. Previous versions of this script will no longer produce a fully functional and bootable microSD card.

The procedure has been tested on a Linux PC running Ubuntu LTS (>=TBD) distribution with

  • a 16 GB microSD card [1]
  • the binary files delivered along with the DESKMX6-L 1.0.0.

The resulting card is partitioned as depicted here below:

  • bootable partition (mmcblk0p1, vfat) containing:
    • binary images (u-boot and kernel images)
  • root file system partition (mmcblk0p2, ext3)
    • root file system binaries and init scripts

The script - named mksd.sh - can be realized with the following code:

#!/bin/bash

if [[ -z $1 || -z $2 || -z $3 || -z $4 || -z $5 ]]
then
	echo "$0 Usage:"
	echo "	$0 <device> <u-boot.img> <SPL> <binaries directory> <rootfs tar.bz2>"
	echo "	Example: $0 /dev/sdc u-boot.img SPL 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 u-boot.img location!"
	exit
fi

if ! [[ -e $3 ]]
then
	echo "Incorrect SPL location!"
	exit
fi

if ! [[ -d $4 ]]
then
	echo "Incorrect Binaries location!"
	exit
fi

if ! [[ -f $5 ]]
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
UBOOT=$2
SPL=$3
BINARIES=$4
RFS=$5

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 SPL]"
dd if=$SPL of=$DRIVE bs=512 seek=2 conv=fsync

echo "[Programming u-boot.img]"
dd if=$UBOOT of=$DRIVE bs=1k seek=69 conv=fsync

echo "[Done]"


Here is an example that shows how to use this script. Let's assume that the binary files were downloaded in the desk subdirectory of the working directory. 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: boot.scr
  • Linux kernel: uImage
  • Device tree blob: desk-mx6-l-1.0.0_imx6dl-sbcx-cb0012.dtb.

This is the list of the binary files that will be used by the script:

dvdk@vagrant:~/desk-mx-l$ ll /tftpboot/desk-mx-l/
total 10388
drwxr-xr-x 2 dvdk root    4096 Jul  1 14:53 ./
drwxr-xr-x 3 dvdk root    4096 Apr  9 15:52 ../
-rw-r--r-- 1 dvdk dvdk    1556 Jul  1 14:53 boot.scr
-rw-r--r-- 1 dvdk root   52939 Apr  9 15:53 desk-mx6-l-1.0.0_imx6dl-sbcx-cb0012.dtb
-rw-r--r-- 1 dvdk root   53252 Apr  9 15:53 desk-mx6-l-1.0.0_imx6dl-sbcx-cb0013.dtb
-rw-r--r-- 1 dvdk root   52837 Apr  9 15:53 desk-mx6-l-1.0.0_imx6dl-sbcx-cb0018.dtb
-rw-r--r-- 1 dvdk root   53939 Apr  9 15:53 desk-mx6-l-1.0.0_imx6dl-sbcx-cb0050.dtb
-rw-r--r-- 1 dvdk root   53212 Apr  9 15:53 desk-mx6-l-1.0.0_imx6dl-sbcx-cb0055.dtb
-rw-r--r-- 1 dvdk root   49142 Apr  9 15:53 desk-mx6-l-1.0.0_imx6dl-xelk-l.dtb
-rw-r--r-- 1 dvdk root   53760 Apr  9 15:53 desk-mx6-l-1.0.0_imx6q-sbcx-cb0012.dtb
-rw-r--r-- 1 dvdk root   54069 Apr  9 15:53 desk-mx6-l-1.0.0_imx6q-sbcx-cb0013.dtb
-rw-r--r-- 1 dvdk root   50131 Apr  9 15:53 desk-mx6-l-1.0.0_imx6q-xelk-l-2-0-0.dtb
-rw-r--r-- 1 dvdk root   49959 Apr  9 15:53 desk-mx6-l-1.0.0_imx6q-xelk-l.dtb
-rw-r--r-- 1 dvdk root   56320 Apr  9 15:52 desk-mx6-l-1.0.0_mx6qdldesk_nand_SPL
-rw-r--r-- 1 dvdk root  570224 Apr  9 15:52 desk-mx6-l-1.0.0_mx6qdldesk_nand_u-boot.img
-rw-r--r-- 1 dvdk root   56320 Apr  9 15:52 desk-mx6-l-1.0.0_mx6qdldesk_spi_SPL
-rw-r--r-- 1 dvdk root  569984 Apr  9 15:52 desk-mx6-l-1.0.0_mx6qdldesk_spi_u-boot.img
-rw-r--r-- 1 dvdk root   56320 Apr  9 15:52 desk-mx6-l-1.0.0_mx6qdldesk_SPL
-rw-r--r-- 1 dvdk root  569864 Apr  9 15:52 desk-mx6-l-1.0.0_mx6qdldesk_u-boot.img
-rw-r--r-- 1 dvdk root 7031584 Apr  9 15:53 desk-mx6-l-1.0.0_uImage
-rw-r--r-- 1 dvdk root 1152054 Apr  9 15:52 splash_image.bmp
dvdk@vagrant:~/desk-mx-l$ 

You can now run the script, by passing the following parameters:

  • Device file of the microSD card (/dev/sdc in the example)
  • U-Boot image
  • SPL
  • 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 .tar.bz2 file).
dvdk@vagrant:~/desk-mx-l$ sudo ./desk-mx6-l-1.0.0_mksd.sh  /dev/sdb /tftpboot/desk-mx-l/desk-mx6-l-1.0.0_mx6qdldesk_u-boot.img /tftpboot/desk-mx-l/desk-mx6-l-1.0.0_mx6qdldesk_SPL /tftpboot/desk-mx-l/ ./rfs/dave-image-devel-desk-mx6.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, 3.0706 s, 341 kB/s
DISK SIZE - 15931539456 bytes
Checking that no-one is using this disk right now ... OK

Disk /dev/sdb: 14.9 GiB, 15931539456 bytes, 31116288 sectors
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 0x2c61a4d6.
Created a new partition 1 of type 'W95 FAT32 (LBA)' and of size 8 GiB.
/dev/sdb2: Sector 16384000 is already allocated.
Created a new partition 2 of type 'Linux' and of size 6.9 GiB.
/dev/sdb3: 
New situation:

Device     Boot    Start      End  Sectors  Size Id Type
/dev/sdb1  *       32768 16777215 16744448    8G  c W95 FAT32 (LBA)
/dev/sdb2       16777216 31116287 14339072  6.9G 83 Linux

The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
Warning: Unable to open /dev/sr0 read-write (Read-only file system).  /dev/sr0 has been opened read-only.
Warning: Unable to open /dev/sr0 read-write (Read-only file system).  /dev/sr0 has been opened read-only.
[Making filesystems...]
mkfs.fat 3.0.28 (2015-05-16)
mke2fs 1.42.13 (17-May-2015)
/dev/sdb2 contains a ext3 file system labelled 'ROOTFS'
	last mounted on /mnt on Thu Jul  1 14:57:17 2021
Creating filesystem with 1792384 4k blocks and 448800 inodes
Filesystem UUID: 330007bc-831c-4c5d-b51e-626bbac325da
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done 

[Copying files...]
'/tftpboot/desk-mx-l/boot.scr' -> '/mnt/boot.scr'
'/tftpboot/desk-mx-l/desk-mx6-l-1.0.0_imx6dl-sbcx-cb0012.dtb' -> '/mnt/desk-mx6-l-1.0.0_imx6dl-sbcx-cb0012.dtb'
'/tftpboot/desk-mx-l/desk-mx6-l-1.0.0_imx6dl-sbcx-cb0013.dtb' -> '/mnt/desk-mx6-l-1.0.0_imx6dl-sbcx-cb0013.dtb'
'/tftpboot/desk-mx-l/desk-mx6-l-1.0.0_imx6dl-sbcx-cb0018.dtb' -> '/mnt/desk-mx6-l-1.0.0_imx6dl-sbcx-cb0018.dtb'
'/tftpboot/desk-mx-l/desk-mx6-l-1.0.0_imx6dl-sbcx-cb0050.dtb' -> '/mnt/desk-mx6-l-1.0.0_imx6dl-sbcx-cb0050.dtb'
'/tftpboot/desk-mx-l/desk-mx6-l-1.0.0_imx6dl-sbcx-cb0055.dtb' -> '/mnt/desk-mx6-l-1.0.0_imx6dl-sbcx-cb0055.dtb'
'/tftpboot/desk-mx-l/desk-mx6-l-1.0.0_imx6dl-xelk-l.dtb' -> '/mnt/desk-mx6-l-1.0.0_imx6dl-xelk-l.dtb'
'/tftpboot/desk-mx-l/desk-mx6-l-1.0.0_imx6q-sbcx-cb0012.dtb' -> '/mnt/desk-mx6-l-1.0.0_imx6q-sbcx-cb0012.dtb'
'/tftpboot/desk-mx-l/desk-mx6-l-1.0.0_imx6q-sbcx-cb0013.dtb' -> '/mnt/desk-mx6-l-1.0.0_imx6q-sbcx-cb0013.dtb'
'/tftpboot/desk-mx-l/desk-mx6-l-1.0.0_imx6q-xelk-l-2-0-0.dtb' -> '/mnt/desk-mx6-l-1.0.0_imx6q-xelk-l-2-0-0.dtb'
'/tftpboot/desk-mx-l/desk-mx6-l-1.0.0_imx6q-xelk-l.dtb' -> '/mnt/desk-mx6-l-1.0.0_imx6q-xelk-l.dtb'
'/tftpboot/desk-mx-l/desk-mx6-l-1.0.0_mx6qdldesk_nand_SPL' -> '/mnt/desk-mx6-l-1.0.0_mx6qdldesk_nand_SPL'
'/tftpboot/desk-mx-l/desk-mx6-l-1.0.0_mx6qdldesk_nand_u-boot.img' -> '/mnt/desk-mx6-l-1.0.0_mx6qdldesk_nand_u-boot.img'
'/tftpboot/desk-mx-l/desk-mx6-l-1.0.0_mx6qdldesk_spi_SPL' -> '/mnt/desk-mx6-l-1.0.0_mx6qdldesk_spi_SPL'
'/tftpboot/desk-mx-l/desk-mx6-l-1.0.0_mx6qdldesk_spi_u-boot.img' -> '/mnt/desk-mx6-l-1.0.0_mx6qdldesk_spi_u-boot.img'
'/tftpboot/desk-mx-l/desk-mx6-l-1.0.0_mx6qdldesk_SPL' -> '/mnt/desk-mx6-l-1.0.0_mx6qdldesk_SPL'
'/tftpboot/desk-mx-l/desk-mx6-l-1.0.0_mx6qdldesk_u-boot.img' -> '/mnt/desk-mx6-l-1.0.0_mx6qdldesk_u-boot.img'
'/tftpboot/desk-mx-l/desk-mx6-l-1.0.0_uImage' -> '/mnt/desk-mx6-l-1.0.0_uImage'
'/tftpboot/desk-mx-l/splash_image.bmp' -> '/mnt/splash_image.bmp'
[Extracting rfs (this may take a while...)]
[Programming SPL]
110+0 records in
110+0 records out
56320 bytes (56 kB, 55 KiB) copied, 0.181772 s, 310 kB/s
[Programming u-boot.img]
556+1 records in
556+1 records out
569864 bytes (570 kB, 557 KiB) copied, 2.31068 s, 247 kB/s
[Done]

[1] In case you have a different size, you'll need to change the sfdisk parameters accordingly.

bootscr[edit | edit source]

Once you got the new binaries compiled from your modified sources, they have to be installed on first SD partition preserving the original file names used into boot.scr u-boot bootscript.

Here below there is an example on how to create a boot.scr file from the bootscript.txt for booting from SD card:

echo 'bootscript generated with command "mkimage -A ARM -T script -C none -n AXEL-Lite-DESK-SBCX -d bootscript.txt boot.scr"'

setenv desk_release 'desk-mx6-l-1.0.0'

if test 0x${cb_configid#} = 0x00000012;
then
	if test ${cpu} = 6DL; then
		setenv fdtfile ${desk_release}_imx6dl-sbcx-cb0012.dtb
	else
		setenv fdtfile ${desk_release}_imx6q-sbcx-cb0012.dtb
	fi
elif test 0x${cb_configid#} = 0x00000013;
then
	if test ${cpu} = 6DL; then
		setenv fdtfile ${desk_release}_imx6dl-sbcx-cb0013.dtb
	else
		setenv fdtfile ${desk_release}_imx6q-sbcx-cb0013.dtb
	fi
elif test 0x${cb_configid#} = 0xffffffff;
then
	if test ${cpu} = 6DL; then
		setenv fdtfile ${desk_release}_imx6dl-desk-l-2.0.0.dtb
	else
		setenv fdtfile ${desk_release}_imx6q-desk-l-2.0.0.dtb
	fi
else
    echo Invalid CB! Autoreset ...
    sleep 30
	reset
fi

setenv bootfile ${desk_release}_uImage

setenv mmc_loadk 'fatload mmc ${mmcdev}:1 ${loadaddr} ${bootfile}'
setenv mmc_loadfdt 'fatload mmc ${mmcdev}:1 ${fdtaddr} ${fdtfile}'

echo Booting AxelLite-DESK-SBCX via mmcboot with ${fdtfile} as device tree

run mmcboot

echo mmcboot FAILURE

and compile it using:

mkimage -A ARM -T script -C none -n DESK-MX6-L -d bootscript.txt boot.scr

Then copy the boot.scr into the <binaries_dir> directories used by the script to create the SD card.