2013-02-19 31 views
9

Tôi đang cố gắng tìm ra các tùy chọn gcc cho chuỗi công cụ mà tôi đang thiết lập cho bo mạch phát triển: Saber-lite dựa trên bộ xử lý quad iMX6q của Freescale.tùy chọn gcc cho bộ xử lý ARM iMX6q freescale

Bây giờ tôi biết rằng iMX6 về cơ bản là bộ vi xử lý cortex-a9 có bộ vi xử lý vfpv3 và neon, cũng như đồ họa vector, 2D và thậm chí là công cụ 3D.

Tuy nhiên, ghi chú phát hành và sử dụng tài liệu hướng dẫn chưa được rõ ràng về cách bật bất kỳ tùy chọn nào có thể được bật trong gcc.

Thực tế, các tùy chọn mà tôi có thể 'chơi' với những điều sau đây.

-march= armv7-a    - ok this one is pretty obvious. 
-mfpu= vfpv3/neon    - i can use only the vfpv3 co-processor, or both (respectively, depends on option) 
-mfloat-abi=softfp/soft/hard - I guess I can choose hard here, as there is hardware for fp operations 
-mcpu=cortex-a9    - is it option even necessary? it is not clear if it just an alias for -march or something else. 

Có các tùy chọn nào khác tôi nên bật không? Tại sao toolchain có như các tùy chọn mặc định để xây dựng kernel linux/uboot/gói như sau:

-march= armv7-a -mfpu= vfpv3 -mfloat-abi=softfp 

Cảm ơn bạn đã giúp đỡ của bạn

+4

Mfloat-abi của bạn phải khớp với bất kỳ ABI nào được sử dụng trên hệ thống của bạn. softfp cũng sử dụng phần cứng dấu chấm động, nhưng quy ước gọi khác nhau. Bạn có thể kiểm tra bằng "readelf -A/bin/ls" (ví dụ). "Tag_ABI_VFP_args: đăng ký VFP" có nghĩa là khó. – unixsmurf

+0

cực kỳ hữu ích, cảm ơn bạn rất nhiều! – nass

+0

(Tất nhiên, nếu bạn đang biên dịch tự nhiên trên hệ thống đích của bạn bằng cách sử dụng gcc gốc của hệ thống, thì ABI chính xác sẽ là mặc định trong trình biên dịch, và có thể được bỏ qua.) – unixsmurf

Trả lời

6

Sử dụng -mthumb -O3 -march=armv7-a -mcpu=cortex-a9 -mtune=cortex-a9 -mfpu=neon -mvectorize-with-neon-quad -mfloat-abi=softfp. Lưu ý rằng theo mặc định trình biên dịch sẽ không vector hóa hoạt động điểm động bằng cách sử dụng NEON vì NEON không hỗ trợ các số không chuẩn. Nếu bạn tốt với một số mất độ chính xác, bạn có thể làm cho gcc sử dụng NEON cho dấu phẩy động bằng cách thêm công tắc -ffast-math.

+2

xin chào, hãy xây dựng thêm một chút. Tại sao tôi nên sử dụng softfp và không khó? Ngoài ra -O3, là quá trình tối ưu hóa quá mức vì lợi ích của hạt nhân Linux. Không? Tôi có nghĩa là tôi có nguy cơ có những cơn ác mộng cố gắng để biên dịch u-boot, hạt nhân và các gói. Không? cảm ơn bạn cho phần còn lại của các tùy chọn – nass

+2

Sự khác biệt giữa softfp và hard là cách các tham số dấu phẩy động được truyền và nó phụ thuộc vào bản phân phối Linux mà bạn sử dụng. Vì mặc định trong trình biên dịch của bạn là softfp, có khả năng phân phối Linux của bạn chuyển các tham số dấu chấm động trong thanh ghi nguyên (tuy nhiên, nó vẫn có thể sử dụng phần cứng FPU cho các hoạt động FP). Nếu bạn muốn biên dịch Linux kernel hoặc U-boot, đừng thay đổi mặc định của trình biên dịch; các tùy chọn ở trên là để biên dịch chương trình không gian người dùng. –

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