4.1.8. How to flash eMMC device and boot from UDA partition
4.1.8.1. Overview
Requires a bootable SD card with linux Kernel images. Boot the target EVM to linux prompt and check for mmc devices
root@j7200-evm:~# lsblk | grep mmc mmcblk0 179:0 0 14.8G 0 disk |-mmcblk0p1 179:1 0 128M 0 part /run/media/boot-mmcblk0p1 `-mmcblk0p2 179:2 0 14.7G 0 part /run/media/root-mmcblk0p2 mmcblk0boot0 179:32 0 31.5M 1 disk mmcblk0boot1 179:64 0 31.5M 1 disk mmcblk1 179:96 0 29.7G 0 disk |-mmcblk1p1 179:97 0 128M 0 part /run/media/boot-mmcblk1p1 `-mmcblk1p2 179:98 0 8.5G 0 part /
Here, SD card is mmcblk1 and eMMC (UDA partition) is mmcblk0. SD card rootfs partition (mmcblk1p2) is mounted at root.
To flash eMMC using a partitioned wic image from the SDK, jump to Flash eMMC device using a disk image
To flash eMMC manually, jump to Manually flash eMMC device
To Boot the board from a flashed eMMC device, jump to Boot through UDA partition of emmc device
4.1.8.2. Flash eMMC device using a disk image
Copy the .wic formatted disk image from the SDK installer to target filesystem. Then the eMMC device can be flashed using following commands
root@j7200-evm:~# ls
tisdk-base-image-j7200-evm.rootfs.wic.xz
root@j7200-evm:~# xz -d -k tisdk-base-image-j7200-evm.rootfs.wic.xz
root@j7200-evm:~# ls
tisdk-base-image-j7200-evm.rootfs.wic tisdk-base-image-j7200-evm.rootfs.wic.xz
root@j7200-evm:~# umount /dev/mmcblk0*
root@j7200-evm:~# dd if=tisdk-base-image-j7200-evm.rootfs.wic of=/dev/mmcblk0
root@j7200-evm:~#
To Boot the board from a flashed eMMC device, jump to Boot through UDA partition of emmc device
4.1.8.3. Manually flash eMMC device
4.1.8.3.1. Partition and format eMMC device
Following commands will partition the eMMC device from linux using fdisk, mkfs utilities:
root@j7200-evm:~# umount /dev/mmcblk0*
root@j7200-evm:~# dd if=/dev/zero of=/dev/mmcblk0 bs=1024 count=1024
root@j7200-evm:~# fdisk /dev/mmcblk0
Welcome to fdisk (util-linux 2.39.3).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table.
Created a new DOS (MBR) disklabel with disk identifier 0x85204c5d.
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-31080447, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-31080447, default 31080447): +128M
Created a new partition 1 of type 'Linux' and of size 128 MiB.
Partition #1 contains a vfat signature.
Do you want to remove the signature? [Y]es/[N]o: Y
The signature will be removed by a write command.
Command (m for help): n
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2): 2
First sector (264192-31080447, default 264192):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (264192-31080447, default 31080447):
Created a new partition 2 of type 'Linux' and of size 14.7 GiB.
Partition #2 contains a ext4 signature.
Do you want to remove the signature? [Y]es/[N]o: Y
The signature will be removed by a write command.
Command (m for help): t
Partition number (1,2, default 2): 1
Hex code or alias (type L to list all): c
Changed type of partition 'Linux' to 'W95 FAT32 (LBA)'.
Command (m for help): a
Partition number (1,2, default 2): 1
The bootable flag on partition 1 is enabled now.
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
root@j7200-evm:~#
root@j7200-evm:~# umount /dev/mmcblk0p*
root@j7200-evm:~#
root@j7200-evm:~# mkfs.vfat -F 32 -n "boot" /dev/mmcblk0p1
mkfs.fat 4.2 (2021-01-31)
mkfs.fat: Warning: lowercase labels might not work properly on some systems
root@j7200-evm:~#
root@j7200-evm:~# mkfs.ext4 -L "root" /dev/mmcblk0p2
mke2fs 1.47.0 (5-Feb-2023)
Discarding device blocks: done
Creating filesystem with 3852032 4k blocks and 964768 inodes
Filesystem UUID: 877458c6-bf40-46dd-87a1-062a948bc138
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
root@j7200-evm:~#
4.1.8.3.2. Populate eMMC device
Boot partition
Populate Boot partition on eMMC device with a copy of SD card Boot partition.
root@j7200-evm:~# umount /run/media/* root@j7200-evm:~# mkdir /mnt/sd-boot /mnt/emmc-boot root@j7200-evm:~# mount /dev/mmcblk1p1 /mnt/sd-boot root@j7200-evm:~# mount /dev/mmcblk0p1 /mnt/emmc-boot root@j7200-evm:~# cp -r /mnt/sd-boot/* /mnt/emmc-boot root@j7200-evm:~# sync root@j7200-evm:~# umount /mnt/*
Alternatively, the boot files can be copied from any source manually.
Rootfs partition
Populate rootfs partition on eMMC device with a copy of SD card rootfs partition.
root@j7200-evm:~# umount /run/media/* root@j7200-evm:~# mkdir /mnt/sd-rootfs /mnt/emmc-rootfs root@j7200-evm:~# mount /dev/mmcblk1p2 /mnt/sd-rootfs root@j7200-evm:~# mount /dev/mmcblk0p2 /mnt/emmc-rootfs root@j7200-evm:~# cp -r /mnt/sd-rootfs/* /mnt/emmc-rootfs root@j7200-evm:~# sync root@j7200-evm:~# umount /mnt/*
Alternatively, the rootfs can be flashed from a tarball:
root@j7200-evm:~# ls tisdk-base-image-j7200-evm.rootfs.tar.xz root@j7200-evm:~# umount /run/media/* root@j7200-evm:~# mkdir /mnt/emmc-rootfs root@j7200-evm:~# mount /dev/mmcblk0p2 /mnt/emmc-rootfs root@j7200-evm:~# tar -xf tisdk-base-image-j7200-evm.rootfs.tar.xz -C /mnt/emmc-rootfs root@j7200-evm:~# sync root@j7200-evm:~# umount /mnt/emmc-rootfs
To Boot the board from a flashed eMMC device, jump to Boot through UDA partition of emmc device
4.1.8.4. Boot through UDA partition of emmc device
Following are the steps to boot the target through eMMC device. For more information refer to Booting Linux from SD card or eMMC
To give the ROM access to the boot partition, the following commands must be run from the u-boot prompt for the first time. To boot from UDA partition of eMMC:
=> mmc partconf 0 1 7 1 => mmc bootbus 0 2 0 0
Now we can reboot the board with eMMC bootmode selected.
Even with eMMC bootmode selected u-boot defaults to use SD card (mmcdev=1) for Kernel and filesystem. To boot kernel and filesystem from eMMC, use the following commands at the u-boot prompt:
=> setenv mmcdev 0 => setenv bootpart 0:2 => boot