2026년 3월 10일 화요일

Embedded Linux Programming with STM32MP257F-DK board(Episode III)

거의 6년만에 STM32MP 보드를 다시 하나 입수했다(이번에는 STM32MP257F-DK 보드다). 이번 시간 부터는 앞으로 몇차례에 걸쳐서, STM32MP257F-DK 보드 기반 embedded linux와 관련한 다양한 주제를 다뤄 보고자 한다. 이번이 그 세번째 시간이다. 😎

 
The 3rd episode

목차
7. Linux Kernel and Bootloader 작업하기
8. Buildroot와 Device Tree & Device Drivers
9. Cortex-M33 CPU#1 - STM32CubeIDE 기반 Application 돌려 보기
10. Cortex-M33 CPU#2 - Zephyr RTOS Application 돌려보기
11. Application 돌려 보기 - WireGuard Rust, Qt6 Application
References

KeywordsSTM32MP257F-DK, booting flow, u-boot, linux kernel, device tree, yocto project, Buildroot, Rust kernel module, STM32CubeIDE, Zephyr RTOS, PySide6

Embedded linux(echosystem)는 점점 더 복잡해져 가고 있다. 이중 삼중의 bootloader(거기에 TrustZone까지), device tree로 무장한 linux kernel, kernel에 합류한 Rust, build system의 대세 Yocto project ! 어느 하나 무시할 수 없는 것들 뿐이다. 그 중에서도 이번 시간에는 Yocto Project환경에서 bootloader와 kernel을 개발하는 내용을 다뤄 보기로 하자. 😋

bootloader가 닦아 놓은 길 위에서 linux kernel이 굴러간다~ K5G fighting 졌잘싸 !

7. Linux Kernel and Bootloader 작업하기
이번 장에서는 STM32MP257F-DK 보드의 Cortex-A35 CPU에 Linux kernel을 올리기 위해 yocto project devtool & bitbake를 사용하는 방법에 관하여 소개해 보고자 한다. 😋



7.1 devtool로 kernel build 하기
먼저, 이절에서는 devtool을 사용하여 linux kernel을 build(kernel config 조정 포함)하는 방법부터 확인해 보도록 하자.

DISTRO=openstlinux-weston MACHINE=stm32mp2 source layers/meta-st/scripts/envsetup.sh
📌 시작할 때는 항상 envsetup.sh script를 실행해 주어야 한다는 것을 잊지 말도록 하자.

Kernel에 대한 recipe명은 virtual/kernel으로 하면 되지만, STM32MP257F-DK board에서 사용하는 구체적인 명칭을 확인하고 싶다면, 아래와 같이 검색을 해보면 된다.

$ devtool search linux-*
...
gobject-introspection  Middleware layer between GObject-using C libraries and language bindings
linux-stm32mp         Linux STM32MP Kernel
systemtap             Script-directed dynamic tracing and performance analysis tool for Linux
...

자, 이제 linux-stm32mp라는 kernel recipe 명을 찾았으니, 다음으로 할 일은 devtool modify 명령을 사용하여 linux kernel code를 workspace로 복사(정확히는 git clone을 함)해 오는 것이다.

devtool modify -x linux-stm32mp
  -> 이렇게 하면, workspace/sources/linux-stm32mp 아래에 kernel source code가 복사된다.
📌 devtool modify 명령은 자동으로 kernel_configme 처리(여러개로 분할된 config를 하나로 모아 적용하는 option)를 자동으로 해준다.

다음으로 kernel menuconfig 창을 띄워, 원하는 대로 config를 조정해 보도록 하자.

devtool menuconfig linux-stm32mp
  -> 여기에서는 테스트를 위해, WireGuard를 Module 형태로 enable 시켜 보기로 한다.

[그림 7.1.1] kernel menuconfig

[그림 7.1.2] WireGuard Module enable 하기

이렇게 설정 변경한 내용은 workspace/sources/linux-stm32mp/oe-local-files/devtool-fragment.cfg 파일에 저장된다.

[그림 7.1.3] devtool-fragment.cfg 파일

또한, 아래와 같이 .config.new file도 만들어 진다.

$ cd workspace/sources/linux-stm32mp
$ ls -l .config.*
lrwxrwxrwx 1 chyi chyi    172  3월  5 14:46 .config.new -> /mnt/hdd/workspace/ST/STM32MP257K_DK/Distribution-Package/build-openstlinuxweston-stm32mp2/tmp-glibc/work/stm32mp2-ostl-linux/linux-stm32mp/6.6.116-stm32mp-r3/build/.config
📌 symbolic link된 path를 보니, 결국은 tmp-glibc/ 아래의 원래 build 위치로 연결되는 것을 알 수 있다.

이 상태에서, kernel build를 해 보도록 한다.

devtool build linux-stm32mp
  -> sources/linux-stm32mp/oe-workdir/build 디렉토리 아래에서 kernel build를 진행한다.
📌 oe-workdir은 아래와 같이 tmp-glibc 아래의 디렉토리로 symbolic link되어 있다. 이는 devtool을 사용해서 kernel을 build하는 것이나, bitbake를 직접 사용해서 build하는 것이나, 모두 동일한 위치에서 build되는 것을 말해 준다.

oe-workdir -> /mnt/hdd/workspace/ST/STM32MP257K_DK/Distribution-Package/build-openstlinuxweston-stm32mp2/tmp-glibc/work/stm32mp2-ostl-linux/linux-stm32mp/6.6.116-stm32mp-r3

(앞단계의 과정을 거쳐) Kernel build 결과물이 설치되는 위치는 아래와 같다.

$ cd tmp-glibc/deploy/images/stm32mp2/kernel
tree .
.
├── Image -> Image--6.6.116-stm32mp-r3-r0.4-stm32mp2-20260305055611.bin
├── Image--6.6.116-stm32mp-r3-r0.4-stm32mp2-20260305055611.bin
├── Image-stm32mp2.bin -> Image--6.6.116-stm32mp-r3-r0.4-stm32mp2-20260305055611.bin
├── Image.gz -> Image.gz--6.6.116-stm32mp-r3-r0.4-stm32mp2-20260305055611.bin
├── Image.gz--6.6.116-stm32mp-r3-r0.4-stm32mp2-20260305055611.bin
├── Image.gz-stm32mp2.bin -> Image.gz--6.6.116-stm32mp-r3-r0.4-stm32mp2-20260305055611.bin
├── config-6.6.116-gf05ce960395e
├── modules--6.6.116-stm32mp-r3-r0.4-stm32mp2-20260305055611.tgz
├── modules-stm32mp2.tgz -> modules--6.6.116-stm32mp-r3-r0.4-stm32mp2-20260305055611.tgz
├── modules-stripped--6.6.116-stm32mp-r3-r0.4-stm32mp2-20260305055611.tgz

├── modules-stripped-stm32mp2.tgz -> modules-stripped--6.6.116-stm32mp-r3-r0.4-stm32mp2-20260305055611.tgz
├── stm32mp215f-dk--6.6.116-stm32mp-r3-r0.4-stm32mp2-20260305055611.dtb -> stm32mp215f-dk.dtb
├── stm32mp215f-dk-ca35tdcid-ostl--6.6.116-stm32mp-r3-r0.4-stm32mp2-20260305055611.dtb -> stm32mp215f-dk-ca35tdcid-ostl.dtb
├── stm32mp215f-dk-ca35tdcid-ostl-m33-examples--6.6.116-stm32mp-r3-r0.4-stm32mp2-20260305055611.dtb -> stm32mp215f-dk-ca35tdcid-ostl-m33-examples.dtb
├── stm32mp215f-dk-ca35tdcid-ostl-m33-examples-stm32mp2.dtb -> stm32mp215f-dk-ca35tdcid-ostl-m33-examples.dtb
├── stm32mp215f-dk-ca35tdcid-ostl-m33-examples.dtb
├── stm32mp215f-dk-ca35tdcid-ostl-stm32mp2.dtb -> stm32mp215f-dk-ca35tdcid-ostl.dtb
├── stm32mp215f-dk-ca35tdcid-ostl.dtb
├── stm32mp215f-dk-psci-osi--6.6.116-stm32mp-r3-r0.4-stm32mp2-20260305055611.dtb -> stm32mp215f-dk-psci-osi.dtb
├── stm32mp215f-dk-psci-osi-stm32mp2.dtb -> stm32mp215f-dk-psci-osi.dtb
├── stm32mp215f-dk-psci-osi.dtb
├── stm32mp215f-dk-stm32mp2.dtb -> stm32mp215f-dk.dtb
├── stm32mp215f-dk.dtb
├── stm32mp235f-dk--6.6.116-stm32mp-r3-r0.4-stm32mp2-20260305055611.dtb -> stm32mp235f-dk.dtb
├── stm32mp235f-dk-stm32mp2.dtb -> stm32mp235f-dk.dtb
├── stm32mp235f-dk.dtb
├── stm32mp257f-dk--6.6.116-stm32mp-r3-r0.4-stm32mp2-20260305055611.dtb -> stm32mp257f-dk.dtb
├── stm32mp257f-dk-ca35tdcid-ostl--6.6.116-stm32mp-r3-r0.4-stm32mp2-20260305055611.dtb -> stm32mp257f-dk-ca35tdcid-ostl.dtb
├── stm32mp257f-dk-ca35tdcid-ostl-m33-examples--6.6.116-stm32mp-r3-r0.4-stm32mp2-20260305055611.dtb -> stm32mp257f-dk-ca35tdcid-ostl-m33-examples.dtb
├── stm32mp257f-dk-ca35tdcid-ostl-m33-examples-stm32mp2.dtb -> stm32mp257f-dk-ca35tdcid-ostl-m33-examples.dtb
├── stm32mp257f-dk-ca35tdcid-ostl-m33-examples.dtb
├── stm32mp257f-dk-ca35tdcid-ostl-stm32mp2.dtb -> stm32mp257f-dk-ca35tdcid-ostl.dtb
├── stm32mp257f-dk-ca35tdcid-ostl.dtb
├── stm32mp257f-dk-stm32mp2.dtb -> stm32mp257f-dk.dtb
├── stm32mp257f-dk.dtb
├── stm32mp257f-ev1--6.6.116-stm32mp-r3-r0.4-stm32mp2-20260305055611.dtb -> stm32mp257f-ev1.dtb
├── stm32mp257f-ev1-ca35tdcid-ostl--6.6.116-stm32mp-r3-r0.4-stm32mp2-20260305055611.dtb -> stm32mp257f-ev1-ca35tdcid-ostl.dtb
├── stm32mp257f-ev1-ca35tdcid-ostl-m33-examples--6.6.116-stm32mp-r3-r0.4-stm32mp2-20260305055611.dtb -> stm32mp257f-ev1-ca35tdcid-ostl-m33-examples.dtb
├── stm32mp257f-ev1-ca35tdcid-ostl-m33-examples-sram--6.6.116-stm32mp-r3-r0.4-stm32mp2-20260305055611.dtb -> stm32mp257f-ev1-ca35tdcid-ostl-m33-examples-sram.dtb
├── stm32mp257f-ev1-ca35tdcid-ostl-m33-examples-sram-stm32mp2.dtb -> stm32mp257f-ev1-ca35tdcid-ostl-m33-examples-sram.dtb
├── stm32mp257f-ev1-ca35tdcid-ostl-m33-examples-sram.dtb
├── stm32mp257f-ev1-ca35tdcid-ostl-m33-examples-stm32mp2.dtb -> stm32mp257f-ev1-ca35tdcid-ostl-m33-examples.dtb
├── stm32mp257f-ev1-ca35tdcid-ostl-m33-examples.dtb
├── stm32mp257f-ev1-ca35tdcid-ostl-stm32mp2.dtb -> stm32mp257f-ev1-ca35tdcid-ostl.dtb
├── stm32mp257f-ev1-ca35tdcid-ostl.dtb
├── stm32mp257f-ev1-psci-osi--6.6.116-stm32mp-r3-r0.4-stm32mp2-20260305055611.dtb -> stm32mp257f-ev1-psci-osi.dtb
├── stm32mp257f-ev1-psci-osi-stm32mp2.dtb -> stm32mp257f-ev1-psci-osi.dtb
├── stm32mp257f-ev1-psci-osi.dtb
├── stm32mp257f-ev1-stm32mp2.dtb -> stm32mp257f-ev1.dtb
├── stm32mp257f-ev1.dtb
├── vmlinux -> vmlinux--6.6.116-stm32mp-r3-r0.4-stm32mp2-20260305055611.bin
├── vmlinux--6.6.116-stm32mp-r3-r0.4-stm32mp2-20260305055611.bin
└── vmlinux-stm32mp2.bin -> vmlinux--6.6.116-stm32mp-r3-r0.4-stm32mp2-20260305055611.bin

0 directories, 53 files

---------------------------------------------------------------------------

자, 이제 target board에 앞에서 생성한 kernel image와 modules 파일을 올려 볼 차례이다.

[그림 7.1.4] Target board - STM32MP257F-DK

우선, 다음과 같이 (target board의) ip 주소를 설정한 후,

[그림 7.1.5] Target board - ifconfig -a 명령 실행 모습

scp를 사용하여 kernel image 파일과 kernel module 묶음을 target board로 복사하도록 한다.

scp ./Image.gz root@192.168.8.227:~/workspace
scp ./modules-stripped-stm32mp2.tgz root@192.168.8.227:~/workspace

<Target Board>
Target board로 복사한 내용을 system에 반영한 후, 재부팅하도록 하자.
$ cd workspace
cp -f ./Image.gz /boot
tar xvzf ./modules-stripped-stm32mp2.tgz -C /
$ sync; sync; reboot

<After reboot>
depmod -a
 -> depmod는 kernel module에 대한 의존성을 분석한 후, /lib/modules/6.6.116-xxx/modules.dep 파일을 새롭게 갱신시킨다.
 -> modprobe 명령은 modules.dep 파일의 내용을 보고, 모듈의 위치를 파악하게 된다.
 -> 이 명령 실행 후에는 반드시 reboot을 해 주도록 하자.

modprobe wireguard
 -> OK, wireguard kernel module이 제대로 올라온다.

[그림 7.1.6] lsmod wireguard

<여기서 잠깐!>
kernel menuconfig로 변경한 사항을 영구적으로 반영하려면 어떻게 해야 할까 ? 이 방법은 생각보다 좀 절차가 까다롭다. 😂
==========================================================================
$ bitbake -c savedefconfig linux-stm32mp
-> menuconfig한 내용을 저장(.config -> defconfig)한다. 불행히도 devtool에는 이를 한방에 처리하는 option이 제공되지 않는다.
...
Saving defconfig to:
/mnt/hdd/workspace/ST/STM32MP257K_DK/Distribution-Package/build-openstlinuxweston-stm32mp2/tmp-glibc/work/stm32mp2-ostl-linux/linux-stm32mp/6.6.116-stm32mp-r3/build/defconfig
NOTE: Tasks Summary: Attempted 555 tasks of which 547 didn't need to be rerun and all succeeded.
NOTE: Writing buildhistory
NOTE: Writing buildhistory took: 2 seconds


이전 posting 6장에서 만든 meta-my-custo-layer 아래에 kernel config를 저장하기 위해, 아래와 같은 디렉토리를 만든다.
$ cd ../layers/meta-st/meta-my-custo-layer
$ mkdir -p recipes-kernel/linux/linux-stm32mp/
$ cd recipes-kernel/linux/linux-stm32mp/

이어서, 아래의 내용으로 구성된 bbappend 파일을 하나 만든다.

$ vi linux-stm32mp_%.bbappend
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
SRC_URI += "file://fragment.cfg"
~
📌 %.bbapend는 linux-stm32mp의 모든 버젼에 적용된다는 의미이다.

마지막으로 savedefconfig하여 생성한 defconfig 파일을 meta-my-custo-layer/recipes-kernel/linux/linux-stm32mp/fragment.cfg 파일로 복사한다.

$ cd build-openstlinuxweston-stm32mp2/tmp-glibc/work/stm32mp2-ostl-linux/linux-stm32mp/6.6.116-stm32mp-r3/build
$ cp defconfig /mnt/hdd/workspace/ST/STM32MP257K_DK/Distribution-Package/layers/meta-st/meta-my-custo-layer/recipes-kernel/linux/linux-stm32mp/fragment.cfg

자, 이제 kernel config 교체 작업이 모두 끝났으니, 새로운 kernel이 포함된 image를 만들어 테스트해 보면 된다. 😀

$ bitbake my-custom-image
==========================================================================

7.2 device tree 변경하기
이번 절에서는 GPIO LED 관련 device tree를 수정하고, devtool을 사용하여 변경사항을 project에 반영하는 과정을 살펴 보기로 하자.

먼저, stm32mp257f-dk 보드에는 아래와 같이 4개의 GPIO LED가 존재한다. 

[그림 7.2.1] stm32mp257f-dk schematics 중 LED 관련 부분 발췌 [출처 - 참고문헌 5]

여기서는 (간단한 device tree 변경 시험을 위해) LED 관련 코드를 아래와 같이 수정해 보도록 하겠다.

blue LED(LED1, PH7) off -> green LED(LED8, PH5) on

우선 board 상에서 LED1과 LED8이 어느 위치에 있는지 확인해 보도록 한다.

[그림 7.2.2] stm32mp257f-dk 보드 top view 중 LED 관련 부분 발췌 [출처 - 참고문헌 2]

또한, LED1과 LED8의 GPIO pin 번호 등과 관련한 정보를 파악해 보도록 하자.

[그림 7.2.3] stm32mp257f-dk 보드 LED pinout [출처 - 참고문헌 2]

[그림 7.2.4] stm32mp257f-dk 보드 alternate functions table(Port H)[출처 - 참고문헌 4]

마지막으로 확인해 볼 사항은 device tree에 기술되어 있는 LED1(blue led) 관련 부분이다. 이 부분을 참조하여 led-green에 해당하는 새로운 node를 추가해 보도록 하자.

[그림 7.2.5] stm32mp257f-dk.dts 내용 중 gpio-leds node 부분 발췌

참고로, 위의 gpio-leds와 관련한 device drivers는 linux-stm32mp/drivers/leds/leds-gpio.c이다.

[그림 7.2.6] gpio-leds 관련 device driver code

참고로, device tree 변경 전에 LED 상태를 확인해 보면, 다음과 같이 blue LED가 깜빡이고 있는 것을 알 수가 있다(사진 still image라 구분이 어렵기 하지만... 😂).

[그림 7.2.7] LED1(blue led)가 깜빡이는 모습

자, 이제 stm32mp257f-dk.dts 파일을 아래와 같이 직접 수정하도록 하자.
--------------------------------------------------------------------
    gpio-leds {
       compatible = "gpio-leds";

       /*
       led-blue {
           function = LED_FUNCTION_HEARTBEAT;
           color = <LED_COLOR_ID_BLUE>;
           gpios = <&gpioh 7 GPIO_ACTIVE_HIGH>;
           linux,default-trigger = "heartbeat";
           default-state = "off";
       };
       */

       /* added by chunghan.yi@gmail.com, 03/07/2026 */
       led-green {
           function = LED_FUNCTION_HEARTBEAT;
           color = <LED_COLOR_ID_GREEN>;
           gpios = <&gpioh 5 GPIO_ACTIVE_HIGH>;
           linux,default-trigger = "heartbeat";
           default-state = "on";
           status = "okay";
       };
   };
--------------------------------------------------------------------

이후, devtool build 명령 대신, bitbake 명령으로 kernel compile 이후 절차를 진행하도록 하자.

$ bitbake -C compile linux-stm32mp
linux-stm32mp-6.6.116-stm32mp-r3-r0 do_compile
linux-stm32mp-6.6.116-stm32mp-r3-r0 do_compile_kernelmodules
...
📌 이 경우 -C는 대문자인데, 대문자를 사용하게 되면, 주어진 task(여기서는 compile) 이후의 작업이 한번에 처리하게 된다.

다음으로, 결과 dtb 파일을 target board에 올려 보도록 하자.

$ cd build-openstlinuxweston-stm32mp2/tmp-glibc/deploy/images/stm32mp2/kernel
$ scp ./stm32mp257f-dk.dtb root@192.168.8.227:~/workspace/03072026

<Target board>
root@stm32mp2-e3-d2-e5:~/workspace/03072026# cp -f ./stm32mp257f-dk.dtb /boot/stm32mp257f-dk.dtb
root@stm32mp2-e3-d2-e5:~/workspace/03072026# sync
root@stm32mp2-e3-d2-e5:~/workspace/03072026# reboot

(부팅 후) OK, 이제 blue LED는 꺼지고, green LED가 깜빡이는 것을 확인할 수가 있다.

[그림 7.2.8] LED8(green led)이 깜빡이는 모습

일단, 여기까지 작업한 내용을 기존 코드에 반영하려면 다음과 같이 하면 된다.

$ git add arch/arm64/boot/dts/st/stm32mp257f-dk.dts
$ git commit -m "Changed gpio-leds node"
[devtool ac0c8426b] Changed gpio-leds node
 1 file changed, 10 insertions(+)
📌 git으로 commit하는 것을 까먹지 말자.

devtool update-recipe linux-stm32mp -a ../layers/meta-st/meta-my-custo-layer
  -> 지금까지 사용자가 수정한 내용을 반영한다(patch를 만든다).
NOTE: Starting bitbake server...
NOTE: Started PRServer with DBfile: /mnt/hdd/workspace/ST/STM32MP257K_DK/Distribution-Package/build-openst
linuxweston-stm32mp2/cache/prserv.sqlite3, Address: 127.0.0.1:39879, PID: 26076
NOTE: Started PRServer with DBfile: /mnt/hdd/workspace/ST/STM32MP257K_DK/Distribution-Package/build-openst
linuxweston-stm32mp2/cache/prserv.sqlite3, Address: 127.0.0.1:46275, PID: 26108
Loading cache: 100% |######################################################################| Time: 0:00:01
Loaded 5014 entries from dependency cache.
Parsing recipes: 100% |####################################################################| Time: 0:00:01
Parsing of 3050 .bb files complete (3046 cached, 4 parsed). 5017 targets, 615 skipped, 0 masked, 0 errors.
INFO: Handling main branch (devtool)...
NOTE: Writing append file /mnt/hdd/workspace/ST/STM32MP257K_DK/Distribution-Package/layers/meta-st/meta-my
-custo-layer/recipes-kernel/linux/linux-stm32mp_%.bbappend
NOTE: Copying 0001-Changed-gpio-leds-node.patch to /mnt/hdd/workspace/ST/STM32MP257K_DK/Distribution-Package/layers/meta-st/meta-my-custo-layer/recipes-kernel/linux/linux-stm32mp/0001-Changed-gpio-leds-node.patch
...

위의 명령 실행 결과, 추가된 내용을 확인해 보면 다음과 같다.

$ cd layers/meta-st/meta-my-custo-layer/recipes-kernel/linux
$ ls -l
drwxrwxr-x 2 chyi chyi 4096  3월  9 13:59 linux-stm32mp
-rw-rw-r-- 1 chyi chyi  103  3월  9 13:56 linux-stm32mp_%.bbappend

$ vi linux-stm32mp_%.bbappend

[그림 7.2.9] linux-stm32mp_%.bbappend file

$ cd linux-stm32mp
$ ls -la
-rw-rw-r-- 1 chyi chyi   928  3월  9 13:56 0001-Changed-gpio-leds-node.patch
-rw-r--r-- 1 chyi chyi 29572  3월  6 13:26 fragment.cfg
-rw-rw-r-- 1 chyi chyi    80  3월  6 13:22 linux-stm32mp_%.bbappend

devtool reset linux-stm32mp
  -> 지금까지 workspace 상에서 작업한 모든 내용(원본 source 포함)을 삭제한다.
📌 단, 이 명령을 자주 사용할 필요는 없으며, 필요시 사용하면 된다.

참고로, devtool finish linux-stm32mp /path/to/custom/layer 명령을 사용하면, 앞서 두개의 명령(update-recipe, reset)을 연이어 수행하는 것과 동일하다.

$ devtool finish linux-stm32mp ../layers/meta-st/meta-my-custo-layer
-------------------------------------------------------------------------

여기까지 DTS 수정 작업이 모두 끝났으니, 이를 확인하고자 한다면 아래와 같이 새로운 kernel이 포함된 image를 만들어 돌려 보면 된다.

$ bitbake my-custom-image

7.3 kernel module 추가하기
이번에는 devtool을 사용하여 out-of-tree kernel module을 추가하는 시험을 진행해 보기로 하자.

7.2절에서 devtool reset(or finish) 명령을 실행했으므로, devtool modify를 시도하여 kernel code를 workspace로 가져오는 부분부터 다시 하도록 한다.

devtool modify -x linux-stm32mp

$ cd workspace/sources/linux-stm32mp
$ git branch
* devtool
  devtool-no-overrides
  devtool-override-aarch32
  devtool-override-aarch64
  devtool-override-arm
  master
----------------------------------

devtool menuconfig linux-stm32mp

devtool build linux-stm32mp
---------------------------------------------------------------------------

그럼, 본격적으로 out-of-tree kernel module 추가 시험을 진행해 보도록 하자.

시험할 내용은 user button(예: USER2)을 하나 눌렀을 경우, interrupt가 발생하고 이 사실을 console로 출력하는 간단한 kernel module(소위 GPIO interrupt driver) 추가 작업이 되겠다.

먼저, 회로도와 PCB 상으로 user button이 어떻게 구성되어 있는지를 확인해 본다.

[그림 7.3.1] stm32mp257f-dk board 회로도 - Button 관련 부분 발췌 [출처 - 참고문헌 5]


[그림 7.3.2] stm32mp257f-dk 보드 top view 중 Button 관련 부분 발췌 [출처 - 참고문헌 2]

다음으로, datasheet를 통해 USER1(PC5, B5)과 USER2 button(PC11, B4)의 GPIO pin 번호 등을 파악해 본다.

[그림 7.3.3] stm32mp257f-dk 보드 User button pinout [출처 - 참고문헌 2]

마지막으로, device tree를 통해 USER1 button과 USER2 button이 어떻게 기술되어 있는지를 확인해 보도록 하자.

[그림 7.3.4] stm32mp257f-dk.dts 내용 중 gpio-keys node 부분 발췌

자, 그럼 아래와 같이 stm32mp257f-dk.dts 파일을 수정해 보도록 하자.
------------------------------------------------------------------------

    gpio-keys {
       compatible = "gpio-keys";

       button-user-1 {
           label = "User-1";
           linux,code = <BTN_1>;
           gpios = <&gpioc 5 GPIO_ACTIVE_HIGH>;
           status = "okay";
       };

/* blocked by chunghan.yi@gmail.com, 03/09/2026 --
       button-user-2 {
           label = "User-2";
           linux,code = <BTN_2>;
           gpios = <&gpioc 11 GPIO_ACTIVE_HIGH>;
           status = "disabled";
       };
*/      
...

   /* added by chunghan.yi@gmail.com, 03/09/2026 -- */
   user-button-2 {
       compatible = "stm32mp257,userbutton2";
       myxxx-gpios = <&gpioc 11 GPIO_ACTIVE_HIGH>;
       interrupt-parent = <&gpioc>;
       interrupts = <11 IRQ_TYPE_EDGE_FALLING>;
       status = "okay";
   };
------------------------------------------------------------------------

이후, 아래 명령으로 kernel compile 이후 절차를 진행하도록 하자.

$ bitbake -C compile linux-stm32mp 

아직 관련 device driver가 준비되지 않았지만, 일단 결과 dtb 파일을 target board에 올려 보도록 하자.

$ cd build-openstlinuxweston-stm32mp2/tmp-glibc/deploy/images/stm32mp2/kernel
scp ./stm32mp257f-dk.dtb root@192.168.8.227:~/workspace/03092026

<Target board>
root@stm32mp2-e3-d2-e5:~/workspace/03092026# cp -f ./stm32mp257f-dk.dtb /boot/stm32mp257f-dk.dtb
root@stm32mp2-e3-d2-e5:~/workspace/03092026# sync
root@stm32mp2-e3-d2-e5:~/workspace/03092026# reboot
----------------------------------------------------------

자, 그럼 이제부터 device driver를 만들어 볼 차례이다.

$ mkdir -p mysources/kernel_modules
$ ls -la
-rw-rw-r-- 1 chyi chyi  487  3월  9 16:53 Makefile
-rw-rw-r-- 1 chyi chyi 3129  3월  9 16:53 stm32mp2_gpiokey.c

$ cd mysources/kernel_modules
$ vi stm32mp2_gpiokey.c

[그림 7.3.5] stm32mp2_gpiokey.c

$ make
$ scp ./stm32mp2_gpiokey.ko root@192.168.8.227:~/workspace/03092026

<Target board>
$ cd ~/workspace/03092026
$ insmod ./stm32mp2_gpiokey.ko
 -> OK, 이 상태에서 USER2 button을 누르면, 아래와 같이 정상적으로 message가 출력된다.

[그림 7.3.6] stm32mp2 gpio interrupt driver 동작 모습

------------------------------------------------------------------
지금까지 작업한 내용을 yocto project에 추가해 보도록 하자.

먼저 devtool add 명령을 사용하여 kernel module 관련 recipe 파일을 생성하도록 한다.

$ devtool add mymodule mysources/kernel_modules/
NOTE: Starting bitbake server...
NOTE: Started PRServer with DBfile: /mnt/hdd/workspace/ST/STM32MP257K_DK/Distribution-Package/build-openstlinuxweston-stm32mp2/cache/prserv.sqlite3,
Address: 127.0.0.1:45281, PID: 833061
NOTE: Starting bitbake server...
NOTE: Started PRServer with DBfile: /mnt/hdd/workspace/ST/STM32MP257K_DK/Distribution-Package/build-openstlinuxweston-stm32mp2/cache/prserv.sqlite3,
Address: 127.0.0.1:37271, PID: 833073
WARNING: Unable to find means of passing kernel path into install makefile - if kernel path is hardcoded you will need to patch the makefile. Note t
hat the variable KERNEL_SRC will be passed in as the kernel source path.
NOTE: Reconnecting to bitbake server...
NOTE: Retrying server connection (#1)... (16:55:18.021363)
NOTE: Reconnecting to bitbake server...
NOTE: Reconnecting to bitbake server...
NOTE: Retrying server connection (#1)... (16:55:18.021363)
NOTE: Retrying server connection (#1)... (16:55:18.021363)
NOTE: Starting bitbake server...
NOTE: Started PRServer with DBfile: /mnt/hdd/workspace/ST/STM32MP257K_DK/Distribution-Package/build-openstlinuxweston-stm32mp2/cache/prserv.sqlite3,
Address: 127.0.0.1:33437, PID: 833084
INFO: Using source tree as build directory since that would be the default for this recipe
INFO: Recipe /mnt/hdd/workspace/ST/STM32MP257K_DK/Distribution-Package/build-openstlinuxweston-stm32mp2/workspace/recipes/mymodule/mymodule.bb has been automatically created; further editing may be required to make it fully functional


$ cd workspace/recipes/mymodule
$ ls -la
-rw-rw-r-- 1 chyi chyi 1426  3월  9 17:02 mymodule.bb

이후, devtool edit-recipe 명령으로  자동 생성된 mymodule recipe file을 편집하도록 한다.

devtool edit-recipe mymodule

[그림 7.3.7] 자동 생성된 mymodule.bb recipe 파일 편집하기(1)

[그림 7.3.8] 자동 생성된 mymodule.bb recipe 파일 편집하기(2)

다음으로 mymodule에 이상이 없는지 build해 보도록 한다.
$ devtool build mymodule

이번에는 scp 대신 deploy-target 명령을 사용하여, kernel module을 target board에 올려 보도록 하자.
$ devtool deploy-target -Ss mymodule root@192.168.8.227:~/workspace/03092026_2
NOTE: Starting bitbake server...
NOTE: Started PRServer with DBfile: /mnt/hdd/workspace/ST/STM32MP257K_DK/Distribution-Package/build-openstlinuxweston-stm32mp2/cache/prserv.sqlite3,
Address: 127.0.0.1:34799, PID: 837651
NOTE: Reconnecting to bitbake server...
NOTE: Retrying server connection (#1)... (17:05:23.025959)
NOTE: Started PRServer with DBfile: /mnt/hdd/workspace/ST/STM32MP257K_DK/Distribution-Package/build-openstlinuxweston-stm32mp2/cache/prserv.sqlite3,
Address: 127.0.0.1:36729, PID: 837662
Loading cache: 100% |################################################################################################################| Time: 0:00:00
Loaded 5014 entries from dependency cache.
Parsing recipes: 100% |##############################################################################################################| Time: 0:00:00
Parsing of 3051 .bb files complete (3046 cached, 5 parsed). 5018 targets, 615 skipped, 0 masked, 0 errors.
devtool_deploy.list                                                                                               100%   93   137.9KB/s   00:00     
devtool_deploy.sh                                                                                                 100% 1017     2.0MB/s   00:00     
./
./usr/
./usr/lib/
./usr/lib/modules/
./usr/lib/modules/6.6.116-gba4c4a7c8ff2-dirty/
./usr/lib/modules/6.6.116-gba4c4a7c8ff2-dirty/
stm32mp2_gpiokey.ko
INFO: Successfully deployed /mnt/hdd/workspace/ST/STM32MP257K_DK/Distribution-Package/build-openstlinuxweston-stm32mp2/tmp-glibc/work/stm32mp2-ostl-linux/mymodule/1.0/devtool-deploy-target-stripped


<Target board>
$ cd ~/workspace/03092026_2

[그림 7.3.9] target board에 복사된 stm32mp_gpiokey.ko 확인 모습

insmod ./stm32mp2_gpiokey.ko
  -> OK, 정상 동작한다.
--------------------------------------------------------------------

그런데, 이게 끝이 아니다. 앞서 작업한 kernel module을 mysources & workspace로 부터 meta-my-custo-layer로 이동시켜야 한다.

<kernel module source code 파일 복사>
$ mkdir -p ../layers/meta-st/meta-my-custo-layer/recipes-custom/mymodule/mymodule
$ cp mysources/kernel_modules/Makefile ../layers/meta-st/meta-my-custo-layer/recipes-custom/mymodule/mymodule
$ cp mysources/kernel_modules/stm32mp2_gpiokey.c ../layers/meta-st/meta-my-custo-layer/recipes-custom/mymodule/mymodule

<recipe 파일 복사>
$ cp workspace/recipes/mymodule/mymodule.bb ../layers/meta-st/meta-my-custo-layer/recipes-custom/mymodule/

chyi@earth:/mnt/hdd/workspace/ST/STM32MP257K_DK/Distribution-Package/layers/meta-st/meta-my-custo-layer/recipes-custom/mymodule$ tree .                                                                                            
.
├── mymodule
│   ├── Makefile
│   └── stm32mp2_gpiokey.c
└── mymodule.bb

$ vi ../layers/meta-st/meta-my-custo-layer/recipes-custom/mymodule/mymodule.bb
 -> (파일 위치가 고정되었으니) 아래와 같이 mymodule.bb 파일을 다시 수정한다. 이번에는 수정하는 김에 LICENSE 부분도 변경하도록 하자.

[그림 7.3.10] mymodule.bb 파일 최종 수정 모습

mymodule이 정상 build되는지 시도해 본다.
devtool build mymodule

마지막으로, layers/meta-st/meta-my-custo-layer/recipes-custom/images/my-custom-image.bb 파일에 kernel module recipe를 추가한 후, my-custom-image를 만들어 보도록 하자.

$ vi my-custom-image.bb 
#require recipes-core/images/st-image-weston.bb
require ../meta-st-openstlinux/recipes-st/images/st-image-weston.bb
IMAGE_INSTALL += "helloyocto mymodule"
~
📌 IMAGE_INSTALL에 추가할 내용은 stm32mp2_gpiokey.ko가 아니라, recipe 명이다.

bitbake my-custom-image

성공적으로 build가 끝났으면, kernel module(stm32mp2_gpiokey.ko)이 정상적으로 image에 포함되었는지 확인해 본다.

$ cd tmp-glibc/deploy/images/stm32mp2
$ mkdir bbb; tar xvf ./my-custom-image-openstlinux-weston-stm32mp2.splitted-rootfs-20260310042925.tar -C ./bbb; cd bbb
$ find . -name "stm32mp2_gpiokey.ko" -print
./usr/lib/modules/6.6.116-g2139b4c6e7cd/stm32mp2_gpiokey.ko

OK,  정상적으로 추가되었다. 😎

7.4 u-boot SSBL bootloader 수정하기
이번 절에서는 devtool을 사용하여 u-boot를 개발하는 과정을 살펴보기로 하자.

[그림 7.4.1] stm32mp2 boot flow overview

먼저, virtual/bootloader를 사용해도 되지만, stm32mp용 u-boot recipe 명을 찾아 보도록 한다.

$ devtool search u-boot*
...
u-boot-stm32mp        Universal Boot Loader for embedded devices for stm32mp
u-boot-tools-stm32mp   
u-boot-stm32mp-splash  Universal Boot Loader Splash Screen for stm32mp embedded devices
libubootenv           U-Boot libraries and tools to access environment
libubootenv-native    U-Boot libraries and tools to access environment
nativesdk-u-boot-tools  U-Boot bootloader tools
nativesdk-u-boot-tools-stm32mp   
u-boot-fw-config-stm32mp  U-Boot bootloader fw_printenv/setenv utilities
u-boot-tools          U-Boot bootloader tools
u-boot-tools-native   U-Boot bootloader tools
u-boot-tools-stm32mp-native 


다음으로 u-boot source code를 workspace로 내려 받도록 한다.

$ devtool modify u-boot-stm32mp

$ ls -la workspace/sources
drwxr-xr-x 10 chyi chyi 4096  3월  5 11:39 libmnl
drwxr-xr-x 28 chyi chyi 4096  3월 10 13:14 linux-stm32mp
drwxr-xr-x 27 chyi chyi 4096  3월 10 13:58 u-boot-stm32mp

이후, u-boot code 수정이 필요하다면, 수정 후 build를 시도해 보도록 하자.

devtool build u-boot-stm32mp
$ bitbake -c deploy u-boot-stm32mp

$ ls -l tmp-glibc/deploy/images/stm32mp2/u-boot
-rw-r--r--  2 chyi chyi   57397  3월 10 14:08 configuration-stm32mp21-fastboot-emmc_defconfig
-rw-r--r--  2 chyi chyi   57318  3월 10 14:08 configuration-stm32mp21-fastboot-sdcard_defconfig
-rw-r--r--  2 chyi chyi   57397  3월 10 14:08 configuration-stm32mp21_defconfig
-rw-r--r--  2 chyi chyi   57796  3월 10 14:08 configuration-stm32mp23-fastboot-emmc_defconfig
-rw-r--r--  2 chyi chyi   57717  3월 10 14:08 configuration-stm32mp23-fastboot-sdcard_defconfig
-rw-r--r--  2 chyi chyi   57796  3월 10 14:08 configuration-stm32mp23_defconfig
-rw-r--r--  2 chyi chyi   57798  3월 10 14:08 configuration-stm32mp25-fastboot-emmc_defconfig
-rw-r--r--  2 chyi chyi   57719  3월 10 14:08 configuration-stm32mp25-fastboot-sdcard_defconfig
-rw-r--r--  2 chyi chyi   57798  3월 10 14:08 configuration-stm32mp25_defconfig
drwxr-xr-x  2 chyi chyi    4096  3월 10 14:08 debug
-rw-r--r--  2 chyi chyi 1783296  3월 10 14:08 u-boot-nodtb-stm32mp21-default.bin
-rw-r--r--  2 chyi chyi 1783296  3월 10 14:08 u-boot-nodtb-stm32mp21-fastboot-emmc.bin
-rw-r--r--  2 chyi chyi 1783248  3월 10 14:08 u-boot-nodtb-stm32mp21-fastboot-sdcard.bin
-rw-r--r--  2 chyi chyi 1783296  3월 10 14:08 u-boot-nodtb-stm32mp21-programmer.bin
-rw-r--r--  2 chyi chyi 1856288  3월 10 14:08 u-boot-nodtb-stm32mp23-default.bin
-rw-r--r--  2 chyi chyi 1856288  3월 10 14:08 u-boot-nodtb-stm32mp23-fastboot-emmc.bin
-rw-r--r--  2 chyi chyi 1856240  3월 10 14:08 u-boot-nodtb-stm32mp23-fastboot-sdcard.bin
-rw-r--r--  2 chyi chyi 1856288  3월 10 14:08 u-boot-nodtb-stm32mp23-programmer.bin
-rw-r--r--  2 chyi chyi 1856432  3월 10 14:08 u-boot-nodtb-stm32mp25-default.bin
-rw-r--r--  2 chyi chyi 1856432  3월 10 14:08 u-boot-nodtb-stm32mp25-fastboot-emmc.bin
-rw-r--r--  2 chyi chyi 1856384  3월 10 14:08 u-boot-nodtb-stm32mp25-fastboot-sdcard.bin
-rw-r--r--  2 chyi chyi 1856432  3월 10 14:08 u-boot-nodtb-stm32mp25-programmer.bin
-rw-r--r--  2 chyi chyi   91312  3월 10 14:08 u-boot-stm32mp215f-dk-ca35tdcid-ostl-default.dtb
-rw-r--r--  2 chyi chyi   91312  3월 10 14:08 u-boot-stm32mp215f-dk-ca35tdcid-ostl-fastboot-emmc.dtb
-rw-r--r--  2 chyi chyi   91312  3월 10 14:08 u-boot-stm32mp215f-dk-ca35tdcid-ostl-fastboot-sdcard.dtb
-rw-r--r--  2 chyi chyi   91296  3월 10 14:08 u-boot-stm32mp215f-dk-ca35tdcid-ostl-m33-examples-default.dtb
-rw-r--r--  2 chyi chyi   91296  3월 10 14:08 u-boot-stm32mp215f-dk-ca35tdcid-ostl-m33-examples-fastboot-emmc.dtb
-rw-r--r--  2 chyi chyi   91296  3월 10 14:08 u-boot-stm32mp215f-dk-ca35tdcid-ostl-m33-examples-fastboot-sdcard.dtb
-rw-r--r--  2 chyi chyi   91296  3월 10 14:08 u-boot-stm32mp215f-dk-ca35tdcid-ostl-m33-examples-programmer.dtb
-rw-r--r--  2 chyi chyi   91312  3월 10 14:08 u-boot-stm32mp215f-dk-ca35tdcid-ostl-programmer.dtb
-rw-r--r--  2 chyi chyi   91248  3월 10 14:08 u-boot-stm32mp215f-dk-default.dtb
-rw-r--r--  2 chyi chyi   91248  3월 10 14:08 u-boot-stm32mp215f-dk-fastboot-emmc.dtb
-rw-r--r--  2 chyi chyi   91248  3월 10 14:08 u-boot-stm32mp215f-dk-fastboot-sdcard.dtb
-rw-r--r--  2 chyi chyi   91248  3월 10 14:08 u-boot-stm32mp215f-dk-programmer.dtb
-rw-r--r--  2 chyi chyi  105672  3월 10 14:08 u-boot-stm32mp235f-dk-default.dtb
-rw-r--r--  2 chyi chyi  105672  3월 10 14:08 u-boot-stm32mp235f-dk-fastboot-emmc.dtb
-rw-r--r--  2 chyi chyi  105672  3월 10 14:08 u-boot-stm32mp235f-dk-fastboot-sdcard.dtb
-rw-r--r--  2 chyi chyi  105672  3월 10 14:08 u-boot-stm32mp235f-dk-programmer.dtb
-rw-r--r--  2 chyi chyi  119896  3월 10 14:08 u-boot-stm32mp257f-dk-ca35tdcid-ostl-default.dtb
-rw-r--r--  2 chyi chyi  119896  3월 10 14:08 u-boot-stm32mp257f-dk-ca35tdcid-ostl-fastboot-emmc.dtb
-rw-r--r--  2 chyi chyi  119896  3월 10 14:08 u-boot-stm32mp257f-dk-ca35tdcid-ostl-fastboot-sdcard.dtb
-rw-r--r--  2 chyi chyi  118984  3월 10 14:08 u-boot-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-default.dtb
-rw-r--r--  2 chyi chyi  118984  3월 10 14:08 u-boot-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-fastboot-emmc.dtb
-rw-r--r--  2 chyi chyi  118984  3월 10 14:08 u-boot-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-fastboot-sdcard.dtb
-rw-r--r--  2 chyi chyi  118984  3월 10 14:08 u-boot-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-programmer.dtb
-rw-r--r--  2 chyi chyi  119896  3월 10 14:08 u-boot-stm32mp257f-dk-ca35tdcid-ostl-programmer.dtb
-rw-r--r--  2 chyi chyi  119944  3월 10 14:08 u-boot-stm32mp257f-dk-default.dtb
-rw-r--r--  2 chyi chyi  119944  3월 10 14:08 u-boot-stm32mp257f-dk-fastboot-emmc.dtb
-rw-r--r--  2 chyi chyi  119944  3월 10 14:08 u-boot-stm32mp257f-dk-fastboot-sdcard.dtb
-rw-r--r--  2 chyi chyi  119944  3월 10 14:08 u-boot-stm32mp257f-dk-programmer.dtb
-rw-r--r--  2 chyi chyi  118288  3월 10 14:08 u-boot-stm32mp257f-ev1-ca35tdcid-ostl-default.dtb
-rw-r--r--  2 chyi chyi  118288  3월 10 14:08 u-boot-stm32mp257f-ev1-ca35tdcid-ostl-fastboot-emmc.dtb
-rw-r--r--  2 chyi chyi  118288  3월 10 14:08 u-boot-stm32mp257f-ev1-ca35tdcid-ostl-fastboot-sdcard.dtb
-rw-r--r--  2 chyi chyi  117592  3월 10 14:08 u-boot-stm32mp257f-ev1-ca35tdcid-ostl-m33-examples-default.dtb
-rw-r--r--  2 chyi chyi  117592  3월 10 14:08 u-boot-stm32mp257f-ev1-ca35tdcid-ostl-m33-examples-fastboot-emmc.dtb
-rw-r--r--  2 chyi chyi  117592  3월 10 14:08 u-boot-stm32mp257f-ev1-ca35tdcid-ostl-m33-examples-fastboot-sdcard.dtb
-rw-r--r--  2 chyi chyi  117592  3월 10 14:08 u-boot-stm32mp257f-ev1-ca35tdcid-ostl-m33-examples-programmer.dtb
-rw-r--r--  2 chyi chyi  117336  3월 10 14:08 u-boot-stm32mp257f-ev1-ca35tdcid-ostl-m33-examples-sram-default.dtb
-rw-r--r--  2 chyi chyi  117336  3월 10 14:08 u-boot-stm32mp257f-ev1-ca35tdcid-ostl-m33-examples-sram-fastboot-emmc.dtb
-rw-r--r--  2 chyi chyi  117336  3월 10 14:08 u-boot-stm32mp257f-ev1-ca35tdcid-ostl-m33-examples-sram-fastboot-sdcard.dtb
-rw-r--r--  2 chyi chyi  117336  3월 10 14:08 u-boot-stm32mp257f-ev1-ca35tdcid-ostl-m33-examples-sram-programmer.dtb
-rw-r--r--  2 chyi chyi  118288  3월 10 14:08 u-boot-stm32mp257f-ev1-ca35tdcid-ostl-programmer.dtb
-rw-r--r--  2 chyi chyi  119456  3월 10 14:08 u-boot-stm32mp257f-ev1-default.dtb
-rw-r--r--  2 chyi chyi  119456  3월 10 14:08 u-boot-stm32mp257f-ev1-fastboot-emmc.dtb
-rw-r--r--  2 chyi chyi  119456  3월 10 14:08 u-boot-stm32mp257f-ev1-fastboot-sdcard.dtb
-rw-r--r--  2 chyi chyi  119456  3월 10 14:08 u-boot-stm32mp257f-ev1-programmer.dtb
-------------------------------------------------------------------------

다음으로 할 일은 u-boot binary를 FIP(Firmware Image Package) image 안에 끼워 넣도록 하자.

$ bitbake fip-stm32mp
📌 FIP는 u-boot, TF-A 같은 firmware를 구동하기 위해 사용하는 image format으로, Amlogic이나 STMicroelectronics MPU에서 사용된다고 한다.

$ ls -l tmp-glibc/deploy/images/stm32mp2/fip
...
-rw-r--r--  1 chyi chyi   34480  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-ddr-fastboot-emmc.bin
-rw-r--r--  1 chyi chyi     373  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-ddr-fastboot-emmc.txt
-rw-r--r--  1 chyi chyi   34480  3월 10 14:21 fip-stm32mp257f-dk-ca35tdcid-ostl-ddr-fastboot-opteemin-emmc.bin
-rw-r--r--  1 chyi chyi     368  3월 10 14:21 fip-stm32mp257f-dk-ca35tdcid-ostl-ddr-fastboot-opteemin-emmc.txt
-rw-r--r--  1 chyi chyi   34480  3월 10 14:21 fip-stm32mp257f-dk-ca35tdcid-ostl-ddr-fastboot-opteemin-sdcard.bin
-rw-r--r--  1 chyi chyi     374  3월 10 14:21 fip-stm32mp257f-dk-ca35tdcid-ostl-ddr-fastboot-opteemin-sdcard.txt
-rw-r--r--  1 chyi chyi   34480  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-ddr-fastboot-sdcard.bin
-rw-r--r--  1 chyi chyi     375  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-ddr-fastboot-sdcard.txt
-rw-r--r--  1 chyi chyi   34480  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-ddr-optee-emmc.bin
-rw-r--r--  1 chyi chyi     350  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-ddr-optee-emmc.txt
-rw-r--r--  1 chyi chyi   34480  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-ddr-optee-programmer-usb.bin
-rw-r--r--  1 chyi chyi     380  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-ddr-optee-programmer-usb.txt
-rw-r--r--  1 chyi chyi   34480  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-ddr-optee-sdcard.bin
-rw-r--r--  1 chyi chyi     356  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-ddr-optee-sdcard.txt
-rw-r--r--  1 chyi chyi   34480  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-ddr-opteemin-emmc.bin
-rw-r--r--  1 chyi chyi     359  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-ddr-opteemin-emmc.txt
-rw-r--r--  1 chyi chyi   34480  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-ddr-opteemin-programmer-usb.bin
-rw-r--r--  1 chyi chyi     389  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-ddr-opteemin-programmer-usb.txt
-rw-r--r--  1 chyi chyi   34480  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-ddr-opteemin-sdcard.bin
-rw-r--r--  1 chyi chyi     365  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-ddr-opteemin-sdcard.txt
-rw-r--r--  1 chyi chyi 3132662  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-fastboot-emmc.bin
-rw-r--r--  1 chyi chyi    1975  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-fastboot-emmc.txt
-rw-r--r--  1 chyi chyi 2668182  3월 10 14:21 fip-stm32mp257f-dk-ca35tdcid-ostl-fastboot-opteemin-emmc.bin
-rw-r--r--  1 chyi chyi    1946  3월 10 14:21 fip-stm32mp257f-dk-ca35tdcid-ostl-fastboot-opteemin-emmc.txt
-rw-r--r--  1 chyi chyi 2668134  3월 10 14:21 fip-stm32mp257f-dk-ca35tdcid-ostl-fastboot-opteemin-sdcard.bin
-rw-r--r--  1 chyi chyi    1972  3월 10 14:21 fip-stm32mp257f-dk-ca35tdcid-ostl-fastboot-opteemin-sdcard.txt
-rw-r--r--  1 chyi chyi 3132614  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-fastboot-sdcard.bin
-rw-r--r--  1 chyi chyi    1985  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-fastboot-sdcard.txt
-rw-r--r--  1 chyi chyi   34480  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-ddr-fastboot-emmc.bin
-rw-r--r--  1 chyi chyi     412  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-ddr-fastboot-emmc.txt
-rw-r--r--  1 chyi chyi   34480  3월 10 14:21 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-ddr-fastboot-opteemin-emmc.bin
-rw-r--r--  1 chyi chyi     407  3월 10 14:21 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-ddr-fastboot-opteemin-emmc.txt
-rw-r--r--  1 chyi chyi   34480  3월 10 14:21 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-ddr-fastboot-opteemin-sdcard.bin
-rw-r--r--  1 chyi chyi     413  3월 10 14:21 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-ddr-fastboot-opteemin-sdcard.txt
-rw-r--r--  1 chyi chyi   34480  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-ddr-fastboot-sdcard.bin
-rw-r--r--  1 chyi chyi     414  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-ddr-fastboot-sdcard.txt
-rw-r--r--  1 chyi chyi   34480  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-ddr-optee-emmc.bin
-rw-r--r--  1 chyi chyi     389  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-ddr-optee-emmc.txt
-rw-r--r--  1 chyi chyi   34480  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-ddr-optee-programmer-usb.bin
-rw-r--r--  1 chyi chyi     419  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-ddr-optee-programmer-usb.txt
-rw-r--r--  1 chyi chyi   34480  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-ddr-optee-sdcard.bin
-rw-r--r--  1 chyi chyi     395  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-ddr-optee-sdcard.txt
-rw-r--r--  1 chyi chyi   34480  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-ddr-opteemin-emmc.bin
-rw-r--r--  1 chyi chyi     398  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-ddr-opteemin-emmc.txt
-rw-r--r--  1 chyi chyi   34480  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-ddr-opteemin-programmer-usb.bin
-rw-r--r--  1 chyi chyi     428  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-ddr-opteemin-programmer-usb.txt
-rw-r--r--  1 chyi chyi   34480  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-ddr-opteemin-sdcard.bin
-rw-r--r--  1 chyi chyi     404  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-ddr-opteemin-sdcard.txt
-rw-r--r--  1 chyi chyi 3131774  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-fastboot-emmc.bin
-rw-r--r--  1 chyi chyi    2196  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-fastboot-emmc.txt
-rw-r--r--  1 chyi chyi 2667294  3월 10 14:21 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-fastboot-opteemin-emmc.bin
-rw-r--r--  1 chyi chyi    2167  3월 10 14:21 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-fastboot-opteemin-emmc.txt
-rw-r--r--  1 chyi chyi 2667246  3월 10 14:21 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-fastboot-opteemin-sdcard.bin
-rw-r--r--  1 chyi chyi    2193  3월 10 14:21 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-fastboot-opteemin-sdcard.txt
-rw-r--r--  1 chyi chyi 3131726  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-fastboot-sdcard.bin
-rw-r--r--  1 chyi chyi    2206  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-fastboot-sdcard.txt
-rw-r--r--  1 chyi chyi 3160702  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-optee-emmc.bin
-rw-r--r--  1 chyi chyi    2023  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-optee-emmc.txt
-rw-r--r--  1 chyi chyi 3131774  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-optee-programmer-usb.bin
-rw-r--r--  1 chyi chyi    2191  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-optee-programmer-usb.txt
-rw-r--r--  1 chyi chyi 3160702  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-optee-sdcard.bin
-rw-r--r--  1 chyi chyi    2041  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-optee-sdcard.txt
-rw-r--r--  1 chyi chyi 2667294  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-opteemin-emmc.bin
-rw-r--r--  1 chyi chyi    2068  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-opteemin-emmc.txt
-rw-r--r--  1 chyi chyi 2638366  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-opteemin-programmer-usb.bin
-rw-r--r--  1 chyi chyi    2236  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-opteemin-programmer-usb.txt
-rw-r--r--  1 chyi chyi 2667294  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-opteemin-sdcard.bin
-rw-r--r--  1 chyi chyi    2086  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-opteemin-sdcard.txt
-rw-r--r--  1 chyi chyi 3161590  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-optee-emmc.bin
-rw-r--r--  1 chyi chyi    1802  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-optee-emmc.txt
-rw-r--r--  1 chyi chyi 3132662  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-optee-programmer-usb.bin
-rw-r--r--  1 chyi chyi    1970  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-optee-programmer-usb.txt
-rw-r--r--  1 chyi chyi 3161590  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-optee-sdcard.bin
-rw-r--r--  1 chyi chyi    1820  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-optee-sdcard.txt
-rw-r--r--  1 chyi chyi 2668182  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-opteemin-emmc.bin
-rw-r--r--  1 chyi chyi    1847  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-opteemin-emmc.txt
-rw-r--r--  1 chyi chyi 2639254  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-opteemin-programmer-usb.bin
-rw-r--r--  1 chyi chyi    2015  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-opteemin-programmer-usb.txt
-rw-r--r--  1 chyi chyi 2668182  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-opteemin-sdcard.bin
-rw-r--r--  1 chyi chyi    1865  3월 10 14:20 fip-stm32mp257f-dk-ca35tdcid-ostl-opteemin-sdcard.txt
-rw-r--r--  1 chyi chyi   34480  3월 10 14:20 fip-stm32mp257f-dk-ddr-fastboot-emmc.bin
-rw-r--r--  1 chyi chyi     328  3월 10 14:20 fip-stm32mp257f-dk-ddr-fastboot-emmc.txt
-rw-r--r--  1 chyi chyi   34480  3월 10 14:21 fip-stm32mp257f-dk-ddr-fastboot-opteemin-emmc.bin
-rw-r--r--  1 chyi chyi     323  3월 10 14:21 fip-stm32mp257f-dk-ddr-fastboot-opteemin-emmc.txt
-rw-r--r--  1 chyi chyi   34480  3월 10 14:21 fip-stm32mp257f-dk-ddr-fastboot-opteemin-sdcard.bin
-rw-r--r--  1 chyi chyi     329  3월 10 14:21 fip-stm32mp257f-dk-ddr-fastboot-opteemin-sdcard.txt
-rw-r--r--  1 chyi chyi   34480  3월 10 14:20 fip-stm32mp257f-dk-ddr-fastboot-sdcard.bin
-rw-r--r--  1 chyi chyi     330  3월 10 14:20 fip-stm32mp257f-dk-ddr-fastboot-sdcard.txt
-rw-r--r--  1 chyi chyi   34480  3월 10 14:20 fip-stm32mp257f-dk-ddr-optee-emmc.bin
-rw-r--r--  1 chyi chyi     305  3월 10 14:20 fip-stm32mp257f-dk-ddr-optee-emmc.txt
-rw-r--r--  1 chyi chyi   34480  3월 10 14:20 fip-stm32mp257f-dk-ddr-optee-programmer-usb.bin
-rw-r--r--  1 chyi chyi     335  3월 10 14:20 fip-stm32mp257f-dk-ddr-optee-programmer-usb.txt
-rw-r--r--  1 chyi chyi   34480  3월 10 14:20 fip-stm32mp257f-dk-ddr-optee-sdcard.bin
-rw-r--r--  1 chyi chyi     311  3월 10 14:20 fip-stm32mp257f-dk-ddr-optee-sdcard.txt
-rw-r--r--  1 chyi chyi   34480  3월 10 14:20 fip-stm32mp257f-dk-ddr-opteemin-emmc.bin
-rw-r--r--  1 chyi chyi     314  3월 10 14:20 fip-stm32mp257f-dk-ddr-opteemin-emmc.txt
-rw-r--r--  1 chyi chyi   34480  3월 10 14:20 fip-stm32mp257f-dk-ddr-opteemin-programmer-usb.bin
-rw-r--r--  1 chyi chyi     344  3월 10 14:20 fip-stm32mp257f-dk-ddr-opteemin-programmer-usb.txt
-rw-r--r--  1 chyi chyi   34480  3월 10 14:20 fip-stm32mp257f-dk-ddr-opteemin-sdcard.bin
-rw-r--r--  1 chyi chyi     320  3월 10 14:20 fip-stm32mp257f-dk-ddr-opteemin-sdcard.txt
-rw-r--r--  1 chyi chyi 3132778  3월 10 14:20 fip-stm32mp257f-dk-fastboot-emmc.bin
-rw-r--r--  1 chyi chyi    1720  3월 10 14:20 fip-stm32mp257f-dk-fastboot-emmc.txt
-rw-r--r--  1 chyi chyi 2668298  3월 10 14:21 fip-stm32mp257f-dk-fastboot-opteemin-emmc.bin
-rw-r--r--  1 chyi chyi    1691  3월 10 14:21 fip-stm32mp257f-dk-fastboot-opteemin-emmc.txt
-rw-r--r--  1 chyi chyi 2668250  3월 10 14:21 fip-stm32mp257f-dk-fastboot-opteemin-sdcard.bin
-rw-r--r--  1 chyi chyi    1717  3월 10 14:21 fip-stm32mp257f-dk-fastboot-opteemin-sdcard.txt
-rw-r--r--  1 chyi chyi 3132730  3월 10 14:20 fip-stm32mp257f-dk-fastboot-sdcard.bin
-rw-r--r--  1 chyi chyi    1730  3월 10 14:20 fip-stm32mp257f-dk-fastboot-sdcard.txt
-rw-r--r--  1 chyi chyi 3161706  3월 10 14:20 fip-stm32mp257f-dk-optee-emmc.bin
-rw-r--r--  1 chyi chyi    1547  3월 10 14:20 fip-stm32mp257f-dk-optee-emmc.txt
-rw-r--r--  1 chyi chyi 3132778  3월 10 14:20 fip-stm32mp257f-dk-optee-programmer-usb.bin
-rw-r--r--  1 chyi chyi    1715  3월 10 14:20 fip-stm32mp257f-dk-optee-programmer-usb.txt
-rw-r--r--  1 chyi chyi 3161706  3월 10 14:20 fip-stm32mp257f-dk-optee-sdcard.bin
-rw-r--r--  1 chyi chyi    1565  3월 10 14:20 fip-stm32mp257f-dk-optee-sdcard.txt
-rw-r--r--  1 chyi chyi 2668298  3월 10 14:20 fip-stm32mp257f-dk-opteemin-emmc.bin
-rw-r--r--  1 chyi chyi    1592  3월 10 14:20 fip-stm32mp257f-dk-opteemin-emmc.txt
-rw-r--r--  1 chyi chyi 2639370  3월 10 14:20 fip-stm32mp257f-dk-opteemin-programmer-usb.bin
-rw-r--r--  1 chyi chyi    1760  3월 10 14:20 fip-stm32mp257f-dk-opteemin-programmer-usb.txt
-rw-r--r--  1 chyi chyi 2668298  3월 10 14:20 fip-stm32mp257f-dk-opteemin-sdcard.bin
-rw-r--r--  1 chyi chyi    1610  3월 10 14:20 fip-stm32mp257f-dk-opteemin-sdcard.txt
...
-------------------------------------------------------------------------

이후, microSD를 PC에 연결한 후, fip binary가 위치할 partition 정보를 확인하도록 하자.

[그림 7.4.2] microSD 카드 partition 정보 확인

dd 명령을 사용하여 앞서 생성한 fip image를 fip-a partition에 write하도록 하자.

$ dd if=fip-stm32mp257f-dk-optee-sdcard.bin of=/dev/sdb5 bs=1M conv=fdatasync

이후, (microSD를 다시 장착한 후) target board를 재부팅하여 u-boot의 변경 사항을 확인해 보면 된다.

만일, u-boot에 수정 사항이 발생했다면, devtool을 사용하여 반영하면 된다. 이는 kernel의 경우와 동일하다.

$ devtool update-recipe u-boot-stm32mp -a ../layers/meta-st/meta-my-custo-layer

$ bitbake my-custom-image

----------------------------------------------------------------------

7.5 TF-A FSBL bootloader 수정하기
이번 절에서는 devtool을 사용하여 TF-A를 개발하는 과정을 살펴보기로 하자. 반복되는 내용이므로 간단하게만 정리하고 넘어가기로 한다. 😋

$ devtool search tf-a*
...
tf-a-stm32mp          Trusted Firmware-A for STM32MP1
...

$ devtool modify tf-a-stm32mp
$ ls -la
drwxr-xr-x 10 chyi chyi 4096  3월  5 11:39 libmnl
drwxr-xr-x 28 chyi chyi 4096  3월 10 13:14 linux-stm32mp
drwxr-xr-x 20 chyi chyi 4096  3월 10 14:42 tf-a-stm32mp
drwxr-xr-x 27 chyi chyi 4096  3월 10 14:05 u-boot-stm32mp

$ devtool build tf-a-stm32mp

$ ls -l tmp-glibc/deploy/images/stm32mp2/arm-trusted-firmware
...
-rw-r--r--  2 chyi chyi 200744  3월 10 14:49 tf-a-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-optee-emmc.stm32
-rw-r--r--  2 chyi chyi 192496  3월 10 14:49 tf-a-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-optee-programmer-uart.stm32
-rw-r--r--  2 chyi chyi 196592  3월 10 14:49 tf-a-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-optee-programmer-usb.stm32
-rw-r--r--  2 chyi chyi 200744  3월 10 14:49 tf-a-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-optee-sdcard.stm32
-rw-r--r--  2 chyi chyi 200744  3월 10 14:49 tf-a-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-opteemin-emmc.stm32
-rw-r--r--  2 chyi chyi 192496  3월 10 14:49 tf-a-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-opteemin-programmer-uart.stm32
-rw-r--r--  2 chyi chyi 196592  3월 10 14:49 tf-a-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-opteemin-programmer-usb.stm32
-rw-r--r--  2 chyi chyi 200744  3월 10 14:49 tf-a-stm32mp257f-dk-ca35tdcid-ostl-m33-examples-opteemin-sdcard.stm32
-rw-r--r--  2 chyi chyi 200744  3월 10 14:49 tf-a-stm32mp257f-dk-ca35tdcid-ostl-optee-emmc.stm32
-rw-r--r--  2 chyi chyi 192496  3월 10 14:49 tf-a-stm32mp257f-dk-ca35tdcid-ostl-optee-programmer-uart.stm32
-rw-r--r--  2 chyi chyi 196592  3월 10 14:49 tf-a-stm32mp257f-dk-ca35tdcid-ostl-optee-programmer-usb.stm32
-rw-r--r--  2 chyi chyi 200744  3월 10 14:49 tf-a-stm32mp257f-dk-ca35tdcid-ostl-optee-sdcard.stm32
-rw-r--r--  2 chyi chyi 200744  3월 10 14:49 tf-a-stm32mp257f-dk-ca35tdcid-ostl-opteemin-emmc.stm32
-rw-r--r--  2 chyi chyi 192496  3월 10 14:49 tf-a-stm32mp257f-dk-ca35tdcid-ostl-opteemin-programmer-uart.stm32
-rw-r--r--  2 chyi chyi 196592  3월 10 14:49 tf-a-stm32mp257f-dk-ca35tdcid-ostl-opteemin-programmer-usb.stm32
-rw-r--r--  2 chyi chyi 200744  3월 10 14:49 tf-a-stm32mp257f-dk-ca35tdcid-ostl-opteemin-sdcard.stm32
-rw-r--r--  2 chyi chyi 200744  3월 10 14:49 tf-a-stm32mp257f-dk-optee-emmc.stm32
-rw-r--r--  2 chyi chyi 192496  3월 10 14:49 tf-a-stm32mp257f-dk-optee-programmer-uart.stm32
-rw-r--r--  2 chyi chyi 196592  3월 10 14:49 tf-a-stm32mp257f-dk-optee-programmer-usb.stm32
-rw-r--r--  2 chyi chyi 200744  3월 10 14:49 tf-a-stm32mp257f-dk-optee-sdcard.stm32
-rw-r--r--  2 chyi chyi 200744  3월 10 14:49 tf-a-stm32mp257f-dk-opteemin-emmc.stm32
-rw-r--r--  2 chyi chyi 192496  3월 10 14:49 tf-a-stm32mp257f-dk-opteemin-programmer-uart.stm32
-rw-r--r--  2 chyi chyi 196592  3월 10 14:49 tf-a-stm32mp257f-dk-opteemin-programmer-usb.stm32
-rw-r--r--  2 chyi chyi 200744  3월 10 14:49 tf-a-stm32mp257f-dk-opteemin-sdcard.stm32
...
-------------------------------------------------------------------------

dd 명령을 사용하여 앞서 생성한 tf-a image를 fsbla1 파티션에 write하도록 하자.

$ dd if=tf-a-stm32mp257f-dk-optee-sdcard.stm32 of=/dev/sdb1 bs=1M conv=fdatasync

이후, target board를 재부팅하여 tf-a image의 변경 사항을 확인해 보면 된다.

만일, tf-a bootloader code에 수정 사항이 발생했다면, 역시 devtool을 사용하면 된다.

$ devtool update-recipe tf-a-stm32mp -a ../layers/meta-st/meta-my-custo-layer

$ bitbake my-custom-image

==================================================================================

이상으로 (조금은 험난한 과정을 거쳐) yocto project의 devtool & bitbake를 이용하여 linux kernel 및 bootloader code를 handling하는 과정을 살펴 보았다. 


To be continued...


References
[1] https://www.st.com/en/evaluation-tools/stm32mp257f-dk.html
[2] UM3385 - Discovery kit with STM32MP257F MPU - User manual, STMicroelectronics.
[3] Data brief - STM32MP257F-DK, STMicroelectronics.
[4] STM32MP251C/F STM32MP253C/F, STM32MP255C/F STM32MP257C/F Datasheet, STMicroelectronics.
[5] STM32MP257-DK schematic, STMicroelectronics.
[6] RM0457 Reference manual, STM32MP23/25xx advanced Arm®-based 32/64-bit MPUs
[7] https://wiki.st.com/stm32mpu/wiki/Getting_started/STM32MP2_boards/STM32MP257x-DK
[8] https://wiki.st.com/stm32mpu/wiki/STM32MP2_boot_chain_overview
[9] https://wiki.st.com/stm32mpu/wiki/STM32MPU_Distribution_Package
  -> STM32MP documents

[10] https://docs.yoctoproject.org/
  -> yocto project manual

[11] https://bootlin.com/doc/training/embedded-linux/embedded-linux-stm32mp2-labs.pdf
  -> bootlin documents

[13] Mastering Embedded Linux Programming, Frank Vasquez, Chris Simmonds, Packt.

[14] And Google and Gemini~


Slowboot