2013-03-16 30 views
5

Tôi đã có một Raspberry PI với Emdebian được cài đặt trên đó và muốn các dự án biên dịch chéo.Kết hợp rootfs hiện có với toolchain tùy chỉnh

Có rất nhiều tài liệu về cách lấy chuỗi công cụ và xây dựng một dự án đơn giản với nó. Bản thân tôi quản lý để xây dựng một toolchain với crosstool-ng và đã viết một chương trình hello world hoạt động tốt.

Điều tôi không hiểu là cách xử lý việc biên dịch chéo các dự án phức tạp hơn như Qt, có phụ thuộc vào các thư viện khác. Hãy sử dụng libdbus làm ví dụ, vì đó là một trong những phụ thuộc của Qt.

Emdebian đã cài đặt đã chứa libdbus.so, vì vậy tự nhiên tôi muốn sử dụng nó, thay vì biên dịch chéo libdbus.so của riêng tôi, khi biên dịch tất cả các phụ thuộc của Qt sẽ mất rất nhiều thời gian.

Đối với cross-biên dịch, có hai thư mục quan trọng, như xa như tôi hiểu:

  1. Các "dàn" thư mục, nơi mà tất cả các thư viện và các ứng dụng được cài đặt sống. Điều này ban đầu là một bản sao của thư mục sysroot của toolchain, và được phổ biến với nhiều thư viện hơn khi chúng được biên dịch chéo.
  2. Thư mục "rootfs", tương đương với nội dung trên thiết bị - về cơ bản là bản sao của thư mục dàn trang mà không cần những thứ không cần thiết như tệp tài liệu và tiêu đề. Theo như tôi hiểu, cách tiếp cận tốt nhất là sao chép các tập tin cần thiết từ thư mục dàn dựng vào rootfs.

Lấy thư mục rootfs dễ dàng, vì đó có thể là một NFS gắn kết từ thiết bị. Nhưng làm thế nào để có được một thư mục dàn dựng cho cài đặt Emdebian hiện có trên PI? Thư mục dàn dựng cần bao gồm những thứ như tiêu đề dbus, không được cài đặt trên rootfs.

Một số người chỉ cần cài đặt tiêu đề dbus trên thiết bị, với cài đặt apt-get libdbus-dev và sau đó sử dụng rootfs làm thư mục dàn dựng. Với thiết lập này, không có sự phân biệt giữa rootfs và dàn dựng nữa, với bất lợi là rootfs bị ô nhiễm với tiêu đề, tài liệu và vân vân. Ưu điểm của khóa học là nó rất dễ dàng.

Cách tốt nhất để có được các tiêu đề dbus vào thư mục dàn dựng của tôi trên máy chủ của tôi là gì? Cách tiếp cận thông thường mà mọi người sử dụng trong tình huống này là gì?

Là một câu hỏi phụ, tại sao cách tiếp cận có được một chuỗi công cụ, biên dịch một chương trình và sau đó sao chép nó vào một công việc mục tiêu? Toolchain có các phiên bản libc, libstdC++ vv của riêng chúng, chúng không tương thích với các phiên bản được cài đặt trên đích không? Đặc biệt là khi tạo ra bằng cách sử dụng một toolchain tùy chỉnh được biên dịch với crosstool-ng?

(Lưu ý rằng tôi không hỏi làm thế nào để biên dịch Qt, tôi có thể hình dung ra rằng bản thân mình. Câu hỏi của tôi là tổng quát hơn, khoảng cách tiếp cận để thực hiện khi kết hợp một toolchain tùy chỉnh với một cài đặt hiện có/rootfs)

Trả lời

1

Theo kinh nghiệm của tôi, bạn không cần phải biên dịch dbus của bạn.Bạn có thể làm điều đó như

Tạo Debian qua rootfs bởi debootstrap bởi https://wiki.debian.org/EmDebian/CrossDebootstrap
Tạo của bạn cros-biên dịch toolchain bởi crosstool-ng, và chắc chắn rằng phiên bản hạt nhân và phiên bản eglibc cũng giống như rootfs tạo ra bởi 1 bước
xây dựng QT bởi

CPPFLAGS=-I<rootfs>/usr/include \ 
LDFLAGS=-L<rootfs>/lib -L<rootfs>/usr/lib -Wl,-rpath-link,<rootfs>/lib,<rootfs>/usr/lib \ 
./configure <your options> 
make 

Cài đặt QT vào thư mục sân khấu bởi

thư viện phụ thuộc
make install DESTDIR=<stage directory> 

Sao chép QT từ rootfs thứ e thư mục sân khấu của bạn

Vì vậy, bạn có thể thấy rằng, thư mục sân khấu được giữ ở mức tối thiểu mà không bị ô nhiễm.

+0

Tuyệt vời, debootstrap chính xác là những gì tôi đang tìm kiếm. Mất một chút để làm việc trên OpenSuSE, nhưng cuối cùng, nó là hoàn hảo :) –

Các vấn đề liên quan