[Buildroot] 빌드루트로 임베디드 리눅스를 구축하여 라즈베리파이5에 올리기

2025. 12. 21. 17:22·Buildroot
반응형
 

[STM32/라즈베리파이/Qt] TA모닝 아날로그 계기판 디지털 계기판으로 만들기(라즈베리파이OS 환경)

* 이번 프로젝트 작업기는 포트폴리오용으로 쓰는 것이라 이전 프로젝트의 작업기보다 조금 더 자세히 쓴 글이라는 점을 참고 바랍니다. 1. 프로젝트 기술 스택언어: C, C++, QML플랫폼: STM32, ESP32, R

gun-ny.tistory.com

 

[Buildroot] 빌드루트로 임베디드 리눅스를 구축하여 라즈베리파이5에 올리기

[STM32/라즈베리파이/Qt] TA모닝 아날로그 계기판 디지털 계기판으로 만들기* 이번 프로젝트 작업기는 포트폴리오용으로 쓰는 것이라 이전 프로젝트의 작업기보다 조금 더 자세히 쓴 글이라는 점

gun-ny.tistory.com

 

[Buildroot] 빌드루트를 올린 라즈베리파이5에서 Qt 애플리케이션 실행

[STM32/라즈베리파이/Qt] TA모닝 아날로그 계기판 디지털 계기판으로 만들기* 이번 프로젝트 작업기는 포트폴리오용으로 쓰는 것이라 이전 프로젝트의 작업기보다 조금 더 자세히 쓴 글이라는 점

gun-ny.tistory.com

 

[Buildroot/Qt/라즈베리파이] TA모닝 아날로그 계기판 디지털 계기판으로 만들기(빌드루트 임베디드

[STM32/라즈베리파이/Qt] TA모닝 아날로그 계기판 디지털 계기판으로 만들기(라즈베리파이OS 환경)* 이번 프로젝트 작업기는 포트폴리오용으로 쓰는 것이라 이전 프로젝트의 작업기보다 조금 더 자

gun-ny.tistory.com

 

해당 게시글은 위 게시글과 순서대로 연결되어 있으며 2번째 글이다.

 

 

[STM32/라즈베리파이/Qt] TA모닝 아날로그 계기판 디지털 계기판으로 만들기

* 이번 프로젝트 작업기는 포트폴리오용으로 쓰는 것이라 이전 프로젝트의 작업기보다 조금 더 자세히 쓴 글이라는 점을 참고 바랍니다. 1. 프로젝트 기술 스택언어: C, C++, QML플랫폼: STM32, ESP32, R

gun-ny.tistory.com

이전에 차량 계기판의 아날로그 및 CAN 데이터를 STM32로 전달받고, 해석 및 가공을 거쳐 UART 데이터로 라즈베리파이로 전송하여, 라즈베리파이 내 Qt 애플리케이션이 UART 데이터를 가지고 차량 계기판의 정보를 실시간으로 표출 해주는 시스템을 구축한 적이 있다.

 

그런데 전원 인가 후 나머지 시스템은 즉각 준비 상태가 되는데 라즈베리파이의 경우 부팅 후 Qt 애플리케이션 실행까지 시간이 꽤 소요된다.

 

임베디드 시스템은 최적의 자원으로 최고의 효율을 발휘해야 한다.

위 시스템은 계기판 기능을 하는 임베디드 시스템으로써는 탈락이다.

 

어떻게 하면 부팅 후 애플리케이션을 빠르게 실행 할 수 있을까?

위 시스템에서는 라즈베리파이OS를 부팅하는데 대부분의 시간을 소요한다.

라즈베리파이OS에서 로드하는 하드웨어를 줄이고 실행하는 서비스를 줄이면 어느정도 부팅시간을 단축할 수 있지만 한계가 있다.

여기서 임베디드 리눅스가 등장한다.

 

라즈베리파이OS의 전신인 리눅스에서 덜어내고 덜어내어 최적화를 시켜 순수 목표하는 기능을 운영하게끔 만드는 운영체제가 임베디드 리눅스이다.

 

Qt 애플리케이션을 실행할 수 있는 환경으로만 구축한 임베디드 리눅스로 부팅시간을 크게 단축시킬 수 있다.

대표적인 임베디드 리눅스 메타 빌드 시스템은 Buildroot와 Yocto가 있다.

 

이번 글에서는 간단히 빌드루트로 임베디드 리눅스를 구축하여 라즈베리파이5에 올려보기로 한다.

 

개발환경 구축


하드웨어 준비물

  • 라즈베리파이5
  • 디버그 케이블
  • (선택) 모니터 및 micro HDMI to HDMI 케이블 및 키보드
  • 리눅스 운영체제(우분투 추천) 및 가상 머신(VMware 추천)

 

개발환경을 구축하기 전에 어떤 것들을 먼저 준비해야 하는지 살펴보자

 

라즈베리파이5 (출처 : 라즈베리파이)

필자는 라즈베리파이5를 기준으로 글을 작성하도록 하겠다.

아래 내용에서 디바이스 트리 오버레이와 디버그를 위해 알아놓으면 좋을 라즈베리파이4와의 차이점은 당연하겠지만 하드웨어 변경과 더불어 기존 GPIO 핀에 배치됐던 UART 핀이 UART 커넥터로 배치되었다.

 

라즈베리파이5 구성도 중 일부 (출처 : 라즈베리파이)
라즈베리파이5 디버그 케이블 (출처 : 알리익스프레스)

위와 같이 UART 커넥터로 배치 되었는데 화면없이 간단하게 디버그 하려면 라즈베리파이5용 디버그 케이블을 꼭 준비하는 것을 강력히 추천한다.

불가피하게 준비하지 못했다면 추후에 bootfs를 수정하여 라즈베리파이4와 같이 GPIO 핀과 UART 통신이 가능하게 끔 만들 수 있다.

또한 디버그 케이블 자체가 없다면 모니터와 HDMI 케이블(micro HDMI to HDMI)과 키보드로 라즈베리파이5와 통신을 할 수 있다.

 

위와 같은 준비 없이 "ssh를 활성화한 상태에서 빌드루트를 빌드하여 ssh로 통신하면 되지 않아요?"라는 생각은 필자와 같이 하루를 통으로 날릴 수 있는 생각이니 디버그 케이블 또는 화면과 입력장치를 통해 라즈베리파이5와의 통신을 구축하는게 좋다.

 

그리고 마지막으로 빌드루트를 구축할 리눅스 운영체제이다.

필자는 우분투를 기준으로 기준으로 쓰도록 하겠다.

 

참고로 우분투를 돌리는 가상 머신은 VMware이다.

얼마전까지 유료였던 VMware가 무료로 풀려 개인 사용자들은 VMware를 무료로 사용할 수 있게 되었다.

VirtualBox도 사용 해봤는데 필자가 사용하기로는 VMware가 더 나은거 같다.

 

빌드루트 다운로드


빌드루트를 다운로드 하기에 앞서 빌드루트 메뉴얼 문서(https://buildroot.org/downloads/manual/manual.html)에서는 아래와 같은 패키지를 필수 설치와 선택 설치로 나눠놓고 있다.

 

Buildroot 필수 설치 패키지(출처 : Buildroot)
Buildroot 선택 설치 패키지 (출처 : Buildroot)

sudo apt update && sudo apt upgrade -y && sudo apt install -y which \
sed make binutils build-essential diffutils gcc g++ bash patch gzip \
bzip2 perl tar cpio unzip rsync file bc findutils wget \
curl cvs git mercurial openssh-client subversion \
libncurses5-dev libncursesw5-dev python3

위 명령어를 통해 필수 패키지 및 선택적 패키지를 설치하도록 한다.

해당 패키지들이 없으면 빌드 중 오류로 인해 빌드가 중단될 수 있으니 꼭 설치해야 한다.

 

mkdir -p ~/projects/Buildroot_RPi5_Qt_GUI
cd ~/projects/Buildroot_RPi5_Qt_GUI
# 선택 1
wget https://buildroot.org/downloads/buildroot-2025.11.tar.gz
tar zxf buildroot-2024.11.1.tar.gz --strip-components=1
# 선택 2
# git clone -b 2025.11.x --single-branch https://github.com/buildroot/buildroot.git .

그리고 위 명령어를 한줄씩 실행시켜 빌드루트를 다운로드 하고 압축을 해제하도록 한다.

 

필자는 사용자 폴더에 'projects' 폴더를 생성하고 그 안에 'Buildroot_RPi5_Qt_GUI' 폴더를 생성하여 해당 폴더로 작업할 것이다.

mkdir 명령어의 '-p' 옵션은 중간에 존재하지 않는 폴더를 만들어 주는 옵션이다.

tar 명령어의 '--strip-components=1' 옵션은 옵션이 없었다면 'buildroot-2025.11' 폴더에 압축을 풀지만 해당 옵션을 통해 압축 파일이 있는 폴더에 압축을 푸는 것이다. 일반적인 '압축 풀기'가 아닌 '여기에 압축 풀기' 같은 것이다.

 

압축해제 없이 바로 다운로드 받고 싶으면 '# 선택 2'를 통해 git 클론을 하면 된다.

뒤에 붙은 '.'은 위 '--strip-components=1'과 같이 'buildroot' 폴더를 따로 생성하지 않고 해당 폴더에 바로 클론하는 것이다.

 

아래 링크를 통해 빌드루트의 모든 버전을 확인 할 수 있다.

2025년 12월 기준으로 main 브랜치를 클론하는 것보다는 어느정도 안정된 2025.11 버전으로 진행하는 것을 추천한다.

 

빌드루트 모든 버전 목록 : https://buildroot.org/downloads

 

Index of /downloads/

 

buildroot.org

 

빌드루트 깃허브 : https://github.com/buildroot/buildroot

 

GitHub - buildroot/buildroot: Buildroot, making embedded Linux easy. Note that this is not the official repository, but only a m

Buildroot, making embedded Linux easy. Note that this is not the official repository, but only a mirror. The official Git repository is at https://gitlab.com/buildroot.org/buildroot/. Do not open i...

github.com

 

빌드루트 설정


cd ~/projects/Buildroot_RPi5_Qt_GUI
make menuconfig

라즈베리파이5 보드 설정을 하기 전에 우선 'make menuconfig'를 통해 설정 메뉴로 들어가보자

 

위아래 방향키를 통해 'Target option'을 선택한다.

 

그럼 위와 같이 'Target Architecture'가 'i386'으로 설정이 되어 있을 것이다.

 

앞으로 이 menuconfig를 통해 빌드루트를 설정하여 리눅스를 커스텀 할 것이다.

 

좌우 방향키를 통해 Exit -> Exit -> No를 선택하여 터미널 창으로 복귀한다.

 

make list-defconfigs

위 명령어를 통해 빌드루트에서 어떤 아키텍쳐 보드들을 지원하는지 알 수 있다.

 

목록 중간을 보면 라즈베리파이5도 지원하는 것을 볼 수 있다.

 

make raspberrypi5_defconfig

위 사진을 보면 'raspberrypi5_defconfig'라고 적혀있다.

그대로 'make'를 앞에 붙여 위 명령어를 입력하면 아래와 같은 메시지가 출력될 것이다.

 

위 명령어를 통해 빌드루트 폴더의 .config가 라즈베리파이5 보드 기준으로 설정이 되고 output 폴더에 build 폴더가 구성됨으로써 빌드 준비를 마친 것이다.

 

make menuconfig

다시 menuconfig로 들어가보자

 

'Target options'를 들어가보면 'Target Architecture'가 위에서 보았던 'i386'에서 'AArch64'로 바뀐 것을 볼 수 있다.

위 'make raspberrypi5_defconfig'를 통해 menuconfig의 설정들이 바뀐 것이다.

 

참고로 AArch64는 Arm 아키텍쳐의 64비트 표기명이며 Arm64라고도 한다.

라즈베리파이5는 Broadcom BCM2712 Soc가 탑재되어 있으며 ARM Cortex-A76 프로세서를 탑재하고 있다.

 

여기서 가장 중요

menuconfig에서 한가지 더 설정해줘야 할게 있다.

아래 글에 써놨지만 여기서 한번 더 써보도록 하겠다.

 

[Embedded Linux/Buildroot] 라즈베리파이5 빌드루트 부팅 에러 0xbe000011 -- SError (end Kernel panic - not syncing:

빌드루트에서 'make raspberrypi5_defconfig' 설정 후 바로 'make'로 빌드하여 바로 라즈베리파이5에 올렸다면 몇몇 라즈베리파이5 보드에서는 위 에러를 띄울 것이다. 라즈베리파이5 빌드루트 자료는 찾

gun-ny.tistory.com

메뉴얼이나 다른 포럼에서는 'make raspberrypi5_defconfig'만 하고 바로 'make'를 해도 된다고 하는데 그럼 몇몇 라즈베리파이5는 부팅하면서 위와 같은 code 0xbe000011 -- SError (end Kernel panic - not syncing: Asynchronous SError Interrupt) 에러 로그를 볼 수 있을 것이다.

 

로그를 잘 살펴보면 'Hardware name: Raspberry Pi 5 Model B Rev 1.1 (DT)' 구문이 있다.

확실하지 않지만 Rev 1.0 디바이스 트리까지는 따로 설정을 안해줘도 부팅이 잘 되는데 Rev 1.1의 하드웨어 구성 변경이 있었는지 Rev 1.1 디바이스 트리부터는 디바이스 트리 오버레이 설정을 해줘야 부팅이 된다.

 

라즈베리파이5가 출시한지 오래되진 않았어도 시간이 꽤 지났는데 빌드루트에 대한 정보는 많이 부족했다.

해외포럼도 빌드루트로 개발은 하는데 보드들이 다 달라서 정보들을 찾는데 시간이 꽤 걸렸다.

한국어로 된 참고 문서? 거의 없다고 봐야한다. 내가 이 글을 쓰는 이유이다.

챗GPT? 오답을 계속 정답처럼 말하는데 필자의 글을 학습하면 이젠 정답을 말할 수 있지 않을까 한다.

 

각설하고 Target packages -> Hardware handling -> Firmware 메뉴에서 Install DTB overlays 옵션을 켜주면 된다.

그렇게 Exit -> Exit -> Exit -> Exit -> Yes를 선택하여 menuconfig 설정을 저장해준다.

 

빌드를 하기에 앞서 가상 머신(VMware)의 Memory 용량과 Processors 개수를 호스트 컴퓨터의 사양을 생각해서 적절히 설정해주는 것을 추천한다. 참고로 위 설정으로 빌드 시간은 30분 정도 걸렸던거 같다.

 

make
# 또는
# make -j$(proc)

이제 빌드를 하면 된다.

'make -j$(proc)'로 병렬 빌드하면 더 빨리 빌드를 마칠줄 알았는데 'make'랑 별 차이가 없다. 메뉴얼을 읽어보니 병렬 빌드를 지원하지 않는다고 기재되어 있다.

메뉴얼에는 'make'로 빌드하니 'make'로 빌드하도록 하겠다.

 

ls output/images

빌드를 성공적으로 마치면 위 사진과 같은 메시지가 마지막으로 표출되며 위 명령어를 통해 sdcard.img 이미지 파일이 생성된 것을 확인 하였다면 무사히 빌드를 마친 것이다.

 

빌드루트 올리기


gnome-disks

Buildroot를 구울 SD카드를 삽입하고 위 명령어를 통해 디스크 관리창을 띄운다.

앱 -> 유틸리티 -> 디스크에서도 실행 할 수 있다.

 

삽입한 SD카드를 포맷한다.

 

sudo dd if=output/images/sdcard.img of=/dev/sdb bs=4M status=progress

그리고 포맷 후 장치명(/dev/sdb)를 확인하여 위 명령어의 of 옵션에 넣어 실행하여 SD카드를 구워준다.

 

bs 옵션은 블록사이즈를 설정할 수 있다. 있고 없고의 차이가 크니 넣도록 하자

버그인지 모르겠지만 bs 옵션을 넣으면 현재 상황 실시간으로 표출되지 않으니 잠깐 기다리도록 하자

30초에서~5분까지 SD카드마다 속도가 다르다.

 

빌드루트 부팅


그리고 SD카드를 라즈베리파이5에 삽입 후 부팅하면 위와 같이 성공적으로 부팅이 된것을 확인할 수 있다.

 


# Git 클론
git clone -b basic --single-branch https://github.com/gitgunny/Buildroot_RPi5_Qt_GUI.git

# 프로젝트 폴더 이동
cd ./Buildroot_RPi5_Qt_GUI

# 전체 빌드
make

라즈베리파이5에 기본적인 Buildroot 설정만 하여 바로 부팅하고 싶으면 필자의 깃허브에서 'basic' 브랜치로 따로 빼놓았으니 클론하여 바로 make해서 테스트 해보면 된다.

 

이후에는 Qt 애플리케이션을 실행할 수 있는 환경을 설정하여 GUI를 띄워보는 글을 써보도록 하겠다.

앞으로의 과정은 아래 GitHub에서도 확인할 수 있다.

 

 

GitHub - gitgunny/Buildroot_RPi5_Qt_GUI

Contribute to gitgunny/Buildroot_RPi5_Qt_GUI development by creating an account on GitHub.

github.com

 

참고 문서

¹⁾ https://buildroot.org/downloads/manual/manual.html

²⁾ https://dev.to/pfs/custom-linux-image-for-raspberry-pi-5-a-guide-with-buildroot-bp3

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'Buildroot' 카테고리의 다른 글

[Buildroot] 빌드루트 rootfs 파티션 용량 설정  (0) 2025.12.21
[Buildroot] 라즈베리파이5 빌드루트 부팅 에러 0xbe000011 -- SError (end Kernel panic - not syncing: Asynchronous SError Interrupt) 해결법  (0) 2025.12.21
[Buildroot] 필기 노트  (0) 2025.12.12
[Buildroot] 목차 저장용  (0) 2025.11.21
[Buildroot] 저장용  (0) 2025.11.20
'Buildroot' 카테고리의 다른 글
  • [Buildroot] 빌드루트 rootfs 파티션 용량 설정
  • [Buildroot] 라즈베리파이5 빌드루트 부팅 에러 0xbe000011 -- SError (end Kernel panic - not syncing: Asynchronous SError Interrupt) 해결법
  • [Buildroot] 필기 노트
  • [Buildroot] 목차 저장용
이니셜P
이니셜P
카카오톡 문의 : initial_p 유튜브 : https://www.youtube.com/@gun-ny
    반응형
  • 이니셜P
    #include <이니셜.P>
    이니셜P
  • 전체
    오늘
    어제
    • 분류 전체보기 (93)
      • 협력점 안내 (1)
      • 프로젝트 작업기 (11)
      • 프로젝트 포트폴리오 (3)
      • 끄적끄적 (2)
      • Arduino (11)
      • STM32 (0)
      • ESP32 (8)
      • EasyEDA (0)
      • QT (5)
      • LVGL (0)
      • Buildroot (14)
      • Yocto (2)
      • Git (2)
      • C언어, C++ (18)
      • 프로그래머스 (16)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      Embedded
      SError
      Qt
      linux
      리눅스
      can
      모닝
      esp32
      Buildroot
      RaspberryPi
      rootfs
      빌드루트
      Overlay
      임베디드
      아두이노
      0xbe000011
      SN65HVD230
      루트파일시스템
      라즈베리파이
      계기판
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.5
    이니셜P
    [Buildroot] 빌드루트로 임베디드 리눅스를 구축하여 라즈베리파이5에 올리기
    상단으로

    티스토리툴바