Hej
W kernelu w linuxie jest tak, że firmy zewnętrze które dostarczają coś do linuxa dla kernela w wersji 2017.3 wrzucają ci interfejs (headera) do katalogu /inlude/linux/firmware/ti a dla kernela w wersji 2019.2 już do innego np. include/linux. I jak masz implementację external kernel modułu no to musisz zrobić pewną magię w makefilu. Tzn. do makefila przekazujesz maszynę na jaką budujesz (dzięki temu wiesz czy kernel moduł ma być budowany w środowisku kernela 2017.3 czy 2019.2.
Makefile:
ifeq ($(findstring target2017_3, $(MACHINE)), target2017_3)
ARCH_2017_3 = 1
endif
ifeq ($(findstring target2019_2, $(MACHINE)), target2019_2)
ARCH_2019_2 = 1
endif
I potem jak mam plik c to daję:
#ifdef ARCH_2017_3
#include <linux/firmware/ti/firmware.h>
#elseif ARCH_2019_2
#include <linux/ti-firmware.h>
#endif
Ale niestety nie działa mi to. Preprocesor podczas budowania nie widzi żadnego define'a na poziomy zabawy z plikiem c (nie widzi żadnego nagłówka w związku z tym). Więc pewnie jakoś inaczej sie tworzy definy w makefilu tak aby potem były widoczne w kodzie c. Ktoś wie jak?
BTW tam musi być findstring bo to ARCH_... to tylko część nazwy maszyny. I mam pewność, że wchodzi w jednego albo drugiego ifa na poziomie makefila, bo debugowałem to. Także pytanie czemu ta zmienna jest niewidoczna w pliku c przez preprocesor.