| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- atmel
- nucleo
- Visual Studio
- WPF
- esp32
- QEMU
- raspberrypi
- AArch64
- 리눅스
- platformio
- C++
- avr-gcc
- Debug
- bare metal
- Arduino
- GPIO
- Debugging
- 라즈베리파이
- vscode
- Raspberry
- 디버깅
- UART
- 아두이노
- c#
- buildroot
- AVR
- yocto
- STM32
- Linux
- Visual Studio Code
- Today
- Total
임베디드를 좋아하는 조금 특이한 개발자?
[Buildroot] Helloworld 어플리케이션 개발 (rootfs overlay 방법) 본문
- 개발 환경
개발 보드 : Raspberrypi 4
WSL2 (Ubuntu 24.04 LTS)
buildroot(2024.02)
1. 서론
제가 처음 buildroot를 사용해 리눅스를 빌드하고 난 후 든 생각이 "결국 내가 빌드한 리눅스를 가지고 어떤 것을 할 수 있나?"였습니다. apt 패키지 매니저도 없을 뿐더러 제대로 동작하는 것이 없어 보입니다. 그럴때는 역시 간단한 Hello world를 출력하는 프로그램을 개발해보면서 점점 살을 붙여 나가는 방법으로 공부하는 것이 좋다고 생각합니다. 그러므로 C언어를 통해 간단한 프로그램을 개발해보도록 하겠습니다.
주의)
이 포스트에서는 이미 Buildroot을 통해 타겟 보드에서 실행할 운영체제를 빌드한 상태임을 가정하고 진행합니다.
만약 아직 Buildroot를 통해 운영체제를 빌드하지 않은 상태라면, 아래의 포스트를 통해 운영제체를 빌드하신 후 진행 바랍니다.
- RaspberryPI 또는 BeagleBone에서 동작하는 리눅스 빌드
https://littlebitodd-developer.tistory.com/19
Buildroot를 이용하여 Custom Linux 빌드 (Beaglebone, Raspberrypi 용)
참고 자료https://buildroot.org/downloads/manual/manual.html#_getting_started The Buildroot user manualPackage imagemagick installs the following scripts: $(STAGING_DIR)/usr/bin/{Magick,Magick++,MagickCore,MagickWand,Wand}-config So it’s fixup would b
littlebitodd-developer.tistory.com
- Qemu 에뮬레이터에서 동작하는 리눅스 빌드
https://littlebitodd-developer.tistory.com/74
[Linux Debugging] Buildroot를 통해 디버깅할 리눅스 빌드
- 개발 환경WSL2 (Ubuntu 24.04 LTS)buildroot(2024.02)1. 서론 리눅스 커널을 공부하면서 어떻게 하면 일반적인 어플리케이션을 디버깅 할 때 처럼 직관적이고 커널의 코드흐름을 확인 할 수 있는 방법을 고
littlebitodd-developer.tistory.com
2. Toolchain 준비
이미 Buildroot를 통해 운영체제를 빌드하였다면 이미 Toolchain은 설치되어 있습니다.
ls ./output/host/bin | grep gcc

output/host/bin 폴더을 확인하면 사용가능한 toolchain이 있습니다. 물론 타켓 보드의 MCU 아키텍처에 따라 toolchain이 다르므로 정확히 확인하셔야 합니다. 저희는 해당 툴체인을 사용할 것이므로 CC 환경변수로 등록 하도록 하겠습니다.
export CC=$(pwd)/output/host/bin/aarch64-buildroot-linux-gnu-gcc

이제 CC 환경변수를 통해 Toolchain를 사용할 수 있습니다.
3. Toolchain으로 프로그램 개발
# test-hello 폴더 생성 및 이동
mkdir test-hello && cd test-hello
# main.c 파일 생성
touch main.c

먼저 main.c를 저장할 폴더을 생성한 후 main.c를 생성하여 개발을 진행해보도록 하겠습니다.
main.c을 다음과 같이 코딩합니다.
|
1
2
3
4
5
6
7
8
|
#include <stdio.h>
int main(void){
printf("Hello world\n");
return 0;
}
|
cs |
이제 CC 환경변수에 등록한 Toolchain으로 빌드하도록 하겠습니다.
$CC main.c -o test-hello

위 그림처럼 file 명령어를 통해 실행파일이 aarch64 아키텍처로 잘 나오는 것을 확인하였습니다.
4. rootfs overlay 설정
rootfs overlay는 최종적으로 빌드되어 생성된 운영체제에서 사용할 filesystem에 저희가 설정한 폴더를 Overlay하여 원하는 파일을 filesystem에 추가하는 방법입니다. 먼저 해야하는 일은 파일 시스템에 덮어쓸 폴더를 생성하는 것입니다. buildroot에서 추천하는 방법은 타겟보드에 rootfs overlay 폴더를 생성하는 것입니다.

하지만 어디에 폴더를 생성하던 상관은 크게 없습니다. 중요한것은 나중에 경로 설정을 제대로 해주기만 하면 됩니다.
# rootfs_overlay 폴더 생성
mkdir -p rootf_overlay/usr/bin
# test-hello 실행 파일을 rootfs overlay 폴더의 usr/bin 에 붙여 넣기
cp ./test-hello/test-hello ./rootf_overlay/usr/bin

이제 마지막으로 rootfs overlay의 위치를 설정하도록 하겠습니다.
cd output
make menuconfig

System configuration
|-- BR2_ROOTFS_OVERLAY


저의 경우 프로젝트 폴더를 BR2_EXTERNAL_LVGL_RPI4_PATH라는 변수로 설정하였지만, 절대 경로로 설정하셔도 됩니다.
5. Buildroot 빌드
rootfs overlay를 설정한 후 buildroot로 운영체제를 재빌드 해주어야 합니다.
make
# rootfs overlay에 추가한 test-hello 파일이 있는지 확인
find ./target -name "test-hello"

6. test-hello 실행

이제 image를 설치하고 타겟 보드에서 실행하면 위처럼 "Hello world"가 정상적으로 출력 됨을 확인 할 수 있습니다.
'Embedded > Buildroot' 카테고리의 다른 글
| [Buildroot] LVGL 개발을 위한 환경 구축 (1) | 2025.07.09 |
|---|---|
| [Buildroot] Buildroot와 독립적인 개발 환경 구축 (0) | 2025.07.06 |
| [Buildroot] Raspberrypi에서 DRM 설정 (0) | 2025.07.05 |
| buildroot 빌드시 PATH 애러 해결 (0) | 2025.03.04 |
| Buildroot를 이용하여 Custom Linux 빌드 (Beaglebone, Raspberrypi 용) (0) | 2025.03.04 |