반응형


${PN}은 Package Name의 약자로, 현재 레시피의 기본 패키지 이름을 나타냅니다.
기본 개념
레시피 파일명이 myapp_1.0.bb라면:
${PN} = myapp
${PV} = 1.0 (Package Version)
${PR} = r0 (Package Release, 기본값)
${P} = ${PN}-${PV} = myapp-1.0
주요 사용 예시
1. 파일/디렉토리 경로
do_install() {
    install -d ${D}${sysconfdir}/${PN}
    # /etc/myapp/ 디렉토리 생성
    
    install -m 0644 config ${D}${sysconfdir}/${PN}/myapp.conf
    # /etc/myapp/myapp.conf 파일 설치
}
2. 소스 디렉토리
S = "${WORKDIR}/${PN}-${PV}"
# 보통 압축 해제된 소스가 myapp-1.0/ 디렉토리에 있을 때
3. 설치 경로
FILES_${PN} = "${bindir}/${PN} \
               ${sysconfdir}/${PN}/* \
               ${datadir}/${PN}/*"
4. systemd 서비스
SYSTEMD_SERVICE_${PN} = "${PN}.service"
# myapp.service 파일 지정

do_install_append() {
    install -d ${D}${systemd_system_unitdir}
    install -m 0644 ${WORKDIR}/${PN}.service ${D}${systemd_system_unitdir}/
}
패키지 분할 시
하나의 레시피가 여러 패키지를 생성할 수 있습니다:
# myapp_1.0.bb

PACKAGES = "${PN} ${PN}-dev ${PN}-dbg ${PN}-doc"

FILES_${PN} = "${bindir}/* ${libdir}/lib*.so.*"
FILES_${PN}-dev = "${includedir}/* ${libdir}/lib*.so"
FILES_${PN}-dbg = "${bindir}/.debug ${libdir}/.debug"
FILES_${PN}-doc = "${datadir}/doc/${PN}/*"
이 경우:
${PN} = myapp (메인 패키지)
${PN}-dev = myapp-dev
${PN}-dbg = myapp-dbg
${PN}-doc = myapp-doc
실전 예제
# reboot-manager_1.0.bb

SUMMARY = "Reboot Manager"
LICENSE = "MIT"

SRC_URI = "file://reboot-manager.sh \
           file://${PN}.service"

do_install() {
    # /usr/bin/reboot-manager 설치
    install -d ${D}${bindir}
    install -m 0755 ${WORKDIR}/reboot-manager.sh ${D}${bindir}/${PN}
    
    # /etc/reboot-manager/ 설정 디렉토리
    install -d ${D}${sysconfdir}/${PN}
    
    # systemd 서비스 파일
    install -d ${D}${systemd_system_unitdir}
    install -m 0644 ${WORKDIR}/${PN}.service ${D}${systemd_system_unitdir}/
}

SYSTEMD_SERVICE_${PN} = "${PN}.service"

반응형

'Build(빌드) > Yocto' 카테고리의 다른 글

[Yocto] Kernel Config (커널 구성) 설정방법  (0) 2025.07.21