2017-02-15 7 views
6

Pracuję trochę nad projektem Yocto, a wspólnym wyzwaniem jest ustalenie, dlaczego (lub z jakiego przepisu) plik został umieszczony na rootfach. Jest to coś, co można mieć nadzieję wyprowadzić ze środowiska systemu kompilacji, log & meta danych. Idealnie, zestaw poleceń pozwoliłby na powiązanie pliku z powrotem do źródła (np. Przepis).Jak znaleźć, która z receptur Yocto Project zapełnia konkretny plik w głównym systemie plików obrazu

Moja zwykła strategia polega na wyszukiwaniu danych meta (np. grep -R filename ../layers/*) i wyszukiwaniu w internecie wspomnianych nazw plików, aby znaleźć wskazówki dotyczące możliwych odpowiedzialnych przepisów. Jednak nie zawsze jest to bardzo skuteczne. W wielu przypadkach nazwy plików nie są wyraźnie określone w przepisie. Ponadto istnieje wiele przypadków, w których nazwa pliku jest podawana przez wiele receptur, co prowadzi do dodatkowej pracy w celu znalezienia, która receptura ostatecznie je dostarczyła. Istnieje oczywiście wiele innych wskazówek, aby znaleźć odpowiedź. Niezależnie od tego, to dochodzenie jest często dość pracochłonne, gdy wydaje się, że system kompilacji powinien mieć wystarczającą ilość informacji, aby rozwiązanie problemu było proste.

Odpowiedz

8

To jest dokładny przypadek użycia dla skryptu oe-pkgdata-util i jego podkomendy find-path. Ten skrypt jest częścią openembedded-core.

Zobacz ten przykład:

[email protected]:~/oe/build> oe-pkgdata-util find-path /lib/ld-2.24.so 
glibc: /lib/ld-2.24.so 

można wyraźnie zobaczyć, że ta biblioteka należy do glibc przepis.

oe-pkgdata-util ma więcej przydatnych podpoleceń, aby zobaczyć informacje o opakowaniach i przepisach, warto sprawdzić --help.

0

Pliki kandydujące rozmieszczone na każdej receptury są umieszczone w każdym $ WorkDir/zdjęcie

więc można cd do

$ cd ${TMPDIR}/work/${MULTIMACH_TARGET_SYS} 

i wykonać

$ find . -path '*/image/*/fileYouAreLookingFor' 

od wyniku, który powinien być w stanie wywnioskować $ {PN} przepisu, który wdraża taki plik.

Na przykład:

$ find . -path '*/image/*/mc' 
./bash-completion/2.4-r0/image/usr/share/bash-completion/completions/mc 
./mc/4.8.18-r0/image/usr/share/mc 
./mc/4.8.18-r0/image/usr/bin/mc 
./mc/4.8.18-r0/image/usr/libexec/mc 
./mc/4.8.18-r0/image/etc/mc 
2

Jeśli wolisz graficzną prezentację, tostera Web UI będzie również pokazać to, plus zależność informacje.

Powiązane problemy