Biến $ {D} trong lệnh cài đặt


11

Tôi đã thấy lệnh cài đặt sau được sử dụng trong nhiều công thức nấu ăn yocto

install -d ${D}${libdir}

Tôi nhận thức được lệnh cài đặt và mục đích của nó, tuy nhiên tôi không thể hiểu mục đích của biến $ {D} vì nó thường không được định nghĩa trong công thức. Ai đó có thể giải thích mục đích của biến vỏ này?


Kiểm tra Hướng dẫn sử dụng OpenEmbedded D: Thư mục đích .
meuh

Câu trả lời:


11

Các ${D}biến cho phép phần mềm được xây dựng phải được cài đặt trong một thư mục khác so với mục tiêu thực sự của nó. Ví dụ, bạn có thể cấu hình các phần mềm để libdir/usr/lib, nhưng điều đó đối với các thiết bị mục tiêu; Khi bạn chạy cài đặt trên hệ thống xây dựng của mình, bạn không muốn các tệp được xây dựng mới thực sự được cài đặt /usr/lib, bạn muốn đặt một nơi nào đó tách biệt để có thể dễ dàng xác định và sao chép chúng vào hệ thống đích. Vì vậy, bạn tạo một thư mục tạm thời và cài đặt ở đó:

mkdir /tmp/yocto-target
make install D=/tmp/yocto-target

Bằng cách đó, các tập tin kết thúc /tmp/yocto-target/usr/libvà như vậy. Sau đó, bạn có thể lưu trữ tất cả /tmp/yocto-targetbằng cách sử dụng bất kỳ công cụ nào bạn thích, bỏ /tmp/yocto-targettiền tố, sao chép kho lưu trữ vào thiết bị đích và cài đặt nội dung của nó ở đó.

Trong các hệ thống xây dựng khác, DESTDIRbiến được sử dụng cho cùng một lý do.


Việc cài đặt gói trong $ {D} $ {libdir} có sao chép đầu ra vào gói DESTDIR hoặc vào bộ mã hóa rootfs trong /tmp/work.../rootfs không?
tiền chuộc

Umm ... Tôi không chắc bạn đang hỏi gì; cài đặt trong ${D}${libdir}cài đặt trong bất kỳ thư mục nào Dlibdircác biến chỉ đến. DESTDIRđược sử dụng trong các hệ thống xây dựng khác, không phải của Yocto.
Stephen Kitt

Câu trả lời giải thích "mục đích" của $ {D}, nhưng như OP đã viết "nó thường không được định nghĩa trong công thức". Nó vẫn còn là một bí ẩn mà giá trị của nó đến từ. Ví dụ: tôi có một công thức mẫu được tạo bởi lệnh petalinux tạo tham chiếu $ {D} nhưng không có "bao gồm" hoặc bất kỳ đầu mối nào khác về nơi $ {D} được xác định.
2.718

1
@ 2.718 không được xác định vì người dùng chỉ định giá trị của nó, như được chỉ ra trong ví dụ của tôi: make install D=/tmp/yocto-targetsẽ cài đặt vào một tập hợp các thư mục bắt nguồn từ /tmp/yocto-target. Nếu không có giá trị nào được đưa ra, việc cài đặt được thực hiện /.
Stephen Kitt

@Stephen Kitt cảm ơn đã làm rõ. Không rõ ràng đối với một người mới chưa viết công thức nấu ăn BB trước đây và chỉ nhìn vào họ để hiểu làm thế nào tất cả được gắn kết với nhau.
2.718

4

${D}là đỉnh thông thường của đường dẫn được sử dụng bởi công thức Yocto trong đó công thức cài đặt các tệp thuộc về các gói được tạo bởi công thức này. Các thư mục bên dưới ${D}được hệ thống xây dựng quét để tìm các tệp để bao gồm các gói (như tệp RPM) và được bao gồm trong cây được gọi là sysroot nơi các tệp (ví dụ: thư viện và tiêu đề) được sử dụng bởi các gói khác. Có một số quy tắc mặc định cho lần quét này và các quy tắc có thể được mở rộng. Nên sử dụng các đường dẫn mặc định Yocto này dưới ${D}càng nhiều càng tốt để hưởng lợi từ các cơ chế tích hợp của Yocto.

${libdir}được định nghĩa trong bitbake.conf theo mặc định như sau: ${exec_prefix}/libđó là /usr/libtheo mặc định, được xác định trong cùng một tập tin.

install -d ${D}${libdir} 

Cuối cùng, lệnh shell "install" này chỉ tạo một thư mục lưu các tệp (ví dụ: do_install) cuối cùng sẽ được cài đặt /usr/libtrên mục tiêu.

${D}/a/b/cđối với tệp cchỉ là đường dẫn trung gian được sử dụng cho bao bì Yocto và ${D}bị "cắt bỏ" khi cùng một tệp ctrên hệ thống tệp đích. Vì vậy, ví dụ ${D}/a/b/csẽ ở /a/b/ctrên mục tiêu.

${D}được xác định theo mặc định trong poky / meta / conf / bitbake.conf là:

TMPDIR = "${TOPDIR}/tmp"
BASE_WORKDIR ?= "${TMPDIR}/work"
WORKDIR = "${BASE_WORKDIR}/${MULTIMACH_TARGET_SYS}/${PN}/${EXTENDPE}${PV}-${PR}"
D = "${WORKDIR}/image"

Tôi không quen thuộc với yocto; Dbiến này có hoạt động không , đưa ra câu trả lời của Stephen ?
Jeff Schaller
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.