Problemy w budowaniu modułów okołokernelowych ze specy
Bartosz Świątek
swiatek w informatik.hu-berlin.de
Pią, 21 Kwi 2006, 12:46:55 CEST
Witam,
Pisałem o tym już kiedyś, ale nie zaszkodzi jeszcze raz.
Oprę się na przykładzie btsco.spec bo akurat jego przed chwilą przerabiałem.
Problem polega na tym gdy buduje się speca z opcją --without dist_kernel
dlatego, że już na wstępie jest burak. Kto o zdrowym umyśle ma w drzewku
jądra config-nondist ? Nikt. Więc, żeby zbudować speca trzeba zrobić symlinka
do .config. Nie lepiej w specu od razu podać, że ma patrzyć do .config ?
Lepiej. Druga sprawa to linkowanie.
for cfg in %{?with_dist_kernel:%{?with_smp:smp}
up}%{!?with_dist_kernel:nondist}; do
if [ ! -r "%{_kernelsrcdir}/config-$cfg" ]; then
exit 1
fi
install -d o/include/linux
ln -sf %{_kernelsrcdir}/config-$cfg o/.config
Dlaczego scrypt najpierw sprawdza czy jest config-nondist (znaczy wywala się
bo ze względów oczywistych go nie ma) a dopiero później kiedy on już ma
istnieć probuje go tworzyć robiąc symlinka do .config ? :) paranoja.
W ogóle całe linkowanie np. Module.symvers jest zbędne dla jajek niepldowych.
Następna sprawa to już makro %{__make} z opcjami. Dzięki opcji M=$PWD O=$PWD/o
budowa się wywala bo nie może rozpoznać wersji jądra. Z powodu innych opcji
budowa też się wywala (głównie z powodu braku praw zapisu w drzewku jądra).
Najlogiczniejszym krokiem jest więc pójść za radą autorów danego modułu
(tutaj btsco) i zrobić czyste %{__make} bez niczego. Paczka się wtedy buduje
bez problemu.
Piszę o tym bo w PLD zburaczony jest w ten sposób praktycznie każdy spec który
ma coś wspólnego z jądrem. Należałoby przemyśleć jeszcze raz sposób budowania
takich specy dla kernelów niedystrybucyjnych, a sposób dla jądra pldowego
zostawić jak jest skoro działa.
Pozdrawiam
Bartosz Świątek
Więcej informacji o liście dyskusyjnej pld-devel-pl