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

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

by Evan Park

개요

최근 지인의 요청으로 STM32MP157C-DK2 보드의 리눅스 이미지를 빌드하는 방법에 대해서 기술해보고자 한다.

 

ST에서는 해당 보드의 이미지를 빌드하기 위해 Yocto 기반의 개발 환경을 제공해주고 있지만 이 글에서는 가벼운 환경에서 최소 기능으로 작동이 되는 이미지를 빠르게 빌드하기 위해 Buildroot 환경을 사용하도록 하겠다. (Buildroot에서 기본적으로 제공하는 세팅으로는 보드 지원에 한계가 있음. 설정을 바꾸는 방법으로 어느 정도 해결이 가능하나. 배보다 배꼽이 더 클 수 있음. 다음 글에서는 Yocto로 빌드하는 법을 기술할 예정)

 

Buildroot에 대해서 간단하게 설명하면. 임베디드 리눅스 이미지를 빌드하기 위한 도구이다. Buildroot에서 해당 타깃 보드에 대한 부트로더, 커널 이미지, 파일 시스템, 그리고 타깃 보드에서 사용할 여러 가지 리눅스 유틸리티들의 소스를 다운로드하여 빌드하고 최종적으로 보드에 적제 할 수 있는 이미지 파일을 생성해주는 역할을 해주고 있다. 빌드 도구들 중에서는 가볍고 빠른 편에 속한다.

 

STM32MP157C-DK2 보드에 대한 기본적인 설정 정보는 이미 Mainline buildroot에 올라가 있는 상태여서 별다른 작업 없이 buildroot 설치 후 바로 기본적인 이미지 빌드가 가능하다.

 

개발 환경

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

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

 

이미지 빌드 과정

1. Buildroot 를 설치 및 사용하기 위해 몇 가지 패키지를 설치한다.

sudo apt-get update
sudo apt-get install -y build-essential libncurses5-dev

 

2. Buildroot 설치를 위한 디렉터리 생성을 한다.

mkdir ~/buildroot
cd ~/buildroot

 

3. Buildroot 소스를 다운로드한다.

wget https://buildroot.org/downloads/buildroot-2022.05.tar.gz

 

4. Buildroot 소스를 압축 풀기 한다.

tar -xzvf ./buildroot-2022.05.tar.gz

 

5. Buildroot 소스 디렉터리로 이동 후 타깃 보드 설정 후 빌드를 시작한다.

cd ./buildroot-2022.05.tar.gz

make stm32mp157c_dk2_defconfig
make

 

6. 빌드가 완료되면 output/images 디렉터리에 각 빌드된 파일과 sdcard flash 용 이미지 파일이 생성된다.

cd ./output/images

ls -al
---------------------- (ls 명령어 실행 결과) ----------------------
total 28264
drwxr-xr-x 2 xxxxxxxx xxxxxxxx      4096  8월 31 22:26 ./
drwxrwxr-x 6 xxxxxxxx xxxxxxxx      4096  8월 31 22:26 ../
-rw-r--r-- 1 xxxxxxxx xxxxxxxx 125829120  8월 31 22:26 rootfs.ext2
lrwxrwxrwx 1 xxxxxxxx xxxxxxxx        11  8월 31 22:26 rootfs.ext4 -> rootfs.ext2
-rw-r--r-- 1 xxxxxxxx xxxxxxxx 128385024  8월 31 22:26 sdcard.img
-rwxr-xr-x 1 xxxxxxxx xxxxxxxx     60008  8월 31 22:26 stm32mp157c-dk2.dtb*
-rw-r--r-- 1 xxxxxxxx xxxxxxxx    210864  8월 31 22:12 tf-a-stm32mp157c-dk2.stm32
-rw-r--r-- 1 xxxxxxxx xxxxxxxx   1040748  8월 31 22:15 u-boot.stm32
-rw-r--r-- 1 xxxxxxxx xxxxxxxx   4426232  8월 31 22:26 zImage

 

7. sdcard.img를 리눅스 환경에서는 dd 명령어를 통해 flash 하지만. 윈도우에서 가상환경으로 빌드하고 있는 상태이니 sdcard.img를 윈도로 복사한 다음 Win32DiskImager를 통해 sdcard 에 write 하였다.

 

장치 부팅

그리고 sdcard 삽입, BOOT0, BOOT2 스위치를 ON 상태로 만든 다음 전원을 인가하면 다음과 같이 디스플레이에 리눅스 콘솔이 출력되는 것을 확인할 수 있다.