2012-06-10 63 views
51

TL/DR: Tôi có thể tìm thêm thông tin về cách xây dựng chuỗi công cụ biên dịch chéo GCC 4.7.0 cho nền ARM (gnueabi) (dự định chạy trên thiết bị Raspberry Pi)?Biên dịch chéo cho Raspberry Pi trong GCC. Bắt đầu từ đâu?

Tôi vừa mới có một chiếc Raspberry Pi hoàn toàn mới và tôi rất háo hức để bắt đầu lập trình cho nó. Tôi đã quản lý để cài đặt các toolchain GCC (Tôi đang sử dụng hình ảnh hệ thống Arch Linux) và biên soạn một số chương trình cơ bản, tất cả làm việc tốt.

Tôi cũng đã cố gắng biên dịch các thư viện Boost vì tôi thường sử dụng chúng trong các dự án của mình và mọi thứ dường như hoạt động tốt bằng cách làm theo các hướng dẫn (./bootstrap.sh + ./b2) ngoại trừ việc biên dịch chậm. Tôi để nó trong một vài giờ nhưng nó hầu như không vượt qua vài tập tin nguồn đầu tiên. Sau khi tôi chạy nó trong đêm, tôi phát hiện ra rằng quá trình xây dựng bị hủy bỏ do thiếu RAM.

Vì vậy, tôi đoán là Rasp Pi đơn giản là không đủ sức mạnh để biên soạn một thứ gì đó có kích thước như Boost. Vì vậy, việc biên soạn chéo đến với tâm trí của tôi. Tuy nhiên, mặc dù có rất nhiều thông tin về biên dịch chéo ARM có sẵn trực tuyến, tôi thấy nó khó hiểu. Một người thậm chí bắt đầu từ đâu?

Tôi có phiên bản GCC gần đây (4.7.0) có sẵn trên Raspberry Pi, vì vậy tôi lý tưởng muốn biên dịch chéo với cùng một phiên bản. Tôi có thể lấy chuỗi công cụ GCC 4.7.0 cho ARM ở đâu? (Tôi sẽ được biên soạn trên x86 CentOS 6,2)

Edit:

tôi deallocated bộ nhớ GPU không cần thiết và thiết lập một phân vùng swap 4GB trên một ổ đĩa USB, trong khi xây dựng các file đang ở trên một chia sẻ NFS. Boost hiện đang biên dịch nhanh hơn rất nhiều, vì vậy nó có thể quản lý được. Tôi vẫn muốn biết làm thế nào tôi có thể thiết lập một toolchain GCC 4.7 cho biên dịch chéo trên máy tính x86 của tôi mặc dù, vì tôi có ý định làm rất nhiều biên dịch và tôi muốn nó càng nhanh càng tốt.

Chỉnh sửa 2:

Kể từ GCC 4.7.0 là tương đối mới, có vẻ không phải là một pre-built cross-biên dịch (i386-> ARM). Tôi có lẽ sẽ phải xây dựng một bản thân mình, mà dường như là một nhiệm vụ không tầm thường (tôi đã cố gắng và thất bại). Có ai biết về một hướng dẫn để làm theo để xây dựng một trình biên dịch chéo GCC, hy vọng cho một trong các phiên bản gần đây?

Tôi đã thử với this great shell script (đã làm việc rất tốt để xây dựng trình biên dịch cùng một kiến ​​trúc) và tôi đã xây dựng thành công các điều kiện tiên quyết của GCC, nhưng sau đó GCC không giữ được nhiều lỗi khó hiểu. Tôi thực sự bị mất ở đây, vì vậy tôi rất cảm kích sự giúp đỡ của bạn.

GCC trên Raspberry Pi đã được cấu hình với

--prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib 
--mandir=/usr/share/man --infodir=/usr/share/info 
--with-bugurl=https://bugs.archlinux.org/ 
--enable-languages=c,c++,fortran,lto,objc,obj-c++ --enable-shared 
--enable-threads=posix --with-system-zlib --enable-__cxa_atexit 
--disable-libunwind-exceptions --enable-clocale=gnu 
--disable-libstdcxx-pch --enable-libstdcxx-time 
--enable-gnu-unique-object --enable-linker-build-id --with-ppl 
--enable-cloog-backend=isl --enable-lto --enable-gold 
--enable-ld=default --enable-plugin --with-plugin-ld=ld.gold 
--with-linker-hash-style=gnu --disable-multilib --disable-libssp 
--disable-build-with-cxx --disable-build-poststage1-with-cxx 
--enable-checking=release --host=arm-unknown-linux-gnueabi 
--build=arm-unknown-linux-gnueabi 

Sửa 3:

tôi quản lý để xây dựng một toolchain 4,7 GCC cho ARM (yay!) Sử dụng this shell script theo đề nghị của người sử dụng dwelch trong bình luận. Tôi cũng đã tạo newliblibstdc++ sử dụng this article làm hướng dẫn. Các toolchain hoạt động tốt, nhưng hen tôi chạy thực thi trên Raspberry Pi của tôi, nó không thành công với Illegal instruction. Điều gì có thể là nguyên nhân của điều đó?

+1

Hãy thử gói zram nếu nó chưa được cài đặt. Điều này sẽ tạo ra một trao đổi RAM nén, giúp nhiều hơn bạn nghĩ. (Thật kỳ lạ.) Cũng thêm một thiết bị USB cực nhanh, hoặc là một ổ cứng USD hoặc một thanh USB chất lượng cao và đặt hoán đổi trên đó. –

+3

Ngoài ra, trong chủ đề này, bạn có thể đọc cách tắt bộ nhớ đồ họa để có được 32 megabyte RAM: http://www.raspberrypi.org/phpBB3/viewtopic.php?f=5&t=4831&p=65410 –

+1

Wow, cảm ơn bạn . Tôi thực sự có 128MB được phân bổ cho GPU. Không có thắc mắc tất cả mọi thứ đã rất chậm chạp. – Tibor

Trả lời

2

Tôi không thể tìm thấy 4,7 gcc, chỉ 4,6. Để biết thông tin, tôi đã biên dịch hạt nhân của Pi trên một máy tính Ubuntu cũ (1Ghz, 768MB RAM) theo các hướng dẫn trên trang này: Kernel compilation

Bản dựng mất khoảng 90 phút, so với 6 giờ. sẽ lấy Pi. Hạt nhân chạy tốt trên Pi. Có lẽ bạn có thể điều chỉnh các nguyên tắc này để biên dịch chéo các dự án khác trên máy x86 Linux của bạn.

24

Tôi đã tìm thấy các hướng dẫn này How to build a cross compiler for your Raspberry Pi. Đó là một bước đi tuyệt vời thông qua việc sử dụng công cụ crosstool-ng giúp đơn giản hóa việc cấu hình trình biên dịch chéo A LOT (nó có giao diện dựa trên curses đẹp) và nó hỗ trợ GCC 4.7.

Dường như làm việc tuyệt vời!

4

http://github.com/dwelch67/raspberrypibuildgcc directory có một tập lệnh cho cả 4,7 gcc/gnu và 3,0 clang/llvm. gnu một trong những nguồn gốc từ kịch bản tại dự án mpx tại opencores, tôi cắt ra gdb và libgcc, glibc, vv đưa nó xuống một trình biên dịch. nếu bạn muốn những thứ khác cắt và dán cánh tay cho mips.

0

Như bạn đã lưu ý, việc xây dựng trên bản thân Raspberry Pi chậm, nhưng đáng tin cậy (vì nó không được biên dịch chéo), miễn là bạn không hết bộ nhớ. Có lẽ nó có thể tinh chỉnh bộ nhớ và cài đặt trao đổi để làm cho các bản dựng lớn hơn có thể (nếu không nhanh). Tôi biết trên diễn đàn, mọi người đang nói về việc đặt phân vùng gốc trên SD, phân vùng người dùng trên ổ USB và tất nhiên nó có thể tạo sự khác biệt để nhận thẻ SD nhanh (lớp 6 hoặc tốt hơn). Có thể, theo thời gian, hiệu suất biên dịch sẽ cải thiện khi phần mềm được cải thiện. Hoặc, có lẽ Raspberry Pi 2 sẽ có chipset được cải tiến và nhiều RAM hơn. :-)

+0

Cảm ơn bạn đã đề xuất nhưng 30 phút trên RPi so với 1 phút trên máy tính xách tay của tôi làm cho nó RẤT không thực tế cho phát triển, nơi tôi có rất nhiều xây dựng lại để làm. Nếu sự khác biệt không quá quyết liệt, tôi chắc chắn sẽ xây dựng trên thiết bị. – Tibor

+0

Vâng tôi đang ở trong cùng một chiếc thuyền, khoảng 30 phút xây dựng thời gian trên RPi. Tôi sẽ phát triển trong Linux (Ubuntu VM trên Mac OS X, thực sự), sau đó chỉ cần xây dựng trên RPi khi tôi muốn thử nghiệm trên nó. Tôi hy vọng rằng sẽ được đầy đủ cho mục đích của tôi (đó là một thiết lập hợp lý) nhưng nếu không, tôi sẽ được biên dịch quá. – mlepage

+0

Tôi không biết nếu Pi của tôi là khác nhau, nhưng tôi có một từ năm 2012. Nó được ép xung đến 1000MHz. Tuy nhiên, nó có thể biên dịch chương trình lớn nhất của tôi ~ 10k dòng mã thực tế (không phải ý kiến, v.v.). Tôi nhận được thời gian biên dịch khoảng 30s đến 3 phút tùy thuộc vào việc tôi xóa tất cả các đối tượng đầu ra. Tôi hiếm khi bị phân đoạn GCC. Tuy nhiên, nó thực sự là một rắc rối để gỡ lỗi và thay đổi mã trên bay với thời gian biên dịch! Tôi gỡ lỗi tất cả các chương trình trên Máy tính xách tay của mình bằng Ubuntu và sau đó biên dịch chúng cho Pi! Hoạt động hoàn hảo! – yash101

4

Dưới đây là hướng dẫn từng bước How to build Raspberry Pi cross-compiler in Windows. Lý do bạn nhận được lỗi Illegal Instruction là Raspbian mới nhất được kích hoạt hardfp và yêu cầu các bản vá thích hợp cho gcc và eglibc để hỗ trợ hardfp. Nếu không mã được tạo sẽ sử dụng ABI khác nhau, tức là đối số hàm vượt qua trong các thanh ghi khác nhau, do đó, sự cố khi chạy.

Việc định cấu hình sai GCC cho ARMv7 (Raspebby Pi là ARMv6) có thể dẫn đến lỗi Illegal Instruction. Đảm bảo chỉ định tùy chọn --with-arch=armv6 khi định cấu hình GCC.

Hướng dẫn được liên kết ở trên dựa trên GCC 4.6.3. Nhưng tôi đoán nó sẽ làm việc với GCC 4.7 quá.

1

Bạn có thể thử các toolchain tại địa chỉ: https://github.com/kallaballa/Raspberry-GCC-4.7.3

Đó là một pre-built gcc-4.7.3 toolchain cho ARMv6 với hardfp sử dụng gnueabi. Tôi đang sử dụng nó để vượt qua biên dịch C++ 11 cho một mục tiêu raspberrian.

Xin lưu ý rằng nó chỉ hoạt động trên máy chủ x86_64 linux.

1

dockcross project là điểm khởi đầu tuyệt vời cho chuỗi công cụ khử mùi hoàn toàn, bạn có thể xây dựng không chỉ cho Pi mà còn cho bất kỳ thứ gì khác. Dưới đây là các lệnh:

docker run --rm dockcross/linux-armv7 > ./dockcross-linux-armv7 
chmod +x ./dockcross-linux-armv7 
./dockcross-linux-armv7 bash -c '$CC test/C/hello.c -o hello_arm' 

Nó có cmake được tích hợp sẵn.

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