Linux/buildroot

새로운 패키지 작성법 (.mk 파일 작성)

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

새로운 패키지 작성법 (.mk 파일 작성)

Buildroot는 경량화된 임베디드 리눅스 시스템을 손쉽게 빌드할 수 있도록 도와주는 도구입니다. Buildroot의 강점 중 하나는 다양한 패키지를 손쉽게 추가하고 관리할 수 있다는 점입니다. 이번 글에서는 Buildroot에서 새로운 패키지를 작성하는 방법을 설명하고, 핵심 파일인 .mk 파일을 작성하는 과정을 예제와 함께 소개하겠습니다.

1. Buildroot 패키지 구조 개요

Buildroot에서 패키지는 package/ 디렉터리 아래에 위치합니다. 새로운 패키지를 추가하기 위해서는 해당 디렉터리에 새로운 패키지 폴더를 생성하고, 필요한 파일을 작성해야 합니다.

새로운 패키지는 일반적으로 다음과 같은 파일들로 구성됩니다:

  • Config.in : Kconfig 시스템을 통해 패키지를 활성화할 수 있도록 설정하는 파일
  • <패키지명>.mk : 패키지를 빌드하는 규칙을 정의하는 Makefile
  • package/패키지명/ 디렉터리 : 패키지 관련 소스 코드 또는 빌드 관련 스크립트 포함 가능

이제, 예제 패키지를 만들어보겠습니다.

2. 새로운 패키지 디렉터리 생성

먼저, package/ 디렉터리 아래에 새로운 패키지 디렉터리를 생성합니다. 예를 들어 mypackage라는 패키지를 추가한다고 가정하면 다음과 같이 폴더를 만듭니다.

cd buildroot
mkdir -p package/mypackage

이제 해당 디렉터리 안에 필요한 파일을 생성해야 합니다.

3. Config.in 파일 작성

Config.in 파일은 Buildroot의 메뉴 설정(make menuconfig)에서 패키지를 활성화할 수 있도록 정의하는 역할을 합니다.

다음과 같이 package/mypackage/Config.in 파일을 작성합니다.

menu "My Custom Package"
    config BR2_PACKAGE_MYPACKAGE
        bool "mypackage"
        help
          간단한 예제 패키지입니다.
endmenu

이제 Config.in 파일을 Buildroot의 package/Config.in에 추가하여 패키지가 인식되도록 합니다.

echo "source \"package/mypackage/Config.in\"" >> package/Config.in

4. .mk 파일 작성

이제 가장 중요한 mypackage.mk 파일을 작성해야 합니다. 이 파일은 패키지의 다운로드, 빌드 및 설치 과정을 정의합니다.

package/mypackage/mypackage.mk 파일을 다음과 같이 작성합니다.

################################################################################
# mypackage
################################################################################

MYPACKAGE_VERSION = 1.0.0
MYPACKAGE_SITE = $(BR2_EXTERNAL)/package/mypackage
MYPACKAGE_SITE_METHOD = local

define MYPACKAGE_BUILD_CMDS
    $(MAKE) -C $(@D)
endef

define MYPACKAGE_INSTALL_TARGET_CMDS
    $(INSTALL) -D $(@D)/mypackage $(TARGET_DIR)/usr/bin/mypackage
endef

$(eval $(generic-package))

.mk 파일의 주요 요소 설명

  1. 패키지 버전 (MYPACKAGE_VERSION): 패키지의 버전을 정의합니다.
  2. 소스 코드 위치 (MYPACKAGE_SITE): 패키지 소스 코드가 위치하는 경로를 설정합니다. 이 예제에서는 로컬 경로를 사용했습니다.
  3. MYPACKAGE_BUILD_CMDS: 빌드할 때 실행할 명령을 정의합니다.
  4. MYPACKAGE_INSTALL_TARGET_CMDS: 빌드된 바이너리를 설치할 위치를 지정합니다.
  5. $(eval $(generic-package)): Buildroot의 기본 패키지 빌드 규칙을 적용합니다.

5. 소스 코드 추가 및 테스트

package/mypackage/ 디렉터리 내에 간단한 C 프로그램을 추가하여 테스트할 수 있습니다.

package/mypackage/mypackage.c 파일 작성:

#include <stdio.h>

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

package/mypackage/Makefile 파일 작성:

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

clean:
    rm -f mypackage

6. Buildroot에서 패키지 빌드 및 확인

이제 Buildroot에서 새로 추가한 패키지를 빌드할 수 있습니다.

make menuconfig

메뉴에서 mypackage를 활성화한 후, make 명령을 실행하여 빌드를 진행합니다.

make

빌드가 완료되면 /output/target/usr/bin/mypackage 파일이 생성됩니다.

7. 정리 및 결론

이번 글에서는 Buildroot에서 새로운 패키지를 추가하는 방법을 설명하였습니다. 패키지를 추가하는 과정에서 Config.in.mk 파일을 작성하는 것이 핵심이며, 이를 활용하여 다양한 패키지를 추가할 수 있습니다.

반응형