<Spec>

  • Ubuntu version : ubuntu-18.04.5-desktop-amd64
  • stm32mpu Major ecosystem releases version : v3.0.0

현재 부팅 가능한 microSD card까지 만들어 보았다. eMMC로 부팅하도록 하겠다.

 

먼저 보드의 부트 스위치 정보를 알아본다.

https://wiki.st.com/stm32mpu/wiki/STM32MP157x-EV1_-_hardware_description#Boot_related_switches

 



eMMC

microSD card

 

1. eMMC partitions 정보 확인

SD card 부팅을 시작으로 한다. 아래와 같은 명령어로 확인할 수 있다.

$ fdisk -l | grep mmcblk*
$ lsblk
$ cat /proc/partitions

eMMC는 mmcblk1이다.

 

2. Remove Partitions and format

$ partx -d /dev/mmcblk1		# remove partitions
$ sgdisk -o /dev/mmcblk1	# format

 

3. Create and Resize Partitions

$ sgdisk --resize-table=128 -a 1 \
        -n 1:1058:9249 -c 1:fip    \
        -n 2:9250:140321 -c 2:boot  \
        -n 3:140322:173089 -c 3:vendorfs  \
        -n 4:173090:1700897 -c 4:rootfs  \
        -n 5:1700898:3145694 -c 5:userfs  \
        -p /dev/mmcblk1

partition3 name은 'fip'로 해야만 한다. (first boot에서 fip name을 찾음 (v3.0.0으로 되면서 ssbl -> fip로 변경됨)

eMMC Register에 PARTITION_CONFIG가 setting 되어 있어서 first bootloader는 mmcblk1bootX를 사용한다.

 

$	# disable the forced read-only access
$ echo 0 > /sys/class/block/mmcblk1boot0/force_ro
$	# copy
$ dd if=USB/tf-a-stm32mp157f-ev1-emmc.stm32 of=/dev/mmcblk1boot0 conv=fdatasync
$	# mmc bootpart enable <boot0 OR boot1?> <mmcblk1pX partition number> /dev/mmcblk1
$ mmc bootpart enable 1 1 /dev/mmcblk1

microSD card에서 first bootloader가 partition1, 2에 저장하여 select하여 사용하는 것과 같이 mmcblk1boot0, mmcblk1boot1에 copy후 select 하여 사용한다. 그리고 그다음은 partition1(fip)로 넘어가도록 설정한다.

 

4. copy to eMMC

$ dd if=USB/fip-stm32mp157f-ev1-trusted.bin of=/dev/mmcblk1p1
$ dd if=USB/st-image-bootfs-openstlinux-weston-stm32mp1-20210708094827.bootfs.ext4 of=/dev/mmcblk1p2 conv=fdatasync  bs=512
$ dd if=USB/st-image-vendorfs-openstlinux-weston-stm32mp1-20210708094827.vendorfs.ext4 of=/dev/mmcblk1p3 conv=fdatasync  bs=512
$ dd if=USB/st-example-image-qtwayland-openstlinux-weston-stm32mp1-20210708094827.rootfs.ext4 of=/dev/mmcblk1p4 conv=fdatasync  bs=512
$ dd if=USB/st-image-userfs-openstlinux-weston-stm32mp1-20210708094827.userfs.ext4 of=/dev/mmcblk1p5 conv=fdatasync  bs=512

yocto image를 사용하여 eMMC 부팅하도록 해보겠다.

USB에 필요한 image를 넣어 target board에 mount하여 파일을 copy한다.

 

5. eMMC Booting

eMMC 부트 스위치를 변경하고 부팅한다. 

먼저 부팅하면 rootfs나 bootfs partition이 제대로 설정되어있지 않다. 먼저 수동으로 부팅되는지 확인한다.

STM32> setenv bootargs root=/dev/mmcblk1p4 rootwait rw console=ttySTM0,115200
STM32> ext4load mmc 1:2 0xc2000000 uImage
STM32> ext4load mmc 1:2 0xc4000000 stm32mp157f-ev1.dtb
STM32> bootm 0xc2000000 - 0xc4000000

 

6. uboot 수정

kernel image가 있는 partition을 못 찾고 있다. mmc 1:2를 scanning 하도록 수정해준다.

STM32> setenv distro_bootpart 2
STM32> saveenv

 

 

rootfs를 지정해주거나 PARTUUID를 수정해준다.

PC> vi /media/USB/bootfs/mmc1_extlinux/stm32mp157f-ev1_extlinux.conf
-APPEND root=PARTUUID=491f6117-415d-4f53-88c9-6e0de54deac6 rootwait rw console=ttySTM0,115200
+APPEND setenv bootargs root=/dev/mmcblk1p6 rootwait rw console=ttySTM0,115200

$ # OR blkid 명령어로 PARTUUID확인하여 바꿔주면 된다.

 

+ Recent posts