2016-08-11 16 views
5

Opcja yocto project umożliwia użycie ścieżki względnej w większości plików konfiguracyjnych, ale nie w pliku ./build/conf/bblayers.conf. Jaki jest powód zablokowania użycia jakichkolwiek ścieżek bezwzględnych dla zmiennych BBLAYERS i BBLAYERS_NON_REMOVABLE?Dlaczego plik yocto bblayers.conf używa bezwzględnych ścieżek?

Spojrzałem na BitBake user manual for yocto version 2.0 (wersja aktualna), ale to nie wyjaśnia rozumowania. Sprawdziłem także niektóre ze starszych wersji ręcznych, ale wydaje się, że nie wspominają one o uzasadnieniu, mówiąc o pliku bblayers.conf lub zmiennej BBLAYERS. Ten sam plik zawiera także BBPATH = "${TOPDIR}", który jest przynajmniej dynamicznie przypisany i nie jest tak daleko od głównego katalogu yotco.

Moje najlepsze przypuszczenie jest takie, że plik bblayers.conf jest specyficzny dla systemu, na którym jest uruchamiany. To uniemożliwiłoby dzielenie się między programistami za pomocą kontroli źródła, a bezwzględne ścieżki zmusiłyby ludzi do edycji pliku za każdym razem, gdy otrzymali kopię. Nie wydaje się to jednak dobrym powodem, stąd pytanie.

+0

Czy kiedykolwiek zastanawiałeś się, jak to zrobić? Siedząc teraz w tej samej łodzi :) –

+0

@MarioTacke nie, ja nie. Myślę, że odpowiedź brzmi, że plik 'bblayers.conf' ma być specyficzny dla użytkownika na komputerze i tylko tymczasowy. Po wybraniu pożądanych warstw, powinieneś stworzyć przepis, który zastąpi większość zawartości 'bblayers.conf'. Możesz użyć '$ {HOME}', '$ {TOPDIR}' i kilku innych podstawień, ale nie ścieżek względnych. – TafT

+0

Nikt nie odpowiada na pytanie. Nie pytam "Jak używać względnych ścieżek" Pytam "Dlaczego ich użycie jest zablokowane". Patrząc wstecz na to teraz, zgaduję, że odpowiedź jest na skuteczność. W przypadku bezwzględnej ścieżki możesz przejść bezpośrednio do pliku docelowego. Dla ścieżki względnej musisz opracować bieżący katalog roboczy, obliczyć, czym jest N dużo '../' powyżej i przenieść się tam, a następnie cofnąć w dół inną ścieżkę katalogu. To brzmi jak więcej pracy niż przejść do/home/TafT/yocto/meta. – TafT

Odpowiedz

3

Możesz użyć ścieżek względnych w bblayers.conf.

Prawdopodobnie ta linia w bblayers.conf:

BBPATH = "${TOPDIR}" 

Jeśli chcesz dowiedzieć się zawartość tej zmiennej, będziesz prawdopodobnie znaleźć katalog najwyższego poziomu katalogu produkcji:

bitbake -e | grep ^TOPDIR 
# searches for bitbake variables 

Wewnątrz tego katalogu można utworzyć warstwę meta-test i dodać ją w bblayers.conf ze ścieżką względną:

BBLAYERS ?= " \ 
    meta-test \ 
    [...] 
    " 

Więc odpowiedź na pytanie, dlaczego istnieją bezwzględne ścieżki w bblayers.conf jest to, że możesz umieścić swój katalog budowania w dowolnym miejscu w systemie i nie jest zależny od Yocto.

Względne ścieżki do warstw muszą zawsze być względne względem katalogu budowania.

+0

Twoja odpowiedź wydaje się wskazywać, że możliwe są ścieżki względem katalogu kompilacji. Nic nie mówi, że względne ścieżki mogą być faktycznie użyte. Jeśli system Yocto (lub bitbake) pobiera tylko ścieżkę bezwzględną dla $ {TOPDIR}, a następnie używa manipulacji łańcuchami do dołączenia ścieżek BBLAYERS, to wciąż używa tylko ścieżek bezwzględnych. Czy mówisz, że możliwość umieszczenia katalogu budowania w dowolnym miejscu jest utrzymywana przez wymaganie bezwzględnej ścieżki do niego? Czy istnieje źródło tych stwierdzeń? – TafT

+0

Nie rozumiem tego. Ścieżka względna zawsze potrzebuje punktu odniesienia. To trzyma się terminu "względny". W tym punkcie będzie to BBPATH. Możesz uzyskać dostęp do dowolnego pliku w systemie plików za pomocą ścieżki względnej pod warunkiem, że ustawienia zabezpieczeń pasują. – h0ch5tr4355

+0

Jeśli wprowadzę znaki '. /' Lub '../../' w ścieżkach których używam, to zawodzą. To jest ta względna ścieżka, o którą pytam. Widzę, że za pomocą systemu bitbake można mieć kilka razy w ścieżkach w stosunku do innych rzeczy w ekosystemie bitbake. Pytam, dlaczego nie mogę mieć ścieżki zdefiniowanej jako '../ foo/bar.txt' wewnątrz pliku bblayers.conf, gdy wydaje się to możliwe w większości innych plików, które wypróbowałem. – TafT

4

Znalazłem sposób użycia ścieżek względnych.

Możesz użyć inline python, aby przejść przez system plików. Poniższy skrypt wykorzystuje podaną zmienną TOPDIR, a następnie przechodzi do jej obiektu nadrzędnego za pośrednictwem interfejsu Pythona o nazwie os.path.

# LAYER_CONF_VERSION is increased each time build/conf/bblayers.conf 
# changes incompatibly 
LCONF_VERSION = "6" 

BBPATH = "${TOPDIR}" 
BBFILES ?= "" 

YOCTOROOT = "${@os.path.abspath(os.path.join("${TOPDIR}", os.pardir))}" 

BBLAYERS ?= " \ 
    ${YOCTOROOT}/poky/meta \ 
    ${YOCTOROOT}/poky/meta-yocto \ 
    ${YOCTOROOT}/poky/meta-yocto-bsp \ 
" 

BBLAYERS_NON_REMOVABLE ?= " \ 
    ${YOCTOROOT}/poky/meta \ 
    ${YOCTOROOT}/poky/meta-yocto \ 
" 

Referencje

+0

Czym różni się YOCTOROOT od BBPATH lub TOPDIR? Sądzę, że daje ci to skuteczną operację ../, która rozwiąże problem i pozwoli ci wykonać '$ {YOCTOROOT}/my-layer /'. – TafT

+0

Tak, to prawda. –

1

udało mi się dostać "ścieżek względnych" w bblayers.conf plików pracy zastępując

BBLAYERS ?= " \ 
    /home/username/poky/meta \ 
    ... 

z

BBLAYERS ?= " \ 
    ${TOPDIR}/../meta \ 
    ... 

Chyba jedno zastrzeżenie z tego podejścia jest to, że jestem powołując się na meta-XXX katalogów warstwowych zawsze będących w katalogu nadrzędnego TOPDIR. Wydaje się tak być w przypadku domyślnego sposobu używania yocto, ale może nie być tak w przypadku bardziej spersonalizowanych konfiguracji kompilacji.

+1

Wygląda na to, że udało ci się dostać rzecz, której prawdopodobnie nie udało mi się wykonać. Może narzędzia zostały zaktualizowane, aby teraz umożliwić to zachowanie. Dziękuję za odpowiedź, ale nie odnosi się ona do pytania, dlaczego zostali zablokowani. Chociaż wydaje mi się, że to dowodzi, że teraz mogą już nie być zablokowane, więc odpowiedź mogłaby być taka, że ​​była to pomyłka bez powodu. – TafT

Powiązane problemy