개요
이전 글에서 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
개발 환경
해당 글에서 사용된 개발 환경은 다음과 같다.
- 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 한 상태에서 전원을 인가하면 다음과 같은 화면이 출력되는 것을 확인할 수 있다.
'개발 > 임베디드' 카테고리의 다른 글
STM32MP157C-DK2 | Buildroot 를 활용한 리눅스 이미지 빌드 (0) | 2022.09.01 |
---|