Kodunuzun dayandığı özellikler için yapılandırma / derleme zamanında kontrol etme yoludur. Belirli cihazları kontrol etmek sorunludur çünkü yanlış-pozitiflerden kaçınmak neredeyse imkansızdır (birisi çok az çabayla bile size kasıtlı olarak yalan söyleyebilir) ve bu gibi kontrollerin amacı şu soruyu cevaplamaktır: "burada yapabilir miyim? Kullanıyor muyum? " , "Bu, adını sevdiğim bir cihaz mı?"
Bu referansa göre (genel olarak önceden tanımlanmış makrolar hakkında harika bir bilgi kaynağı) makroyu kullanabilirsiniz:
__arm__
GCC / Kol kombinasyonunu tespit etmek.
Bunu benim ile kontrol ettim:
#include <stdio.h>
int main() {
#ifdef __arm__
printf("Why yes it is, thank you\n");
#endif
return 0;
}
Hangi gerçekten mesajı yazdırdı.
Bunun tüm Arm cihazlarını da yakalayacağına dikkat edin, bu yüzden benim tavsiyem yapım aracınızın bir bölümünü de (örneğin cmake/autoconf
) kullanıp kullanmadığınızı kontrol etmek olacaktır /opt/vc/include/bcm_host.h
.
Örneğin
AC_CHECK_HEADERS
autoconf'ta:
AC_CHECK_HEADERS(/opt/vc/include/bcm_host.h)
neden:
HAVE__OPT_VC_INCLUDE_BCM_HOST_H
config.h dosyasında tanımlanacak
Veya CMake için:
include(CheckIncludeFile)
CHECK_INCLUDE_FILE(/opt/vc/include/bcm_host.h BCMHOST)
Bunu gerçekten tespit etmenin daha iyi bir yolu olduğunu sanmıyorum - yapılandırmaya / CMake’ye donanıma özgü şeyler arayabilirdiniz, ama aynı SoC’da başka platformlar da olacak, bu yüzden gerçekten güvenilir değil ve aslında ne umurunda Bu başlık dosyasının varlığı, çünkü verilen hedef için nasıl oluşturulacağı konusunda sizi bilgilendirir. Bir Ahududu Pi olduğunu kanıtlayabilseniz bile, ancak hala sıkışmış olduğunuz doğru başlık dosyasını bulamıyorsanız ve bir hata baştan sona özledim.
Gerçekten bir Pi (veya yeterince benzer) olduğunu kontrol etmek istiyorsanız, aşağıdaki gibi basit bir şeye başvurabilirsiniz:
grep -o BCM2708 /proc/cpuinfo
veya (ahududu 2 ve 3 için):
grep -o BCM2709 /proc/cpuinfo
Raspberry Pi'nin dayandığı SoC ile uyuşacak olan yapılandırma zamanında.
Birkaç test daha yapabilirsiniz (örneğin USB, biraz daha fazla anlamanıza yardımcı olur ve hatta bir Model A veya B cihazı ise ipucu verir), ancak kesin olarak söyleyecek hiçbir şey yeterli değildir.
Dosyaların önyüklemesini / önyüklemesini bilinen bir listeye göre kontrol edebilirsiniz, ancak daha sonra bir firmware güncellemesi veya bilmediğiniz resmi olmayan bir yazılım olup olmadığını oluşturamazsınız. (Veya aynı önyükleme kurulumuna sahip diğer benzer Pi olmayan aygıtlar)
__ARMEL__
tanımlamanın yolu aynen seninki__arm__
. Henüz en iyi makroyu bulmak için uğraşmadım.