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