Kiểm tra thời gian cấu hình / biên dịch cho các tính năng mà mã của bạn phụ thuộc vào là cách thực hiện. Việc kiểm tra các thiết bị cụ thể là có vấn đề vì tránh được lỗi giả là hầu như không thể (ai đó có thể nói dối bạn một cách có chủ ý ngay cả với ít nỗ lực) và mục đích của việc kiểm tra như vậy là để trả lời câu hỏi: "Tôi có thể xây dựng ở đây không? Tôi đang sử dụng? " , không phải "đây có phải là thiết bị tôi thích tên không?"
Theo tài liệu tham khảo này (một nguồn thông tin tuyệt vời về các macro được xác định trước nói chung), bạn có thể sử dụng macro:
__arm__
Để phát hiện sự kết hợp GCC / Arm.
Tôi đã kiểm tra cái này với tôi:
#include <stdio.h>
int main() {
#ifdef __arm__
printf("Why yes it is, thank you\n");
#endif
return 0;
}
Mà thực sự đã in tin nhắn.
Lưu ý rằng điều này cũng sẽ bắt được tất cả các thiết bị Arm, vì vậy khuyến nghị của tôi là sử dụng một phần của công cụ xây dựng của bạn (ví dụ cmake/autoconf
) để kiểm tra sự hiện diện của /opt/vc/include/bcm_host.h
cả.
Ví dụ với
AC_CHECK_HEADERS
trong autoconf:
AC_CHECK_HEADERS(/opt/vc/include/bcm_host.h)
nguyên nhân:
HAVE__OPT_VC_INCLUDE_BCM_HOST_H
được định nghĩa trong config.h
Hoặc cho CMake:
include(CheckIncludeFile)
CHECK_INCLUDE_FILE(/opt/vc/include/bcm_host.h BCMHOST)
Tôi không nghĩ có cách nào tốt hơn để phát hiện điều này thực sự - bạn có thể định cấu hình / CMake tìm kiếm những thứ cụ thể về phần cứng, nhưng sẽ có những nền tảng khác có cùng SoC nên thậm chí nó không thực sự đáng tin cậy và những gì bạn thực sự quan tâm là sự tồn tại của tệp tiêu đề đó, vì thông báo cho bạn biết cách xây dựng cho mục tiêu đã cho. Ngay cả khi bạn có thể chứng minh đó là Raspberry Pi nhưng không thể tìm thấy tệp tiêu đề phù hợp, bạn vẫn bị mắc kẹt và lỗi sớm hơn là lỗi xây dựng.
Nếu bạn thực sự muốn kiểm tra nó là một Pi (hoặc đủ tương tự), bạn có thể sử dụng một cái gì đó đơn giản như:
grep -o BCM2708 /proc/cpuinfo
hoặc (đối với raspberrypi 2 và 3):
grep -o BCM2709 /proc/cpuinfo
tại thời điểm cấu hình, sẽ khớp với SoC, Raspberry Pi dựa trên.
Bạn có thể thực hiện thêm một vài thử nghiệm (ví dụ: USB sẽ giúp bạn tìm hiểu thêm một chút và thậm chí gợi ý nếu đó là thiết bị Model A hoặc B), nhưng không có gì đủ để nói chắc chắn.
Bạn có thể kiểm tra giá trị băm của các tệp trong / boot so với danh sách đã biết, nhưng sau đó bạn sẽ không thể tạo nếu có bản cập nhật chương trình cơ sở hoặc bản không chính thức mà bạn không biết. (Hoặc các thiết bị không phải Pi tương tự khác có cùng thiết lập khởi động)
__ARMEL__
cách xác định chính xác như của bạn__arm__
. Tôi chỉ không bận tâm để tìm macro tốt nhất.