본문 바로가기
개발/임베디드

STM32MP157C-DK2 | Yocto 를 활용한 리눅스 이미지 빌드

by Evan Park

개요

이전 글에서 Buildroot를 사용하여 STM32MP157C-DK를 컴파일하는 방법에 대해서 알아봤다.

 

Buildroot는 ST의 공식 지원 빌드 시스템이 아니기도 하고. 대부분 커뮤니티 지원을 통해 프로젝트가 운영되고 있다. 그래서 WiFi 를 활성화하거나. 보드에서 지원하는 기능을 활성화시킬 때 여러 부가 작업이 요구된다.

 

예를 들어 아래 글을 보면 WiFi 를 활성하기 위해서는 ST의 Kernel을 사용하고 defconfig와 파일 시스템의 수정이 요구된다. 불가능한 건 아니지만 귀찮은 작업이기는 하다.

(https://lists.buildroot.org/pipermail/buildroot/2020-November/598141.html)

 

ST에서 공식적으로 지원하고 있는 빌드 시스템인 Yocto를 사용하게 되면. ST의 지원을 바탕으로 장치의 모든 검증된 기능을 활용할 수 있는 리눅스 이미지를 쉽게 빌드할 수 있다. Buildroot와 달리 학습 비용도 크고 빌드 속도도 비교적 오래 걸린다. 그렇지만 어느 정도 익숙해지면 Yocto의 기능을 활용해 원하는 기능을 제공하는 리눅스 이미지를 자유자재로 만들고 배포할 수 있다.

 

이 글에서는 ST의 매뉴얼을 바탕으로 Yocto를 통해 리눅스 이미지를 빌드하는 방법에 대해서 기술한다. 참조 링크는 다음과 같다.

1. https://wiki.st.com/stm32mpu/wiki/STM32MP1_Distribution_Package

2. https://wiki.st.com/stm32mpu/wiki/Getting_started/STM32MP1_boards/STM32MP157C-DK2/Let%27s_start/Populate_the_target_and_boot_the_image

 

개발 환경

해당 글에서 사용된 개발 환경은 다음과 같다.

  • Hyper-V
  • RAM 12GB
  • Processor - 12
  • Ubuntu 18.04 LTS (Quick installation)

 

이미지 빌드 과정

1. Yocto 빌드에 필요한 패키지를 설치한다.

sudo apt-get update
sudo apt-get install -y build-essential chrpath gcc-multilib libgmp-dev liblz4-tool libmpc-dev libsdl1.2-dev pylint3 python3 python3-git python3-jinja2 python3-pip socat texinfo xterm zstd libssl-dev gawk
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 1

 

2. Repo 를 설치한다.

sudo wget http://commondatastorage.googleapis.com/git-repo-downloads/repo -P /usr/bin
sudo chmod a+x /usr/bin/repo

 

3. 개발 환경에서 Git 사용이 처음이라면 사용자 이름과 이메일을 설정한다. (최초 설정)

git config --global user.email "<이메일>"
git config --global user.name "<이름>"

 

4. Yocto 환경이 구성될 디렉터리를 생성한다.

mkdir ~/yocto
cd ~/yocto

 

5. Repo 를 통해 개발 환경 구성을 진행한다.

repo init -u https://github.com/STMicroelectronics/oe-manifest.git -b refs/tags/openstlinux-5.15-yocto-kirkstone-mp1-v22.06.15
repo sync

repo init 시 유저 어카운트에 대한 색상 표기 활성화 여부를 물어본다. 둘 중 아무거나 원하는대로 입력하면 된다. 본인은 y 를 하였음.

 

6. 타깃 보드에 대한 개발 환경 설정을 진행한다.

DISTRO=openstlinux-weston MACHINE=stm32mp15-disco source layers/meta-st/scripts/envsetup.sh

 

7. bitbake 를 통해 이미지 빌드를 시작한다. 기본적으로 코어 개수에 비례하여 멀티 태스킹이 진행되니 코어 수가 높을수록 빨리 진행된다. (Ryzen 5800x, Hyper-V Processor - 12 기준 약 2시간 소요)

bitbake st-image-weston

 

8. 작업이 완료되면 다음 디렉터리에서 빌드 결과물들을 확인할 수 있다.

cd ~/yocto/build-openstlinuxweston-stm32mp15-disco/tmp-glibc/deploy/images/stm32mp15-disco

 

9. scripts 디렉토리 내부에는 scdard에 write 할 수 있는 image를 만들어주는 스크립트를 제공한다. 해당 스크립트에 flash layout 파일을 지정하여 이미지를 생성한다. 레이아웃에 대한 자세한 정보는 다음 링크를 참조하면 좋다.

(https://wiki.st.com/stm32mpu/wiki/STM32_MPU_Flash_mapping#SD_card_memory_mapping)

./scripts/create_sdcard_from_flashlayout.sh ./flashlayout_st-image-weston/extensible/FlashLayout_sdcard_stm32mp157f-dk2-extensible.tsv

 

10. 그러면 디렉토리에 raw 확장자의 파일이 생성된 것을 확인할 수 있다.

./FlashLayout_sdcard_stm32mp157f-dk2-extensible.raw

 

11. 해당 파일을 sdcard 에 write 한다. (리눅스의 dd나 윈도의 Win32DiskImager를 사용하면 좋다.)

 

장치 부팅

장치에 sdcard 삽입 후 BOOT0, BOOT2 스위치를 ON 한 상태에서 전원을 인가하면 다음과 같은 화면이 출력되는 것을 확인할 수 있다.