2008-12-23 31 views
5

Tôi đang xem hệ thống uClinux xây dựng hạt nhân bằng arm-linux-xxx, nhưng xây dựng ứng dụng người dùng bằng arm-elf-xxx.arm-linux-gcc vs arm-elf-gcc

Nếu ứng dụng được dự định chạy trên Linux, sẽ không tốt hơn nếu bạn xây dựng mọi thứ bằng arm-linux-xxx?

Vị trí đặt tùy chọn đó trong cấu hình xây dựng uClinux tổng thể ở đâu?

+0

Có liên kết biểu tượng arm-linux- * và arm-elf- * cho các ứng dụng khác không? Ví dụ, trên hệ thống của tôi, arm-linux-gcc trỏ tới arm-unknown-linux-uclibceabi-gcc. – ctuffli

Trả lời

0

ELF là nhị phân định dạng linux and many others sử dụng:

Định dạng ELF đã thay thế cũ định dạng thực thi như a.out và COFF trong nhiều Unix-like hành hệ thống chẳng hạn như Linux, Solaris, IRIX , FreeBSD, NetBSD, OpenBSD, DragonFly BSD, Âm tiết và HP-UX (ngoại trừ chương trình PA-RISC 32 bit tiếp tục để sử dụng SOM). ELF cũng đã nhìn thấy một số áp dụng trong phi điều hành Unix hệ thống, chẳng hạn như các phiên bản Itanium của OpenVMS và BeOS Revision 4 và sau cho các máy tính dựa trên x86 (nơi nó thay thế Portable định dạng thực thi ; phiên bản PowerPC ở lại với Định dạng thực thi được ưa thích). Thiết bị cầm tay PlayStation 2, PlayStation Portable, PlayStation 2, PlayStation 3, Wii và GP2X cũng sử dụng ELF. AmigaOS 4 và MorphOS cũng chạy trên các máy PowerPC, sử dụng ELF. Trên nền tảng Amiga, ELF thực thi đã thay thế EHF trước đây (Định dạng Hunk mở rộng) là được sử dụng trên Amigas được trang bị thẻ mở rộng bộ xử lý PPC . Hệ điều hành Symbian v9 sử dụng định dạng E32Image [3] là dựa trên định dạng tệp ELF.

Hầu hết Sony Ericsson (ví dụ, W800i, W610, K790, vv), một số Siemens (SGOLD và SGOLD2 nền tảng: từ Siemens C65 để S75 và BenQ-Siemens E71 /EL71) và Motorola (ví dụ: E398, SLVR L7, v360, v3i và tất cả điện thoại LTE2 có bản vá được áp dụng) điện thoại có thể chạy các tệp ELF thông qua việc sử dụng bản vá để thêm mã lắp ráp vào firmware chính (Được gọi là ELFPack, trong văn bản sửa đổi dưới đất ).

0

Tôi dường như nhớ một lúc nào đó rằng bit ở giữa không quan trọng. Như đã đề cập elf là định dạng tập tin tiêu chuẩn, bạn muốn sử dụng anyway và sẽ nhận được rằng dù sao độc lập của tên nhị phân. Điều gì có thể (hoặc không) quan trọng hơn là quy ước gọi, tôi không biết nếu khi gọi một chức năng thư viện được chia sẻ, bạn phải có được quy ước gọi điện thoại của bạn để phù hợp hoặc nếu nó được xử lý cho bạn ở một nơi khác.

2

Tên của trình biên dịch không nhất thiết có nghĩa là bất cứ điều gì. Tùy thuộc vào người đã xây dựng các trình biên dịch (và đặt tên cho chúng), bạn sẽ nhận được các kết quả khác nhau. Có thể cho rằng, có một tên chính xác cho một cấu hình cụ thể, nhưng một số gcc được biên dịch ngẫu nhiên có thể không chính xác.

Đối với trình biên dịch Mã CodeSourcery (có thể là tên chính xác nhất), hãy xem their platforms page để biết tên của chúng có nghĩa là gì.

0

Sự khác biệt là đầu ra được liên kết từ chuỗi công cụ arm-elf-xxx là tệp nhị phân có thể tải linux, trong khi arm-linux-xxx xuất ra đối tượng hạt nhân (ko), là blob có định dạng liên kết riêng của nó (cho mô-đun) hoặc chính hạt nhân, không cần định dạng bao bì. Nghĩa là, đối với không gian người dùng, bạn muốn đối tượng được liên kết động cuối cùng trở thành một tệp thực thi ELF, thư viện hoặc đối tượng được chia sẻ. Đối với không gian hạt nhân, bạn muốn đối tượng cuối cùng (kernel hoặc module) có định dạng liên kết linux-arm-kernel.

Bạn sẽ nhận thấy rằng các đối tượng trung gian (tệp .o) của cả hai mục tiêu có lẽ là tất cả ELF, vì đó là những gì mà chuỗi công cụ mong đợi.

+0

Điều đó khá sai. Không có sự khác biệt trong toolchain (hoặc không * cần * là một) để xây dựng kernel và userspace. –

2

Bạn có thể chạy arm-linux-gcc -varm-elf-gcc -v để xem một số khác biệt giữa hai phiên bản gcc này (chẳng hạn như kiến ​​trúc/ngôn ngữ mục tiêu).

0

Trong trường hợp của chúng tôi, chúng tôi xây dựng linux bằng sparc-elf-gcc và chúng tôi xây dựng busybox (appliation chạy trên linux) bằng sparc -..- linux-gcc. và tôi nghĩ điều này là đúng, không phải là cách khác.

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