Problemy w budowaniu modułów okołokernelowych ze specy

Arkadiusz Miskiewicz arekm w pld-linux.org
Pią, 21 Kwi 2006, 12:59:47 CEST


On Friday 21 April 2006 12:46, Bartosz Świątek wrote:
> 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. 
Nie nikt tylko masz go tam zrobić jak chcesz --without dist_kernel używać.

> 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. 
Jak to dlaczego? Bo potrzebujesz mieć ten konfig w katalogu o/, a nie 
w /usr/src/costam.

> W 
> ogóle całe linkowanie np. Module.symvers jest zbędne dla jajek niepldowych.
Dlaczego zbędne? Bez tego nie generują się zależności pomiędzy modułami.

> 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. 
Przykład podaj.

> Z powodu 
> innych opcji budowa też się wywala (głównie z powodu braku praw zapisu w
> drzewku jądra). 
Po to są te opcje by w drzewku jądra się nic nie musiało zapisywać.

> 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.
Jednym tak, innym nie.

> 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.
Z tym budowaniem zawsze były jazdy. Konkretnie coś zaproponuj to się popatrzy. 
Jakiś spec przerobiony wg Twojej ideii itp.

Obecne budowanie pewnie ma jakieś wady ale problemów jest sporo:
- czyste /usr/src/linux vs częściowo mielone /usr/src/linux
- budowanie modułów gdy /usr/src/linux jest read only
- budowanie kilku modułów poza /usr/src/linux ale tak by się odpowiednie 
zależności pomiędzy tymi modułami generowały (np. np paczka ieeecostam 
generująca na raz kilka *.ko zależnych od siebie)
- budowanie modułu X z zależnościami od drugiego zewnętrznego moduły Y również 
z osobnej paczki (trzeba dostarczać Module.symver z budowania Y)
- budowanie UP/SMP na raz
- o czymś pewnie zapomniałem

Do tego dochodzi badziewny kmod patch, który zdaje się znów wrócił do 
kernel.spec w wykonaniu cieciwy. Brr.

> Pozdrawiam
> Bartosz Świątek

-- 
Arkadiusz Miśkiewicz        PLD/Linux Team
arekm / maven.pl            http://ftp.pld-linux.org/


Więcej informacji o liście dyskusyjnej pld-devel-pl