Linux/buildroot

Buildroot에서 패키지 추가하는 방법 (package/ 디렉터리 활용)

임베디드 친구 2025. 4. 17. 15:03
728x90
반응형

Buildroot에서 패키지 추가하는 방법 (package/ 디렉터리 활용)

Buildroot는 임베디드 리눅스 시스템을 위한 크로스 컴파일 환경을 제공하는 도구로, 필요한 소프트웨어 패키지를 쉽게 빌드할 수 있도록 구성되어 있습니다. Buildroot에서 특정 애플리케이션이나 라이브러리를 추가하려면 package/ 디렉터리를 활용하여 새로운 패키지를 정의해야 합니다. 이 글에서는 Buildroot에서 패키지를 추가하는 방법을 상세히 설명합니다.

1. Buildroot 패키지 시스템 개요

Buildroot에서 패키지는 package/ 디렉터리 아래에 위치하며, 각각의 패키지는 독립적인 디렉터리를 가집니다. 각 패키지는 다음과 같은 주요 파일을 포함해야 합니다:

  • Config.in: Kconfig 형식으로 패키지 옵션을 정의하는 파일
  • <패키지명>.mk: 패키지의 빌드 방법을 정의하는 Makefile
  • hashes (선택 사항): 소스 코드의 무결성을 확인하기 위한 해시 파일
  • patches/ (선택 사항): 패키지의 소스 코드에 적용할 패치 파일들

이제 실제로 패키지를 추가하는 방법을 알아보겠습니다.

2. 패키지 추가 단계

2.1 패키지 디렉터리 생성

새로운 패키지를 추가하려면 package/ 디렉터리 아래에 해당 패키지명을 가진 서브 디렉터리를 생성해야 합니다. 예를 들어, hello-world 패키지를 추가한다고 가정하면 다음과 같이 디렉터리를 만듭니다.

cd buildroot
mkdir -p package/hello-world

2.2 Config.in 파일 작성

Config.in 파일은 Kconfig 형식으로 패키지를 구성할 수 있도록 설정하는 파일입니다. 아래는 hello-world 패키지의 Config.in 예제입니다.

config BR2_PACKAGE_HELLO_WORLD
    bool "hello-world"
    help
      간단한 hello-world 패키지

작성한 Config.in 파일을 package/hello-world/ 디렉터리에 저장합니다.

2.3 hello-world.mk 파일 작성

hello-world.mk 파일에서는 패키지의 빌드 방법을 정의합니다. 다음은 간단한 hello-world.mk 파일의 예제입니다.

HELLO_WORLD_VERSION = 1.0
HELLO_WORLD_SITE = $(TOPDIR)/package/hello-world/src
HELLO_WORLD_SITE_METHOD = local

define HELLO_WORLD_BUILD_CMDS
    $(MAKE) CC="$(TARGET_CC)" -C $(@D)
endef

define HELLO_WORLD_INSTALL_TARGET_CMDS
    $(INSTALL) -D -m 0755 $(@D)/hello $(TARGET_DIR)/usr/bin/hello
endef

$(eval $(generic-package))

2.4 소스 코드 추가

Buildroot는 외부에서 소스를 다운로드하거나 로컬 파일을 참조할 수 있습니다. HELLO_WORLD_SITE_METHODlocal로 지정하면 로컬에서 소스를 참조합니다. 따라서 package/hello-world/src/ 디렉터리에 간단한 C 프로그램을 추가합니다.

mkdir -p package/hello-world/src

package/hello-world/src/hello.c 파일을 생성하고 아래 내용을 추가합니다.

#include <stdio.h>

int main() {
    printf("Hello, Buildroot!\n");
    return 0;
}

Makefile도 추가해야 합니다. package/hello-world/src/Makefile 파일을 생성하고 아래 내용을 입력합니다.

CC ?= gcc

all:
    $(CC) hello.c -o hello

2.5 package/Config.in에 패키지 등록

package/Config.in 파일을 열어 새로 추가한 패키지를 포함하도록 수정합니다.

source "package/hello-world/Config.in"

2.6 패키지 활성화 및 빌드

이제 Buildroot의 메뉴 설정에서 패키지를 활성화하고 빌드를 진행할 수 있습니다.

make menuconfig

메뉴에서 hello-world 패키지를 찾아 활성화한 후 저장하고 종료합니다. 이후 Buildroot를 다시 빌드하면 패키지가 포함된 파일 시스템이 생성됩니다.

make

3. 빌드 결과 확인

빌드가 완료된 후, output/target/usr/bin/hello 파일이 생성되었는지 확인합니다.

file output/target/usr/bin/hello

QEMU를 사용하여 테스트하려면 다음과 같이 실행할 수 있습니다.

qemu-arm -L output/staging output/target/usr/bin/hello

4. 정리 및 마무리

이 글에서는 Buildroot에서 새로운 패키지를 추가하는 방법을 단계별로 설명하였습니다. 핵심 과정은 다음과 같습니다:

  1. package/ 디렉터리에 새로운 패키지 디렉터리 생성
  2. Config.in<패키지명>.mk 파일 작성
  3. 소스 코드 및 빌드 스크립트 추가
  4. Buildroot의 Config.in 파일에 패키지 등록
  5. make menuconfig로 패키지를 활성화 후 빌드 수행

이 과정을 통해 원하는 애플리케이션을 Buildroot에 쉽게 통합할 수 있습니다. 이후에는 더 복잡한 패키지를 추가할 수 있도록 패치 적용, 의존성 설정 등의 고급 기능을 활용해보는 것도 추천드립니다.

반응형