Difference between revisions of "How to populate the SD card with dd command"

[quality revision] [pending revision]
m
m (Populate the microSD card inserted on your linux host PC with the created raw file)
 



1 Introduction[edit]

STMicroelectronics delivers also a script runing on Linux host PC to populate ONLY the microSD card device.
This script is located here : build-<DISTRO>-<MACHINE>/tmp-glibc/deploy/images/<MACHINE>/scripts/

This script as STM32CubeProgrammer tool is using Flashlayout.tsv file in input parameter
This script creates a raw file <FlashLayoutName>.raw and a txt file <FlashLayoutName>.how_to_update.txt
Then you can use this raw file to populate your microSD card inserted on your HOST PC

2 Usage[edit]

PC $> cd build-<DISTRO>-<MACHINE>/tmp-glibc/deploy/images/<MACHINE>/scripts
PC $> ./create_sdcard_from_flashlayout.sh ../flashlayout_<built-image>/<FlashLayout file>

Example :

PC $> cd build-openstlinuxweston-stm32mp1/tmp-glibc/deploy/images/stm32mp1/scripts/
PC $> ./create_sdcard_from_flashlayout.sh ../flashlayout_st-image-weston/FlashLayout_sdcard_stm32mp157c-ev1-trusted.tsv 
Create Raw empty image: ../flashlayout_st-image-weston/../flashlayout_st-image-weston_FlashLayout_sdcard_stm32mp157c-ev1-trusted.raw of 1536MB
Create partition table:
[CREATED] part 1:    fsbl1 [partition size 256.0 KiB]
[CREATED] part 2:    fsbl2 [partition size 256.0 KiB]
[CREATED] part 3:     ssbl [partition size 2.5 MiB]
[CREATED] part 4:   bootfs [partition size 64.0 MiB]
[CREATED] part 5: vendorfs [partition size 16.0 MiB]
[CREATED] part 6:   rootfs [partition size 750.4 MiB]
[CREATED] part 7:   userfs [partition size 702.5 MiB]

Partition table from ../flashlayout_st-image-weston/../flashlayout_st-image-weston_FlashLayout_sdcard_stm32mp157c-ev1-trusted.raw
Disk ../flashlayout_st-image-weston/../flashlayout_st-image-weston_FlashLayout_sdcard_stm32mp157c-ev1-trusted.raw: 3145728 sectors, 1.5 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 8E3FE74B-3B58-4617-B71B-5EC498875478
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 3145694
Partitions will be aligned on 2-sector boundaries
Total free space is 0 sectors (0 bytes)

Number  Start (sector)    End (sector)  Size       Code  Name
   1              34             545   256.0 KiB   8300  fsbl1
   2             546            1057   256.0 KiB   8300  fsbl2
   3            1058            6177   2.5 MiB     8300  ssbl
   4            6178          137249   64.0 MiB    8300  bootfs
   5          137250          170017   16.0 MiB    8300  vendorfs
   6          170018         1706881   750.4 MiB   8300  rootfs
   7         1706882         3145694   702.5 MiB   8300  userfs

Populate raw image with image content:
[ FILLED ] part 1:    fsbl1, image: tf-a-stm32mp157c-ev1-trusted.stm32 
[ FILLED ] part 2:    fsbl2, image: tf-a-stm32mp157c-ev1-trusted.stm32 
[ FILLED ] part 3:     ssbl, image: u-boot-stm32mp157c-ev1-trusted.stm32 
[ FILLED ] part 4:   bootfs, image: st-image-bootfs-openstlinux-weston-stm32mp1.ext4 
[ FILLED ] part 5: vendorfs, image: st-image-vendorfs-openstlinux-weston-stm32mp1.ext4 
[ FILLED ] part 6:   rootfs, image: st-image-weston-openstlinux-weston-stm32mp1.ext4 
[ FILLED ] part 7:   userfs, image: st-image-userfs-openstlinux-weston-stm32mp1.ext4 

###########################################################################
###########################################################################

RAW IMAGE generated: ../flashlayout_st-image-weston/../flashlayout_st-image-weston_FlashLayout_sdcard_stm32mp157c-ev1-trusted.raw

WARNING: before to use the command dd, please umount all the partitions
	associated to SDCARD.
    sudo umount `lsblk --list | grep mmcblk0 | grep part | gawk '{ print $7 }' | tr '\n' ' '`

To put this raw image on sdcard:
    sudo dd if=../flashlayout_st-image-weston/../flashlayout_st-image-weston_FlashLayout_sdcard_stm32mp157c-ev1-trusted.raw of=/dev/mmcblk0 bs=8M conv=fdatasync

(mmcblk0 can be replaced by:
     sdX if it's a device dedicated to receive the raw image 
          (where X can be a, b, c, d, e)

###########################################################################
###########################################################################

3 Populate the microSD card inserted on your linux host PC with the created raw file[edit]

You need first to retrieve the volume name of your drive (USB Key or MMC card)


To connect a USB device to the virtual machine manually, select VM > Removable Devices > Device Name > Connect (Disconnect from host)

More explanations for this specific case here


Insert your drive then use the following command :

  • In this example, the volume name is sdd (microSD card is inserted with USB key)
PC $> cat /proc/partitions 
major minor  #blocks  name

   8        0  488386584 sda
   8        1     999424 sda1
   8        2          1 sda2
   8        5  487384064 sda5
  11        0    1048575 sr0
252        0  487382016 dm-0
252        1   19996672 dm-1
252        2    8335360 dm-2
252        3  459046912 dm-3
   8       48    1921024 sdd
  • In this example, the volume name is mmcblk0 (microSD card is inserted directly with microSD card adapter)
PC $> cat /proc/partitions 
major minor  #blocks  name

   8        0  488386584 sda
   8        1     999424 sda1
   8        2          1 sda2
   8        5  487384064 sda5
  11        0    1048575 sr0
252        0  487382016 dm-0
252        1   19996672 dm-1
252        2    8335360 dm-2
252        3  459046912 dm-3
   8       48    1921024 mmcblk0


Info.png mmcblk0 can be replaced by: sdX if it's a device dedicated to receive the raw image (where X can be a, b, c, d, e)
  • Before using the command dd, please umount all the partitions associated to microSD card.

PC $> sudo umount `lsblk --list | grep mmcblk0 | grep part | gawk '{ print $7 }' | tr '\n' ' '`


  • Populate microSD card with dd command:

PC $> cd build-openstlinuxweston-stm32mp1/tmp-glibc/deploy/images/stm32mp1/scripts/

PC $> sudo dd if=../flashlayout_st-image-weston_FlashLayout_sdcard_stm32mp157c-ev1-trusted.raw of=/dev/mmcblk0 bs=8M conv=fdatasync status=progress

The dd command takes few minutes (depending mainly of your rootfs size)

4 Update manually some partitions with dd command[edit]

Once you have populated your microSD card with the raw file, it is possible to update manually some partitions as explained in txt file.

Example :

PC $> cat flashlayout_st-image-weston_FlashLayout_sdcard_stm32mp157c-ev1-trusted.how_to_update.txt
This file describes how to update manually the partition of SDCARD:
1. SDCARD schema of partition
2. How to populate each partition
3. How to update the kernel/devicetree

1. SDCARD schema of partition:
------------------------------

============================================================================================
=            =            =            =            =            =            =            =
=     fsbl1  =     fsbl2  =      ssbl  =    bootfs  =  vendorfs  =    rootfs  =    userfs  =
=            =            =            =            =            =            =            =
= mmcblk0p1  = mmcblk0p2  = mmcblk0p3  = mmcblk0p4  = mmcblk0p5  = mmcblk0p6  = mmcblk0p7  =
=    (1 )    =    (2 )    =    (3 )    =    (4 )    =    (5 )    =    (6 )    =    (7 )    =
=            =            =            =            =            =            =            =
============================================================================================
(1):
    Device: /dev/mmcblk0p1
    Label:  fsbl1
    Image:  tf-a-stm32mp157c-ev1-trusted.stm32
(2):
    Device: /dev/mmcblk0p2
    Label:  fsbl2
    Image:  tf-a-stm32mp157c-ev1-trusted.stm32
(3):
    Device: /dev/mmcblk0p3
    Label:  ssbl
    Image:  u-boot-stm32mp157c-ev1-trusted.stm32
(4):
    Device: /dev/mmcblk0p4
    Label:  bootfs
    Image:  st-image-bootfs-openstlinux-weston-stm32mp1.ext4
(5):
    Device: /dev/mmcblk0p5
    Label:  vendorfs
    Image:  st-image-vendorfs-openstlinux-weston-stm32mp1.ext4
(6):
    Device: /dev/mmcblk0p6
    Label:  rootfs
    Image:  st-image-weston-openstlinux-weston-stm32mp1.ext4
(7):
    Device: /dev/mmcblk0p7
    Label:  userfs
    Image:  st-image-userfs-openstlinux-weston-stm32mp1.ext4

2. How to populate each partition
---------------------------------
- Populate partition fsbl1 (/dev/mmcblk0p1)
    dd if=tf-a-stm32mp157c-ev1-trusted.stm32 of=/dev/mmcblk0p1 bs=1M conv=fdatasync

- Populate partition fsbl2 (/dev/mmcblk0p2)
    dd if=tf-a-stm32mp157c-ev1-trusted.stm32 of=/dev/mmcblk0p2 bs=1M conv=fdatasync

- Populate partition ssbl (/dev/mmcblk0p3)
    dd if=u-boot-stm32mp157c-ev1-trusted.stm32 of=/dev/mmcblk0p3 bs=1M conv=fdatasync

- Populate partition bootfs (/dev/mmcblk0p4)
    dd if=st-image-bootfs-openstlinux-weston-stm32mp1.ext4 of=/dev/mmcblk0p4 bs=1M conv=fdatasync

- Populate partition vendorfs (/dev/mmcblk0p5)
    dd if=st-image-vendorfs-openstlinux-weston-stm32mp1.ext4 of=/dev/mmcblk0p5 bs=1M conv=fdatasync

- Populate partition rootfs (/dev/mmcblk0p6)
    dd if=st-image-weston-openstlinux-weston-stm32mp1.ext4 of=/dev/mmcblk0p6 bs=1M conv=fdatasync

- Populate partition userfs (/dev/mmcblk0p7)
    dd if=st-image-userfs-openstlinux-weston-stm32mp1.ext4 of=/dev/mmcblk0p7 bs=1M conv=fdatasync


3. How to update the kernel/devicetree
--------------------------------------
The kernel and devicetree are present on "bootfs" partition.
To change kernel and devicetree, you can copy the file on this partition:
- plug SDCARD on your PC
- copy kernel uImage on SDCARD
   sudo cp uImage /media/$USER/bootfs/
- copy devicetree uImage on SDCARD
   sudo cp stm32mp1*.dtb /media/$USER/bootfs/
- umount partitions of SDCARD
   sudo umount /media/$USER/bootfs/
   (dont't forget to umount the other partitions of SDCARD:
   sudo umount `lsblk --list | grep mmcblk0 | grep part | gawk '{ print $7 }' | tr '\n' ' '`
   )
<noinclude>

{{ArticleMainWriter | ChristopheM}}
{{ArticleApprovedVersion | ChristopheM | BernardP, JeanChristopheT, ChristopheP | No previous approved version | AlainF - 07Nov'18 - 9332 | 07Nov'18}}
[[Category:How to populate boards]]</noinclude>


==Introduction==
STMicroelectronics delivers also a script runing on '''Linux''' host PC to populate '''ONLY''' the microSD card device.<br>

This script is located here : build-<DISTRO>-<MACHINE>/tmp-glibc/deploy/images/<MACHINE>/scripts/<br>


This script as [[STM32CubeProgrammer]] tool is using ''Flashlayout.tsv'' file in input parameter<br>

This script creates a raw file <FlashLayoutName>.raw and a txt file <FlashLayoutName>.how_to_update.txt<br>

Then you can use this raw file to populate your microSD card inserted on your HOST PC

==Usage==
{{PC$}} cd '''build-<DISTRO>-<MACHINE>/tmp-glibc/deploy/images/<MACHINE>/scripts'''<br>

{{PC$}} ./create_sdcard_from_flashlayout.sh ../flashlayout_<built-image>/<FlashLayout file>


Example :<pre>

PC $> cd build-openstlinuxweston-stm32mp1/tmp-glibc/deploy/images/stm32mp1/scripts/
PC $> ./create_sdcard_from_flashlayout.sh ../flashlayout_st-image-weston/FlashLayout_sdcard_stm32mp157c-ev1-trusted.tsv 
Create Raw empty image: ../flashlayout_st-image-weston/../flashlayout_st-image-weston_FlashLayout_sdcard_stm32mp157c-ev1-trusted.raw of 1536MB
Create partition table:
[CREATED] part 1:    fsbl1 [partition size 256.0 KiB]
[CREATED] part 2:    fsbl2 [partition size 256.0 KiB]
[CREATED] part 3:     ssbl [partition size 2.5 MiB]
[CREATED] part 4:   bootfs [partition size 64.0 MiB]
[CREATED] part 5: vendorfs [partition size 16.0 MiB]
[CREATED] part 6:   rootfs [partition size 750.4 MiB]
[CREATED] part 7:   userfs [partition size 702.5 MiB]

Partition table from ../flashlayout_st-image-weston/../flashlayout_st-image-weston_FlashLayout_sdcard_stm32mp157c-ev1-trusted.raw
Disk ../flashlayout_st-image-weston/../flashlayout_st-image-weston_FlashLayout_sdcard_stm32mp157c-ev1-trusted.raw: 3145728 sectors, 1.5 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 8E3FE74B-3B58-4617-B71B-5EC498875478
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 3145694
Partitions will be aligned on 2-sector boundaries
Total free space is 0 sectors (0 bytes)

Number  Start (sector)    End (sector)  Size       Code  Name
   1              34             545   256.0 KiB   8300  fsbl1
   2             546            1057   256.0 KiB   8300  fsbl2
   3            1058            6177   2.5 MiB     8300  ssbl
   4            6178          137249   64.0 MiB    8300  bootfs
   5          137250          170017   16.0 MiB    8300  vendorfs
   6          170018         1706881   750.4 MiB   8300  rootfs
   7         1706882         3145694   702.5 MiB   8300  userfs

Populate raw image with image content:
[ FILLED ] part 1:    fsbl1, image: tf-a-stm32mp157c-ev1-trusted.stm32 
[ FILLED ] part 2:    fsbl2, image: tf-a-stm32mp157c-ev1-trusted.stm32 
[ FILLED ] part 3:     ssbl, image: u-boot-stm32mp157c-ev1-trusted.stm32 
[ FILLED ] part 4:   bootfs, image: st-image-bootfs-openstlinux-weston-stm32mp1.ext4 
[ FILLED ] part 5: vendorfs, image: st-image-vendorfs-openstlinux-weston-stm32mp1.ext4 
[ FILLED ] part 6:   rootfs, image: st-image-weston-openstlinux-weston-stm32mp1.ext4 
[ FILLED ] part 7:   userfs, image: st-image-userfs-openstlinux-weston-stm32mp1.ext4 

###########################################################################
###########################################################################

RAW IMAGE generated: ../flashlayout_st-image-weston/../flashlayout_st-image-weston_FlashLayout_sdcard_stm32mp157c-ev1-trusted.raw

WARNING: before to use the command dd, please umount all the partitions
	associated to SDCARD.
    sudo umount `lsblk --list | grep mmcblk0 | grep part | gawk '{ print $7 }' | tr '\n' ' '`

To put this raw image on sdcard:
    sudo dd if=../flashlayout_st-image-weston/../flashlayout_st-image-weston_FlashLayout_sdcard_stm32mp157c-ev1-trusted.raw of=/dev/mmcblk0 bs=8M conv=fdatasync

(mmcblk0 can be replaced by:
     sdX if it's a device dedicated to receive the raw image 
          (where X can be a, b, c, d, e)

###########################################################################
###########################################################################</pre>


==Populate the microSD card inserted on your linux host PC with the created raw file==
You need first to retrieve the volume name of your drive (USB  Key or MMC card)

'''To connect a USB device to the virtual machine manually''', select VM > Removable Devices > Device Name > Connect (Disconnect from host)

More explanations for this specific case [https://docs.vmware.com/en/VMware-Workstation-Pro/15.0/com.vmware.ws.using.doc/GUID-E003456F-EB94-4B53-9082-293D9617CB5A.html here] 

Insert your drive then use the following command :

* In this example, the volume name is '''sdd''' (microSD card is inserted with USB key)
<pre>

PC $> cat /proc/partitions 
major minor  #blocks  name

   8        0  488386584 sda
   8        1     999424 sda1
   8        2          1 sda2
   8        5  487384064 sda5
  11        0    1048575 sr0
252        0  487382016 dm-0
252        1   19996672 dm-1
252        2    8335360 dm-2
252        3  459046912 dm-3
   8       48    1921024 sdd</pre>


* In this example, the volume name is '''mmcblk0''' (microSD card is inserted directly with microSD card adapter)<pre>

PC $> cat /proc/partitions 
major minor  #blocks  name

   8        0  488386584 sda
   8        1     999424 sda1
   8        2          1 sda2
   8        5  487384064 sda5
  11        0    1048575 sr0
252        0  487382016 dm-0
252        1   19996672 dm-1
252        2    8335360 dm-2
252        3  459046912 dm-3
   8       48    1921024 mmcblk0</pre>


{{InternalInfo| <br>

 '''ST internal: sudo is not necessary on ST ubuntu for dd nor umount commands'''<br>

}}

{{Info| mmcblk0 can be replaced by: sdX if it's a device dedicated to receive the raw image (where X can be a, b, c, d, e)}}

* Before using the command dd, please umount all the partitions associated to microSD card.

{{PC$}} sudo umount `lsblk --list | grep mmcblk0 | grep part | gawk '{ print $7 }' | tr '\n' ' '`

* Populate microSD card with dd command:

{{PC$}} cd build-openstlinuxweston-stm32mp1/tmp-glibc/deploy/images/stm32mp1/scripts/

{{PC$}} sudo dd if=../flashlayout_st-image-weston_FlashLayout_sdcard_stm32mp157c-ev1-trusted.raw of=/dev/mmcblk0 bs=8M conv=fdatasync 
status=progress
The dd command takes few minutes (depending mainly of your rootfs size)

==Update manually some partitions with dd command==
Once you have populated your microSD card with the raw file, it is possible to update manually some partitions as explained in txt file. 

Example :<pre>

PC $> cat flashlayout_st-image-weston_FlashLayout_sdcard_stm32mp157c-ev1-trusted.how_to_update.txt
This file describes how to update manually the partition of SDCARD:
1. SDCARD schema of partition
2. How to populate each partition
3. How to update the kernel/devicetree

1. SDCARD schema of partition:
------------------------------

============================================================================================
=            =            =            =            =            =            =            =
=     fsbl1  =     fsbl2  =      ssbl  =    bootfs  =  vendorfs  =    rootfs  =    userfs  =
=            =            =            =            =            =            =            =
= mmcblk0p1  = mmcblk0p2  = mmcblk0p3  = mmcblk0p4  = mmcblk0p5  = mmcblk0p6  = mmcblk0p7  =
=    (1 )    =    (2 )    =    (3 )    =    (4 )    =    (5 )    =    (6 )    =    (7 )    =
=            =            =            =            =            =            =            =
============================================================================================
(1):
    Device: /dev/mmcblk0p1
    Label:  fsbl1
    Image:  tf-a-stm32mp157c-ev1-trusted.stm32
(2):
    Device: /dev/mmcblk0p2
    Label:  fsbl2
    Image:  tf-a-stm32mp157c-ev1-trusted.stm32
(3):
    Device: /dev/mmcblk0p3
    Label:  ssbl
    Image:  u-boot-stm32mp157c-ev1-trusted.stm32
(4):
    Device: /dev/mmcblk0p4
    Label:  bootfs
    Image:  st-image-bootfs-openstlinux-weston-stm32mp1.ext4
(5):
    Device: /dev/mmcblk0p5
    Label:  vendorfs
    Image:  st-image-vendorfs-openstlinux-weston-stm32mp1.ext4
(6):
    Device: /dev/mmcblk0p6
    Label:  rootfs
    Image:  st-image-weston-openstlinux-weston-stm32mp1.ext4
(7):
    Device: /dev/mmcblk0p7
    Label:  userfs
    Image:  st-image-userfs-openstlinux-weston-stm32mp1.ext4

2. How to populate each partition
---------------------------------
- Populate partition fsbl1 (/dev/mmcblk0p1)
    dd if=tf-a-stm32mp157c-ev1-trusted.stm32 of=/dev/mmcblk0p1 bs=1M conv=fdatasync

- Populate partition fsbl2 (/dev/mmcblk0p2)
    dd if=tf-a-stm32mp157c-ev1-trusted.stm32 of=/dev/mmcblk0p2 bs=1M conv=fdatasync

- Populate partition ssbl (/dev/mmcblk0p3)
    dd if=u-boot-stm32mp157c-ev1-trusted.stm32 of=/dev/mmcblk0p3 bs=1M conv=fdatasync

- Populate partition bootfs (/dev/mmcblk0p4)
    dd if=st-image-bootfs-openstlinux-weston-stm32mp1.ext4 of=/dev/mmcblk0p4 bs=1M conv=fdatasync

- Populate partition vendorfs (/dev/mmcblk0p5)
    dd if=st-image-vendorfs-openstlinux-weston-stm32mp1.ext4 of=/dev/mmcblk0p5 bs=1M conv=fdatasync

- Populate partition rootfs (/dev/mmcblk0p6)
    dd if=st-image-weston-openstlinux-weston-stm32mp1.ext4 of=/dev/mmcblk0p6 bs=1M conv=fdatasync

- Populate partition userfs (/dev/mmcblk0p7)
    dd if=st-image-userfs-openstlinux-weston-stm32mp1.ext4 of=/dev/mmcblk0p7 bs=1M conv=fdatasync

3. How to update the kernel/devicetree
--------------------------------------
The kernel and devicetree are present on "bootfs" partition.
To change kernel and devicetree, you can copy the file on this partition:
- plug SDCARD on your PC
- copy kernel uImage on SDCARD
   sudo cp uImage /media/$USER/bootfs/
- copy devicetree uImage on SDCARD
   sudo cp stm32mp1*.dtb /media/$USER/bootfs/
- umount partitions of SDCARD
   sudo umount /media/$USER/bootfs/
   (dont't forget to umount the other partitions of SDCARD:
   sudo umount `lsblk --list | grep mmcblk0 | grep part | gawk '{ print $7 }' | tr '\n' ' '`
   )</pre>
Line 139: Line 139:
 
{{PC$}} cd build-openstlinuxweston-stm32mp1/tmp-glibc/deploy/images/stm32mp1/scripts/
 
{{PC$}} cd build-openstlinuxweston-stm32mp1/tmp-glibc/deploy/images/stm32mp1/scripts/
   
{{PC$}} sudo dd if=../flashlayout_st-image-weston_FlashLayout_sdcard_stm32mp157c-ev1-trusted.raw of=/dev/mmcblk0 bs=8M conv=fdatasync
+
{{PC$}} sudo dd if=../flashlayout_st-image-weston_FlashLayout_sdcard_stm32mp157c-ev1-trusted.raw of=/dev/mmcblk0 bs=8M conv=fdatasync status=progress
   
 
The dd command takes few minutes (depending mainly of your rootfs size)
 
The dd command takes few minutes (depending mainly of your rootfs size)

Attachments

Discussions