Problemy w budowaniu modułów okołokernelowych ze specy
Bartosz Świątek
swiatek w informatik.hu-berlin.de
Pią, 21 Kwi 2006, 13:33:11 CEST
Dnia piątek, 21 kwietnia 2006 12:59, Arkadiusz Miskiewicz napisał(a):
> 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ć.
Po co ? Da rade i bez.
>
> > 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.
Jeśli robie czysty make to nie potrzebuje go w o/.
>
> > 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.
Generują, mówimy tu o kernelu niedystrybucyjnym, czyli ktoś musiał go
kompilować, są też na pewno źródła. Modules.symvers istnieje w drzewku.
Mówie, że niepotrzebne jest linkowanie typu Modules.symvers-nondist ->
Modules.symvers.
>
> > 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ć.
Nie zrozumieliśmy się. Właśnie kiedy są te opcje to probuje coś zapisywać 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.
>
> 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
>
Moja propozycja wygląda tak (patrz załączony btsco.spec). Nie jest ostateczna
i chętnie popolemizuję nad jej zmianami. Jakoś trzeba to zmienić, żeby to
działało w dwie strony. W obecnej wersji buduje się u mnie bez konieczności
jakiegokolwiek linkowania czegokolwiek.
-------------- następna część ---------
# $Revision: 1.8 $, $Date: 2006/04/12 12:15:40 $
#
# Conditional build:
%bcond_without dist_kernel # without kernel from distribution
%bcond_without kernel # don't build kernel modules
%bcond_without userspace # don't build userspace utilities
%bcond_without smp # don't build SMP module
%bcond_with verbose # verbose build (V=1)
#
%define rel 2
Summary: Bluetooth-alsa Project
Summary(pl): Projekt Bluetooth-alsa
Name: btsco
Version: 0.41
Release: %{rel}
License: GPL
Group: Applications/Sound
Source0: http://dl.sourceforge.net/bluetooth-alsa/%{name}-%{version}.tar.gz
# Source0-md5: 111efb0f7092c92c4dd376eec96aa2e7
Patch0: %{name}-readme-pl.diff
URL: http://sourceforge.net/projects/bluetooth-alsa/
%if %{with kernel}
%{?with_dist_kernel:BuildRequires: kernel-module-build}
%endif
%if %{with userspace}
BuildRequires: alsa-driver-devel >= 1.0.9-1
BuildRequires: alsa-lib-devel >= 1.0.9-1
BuildRequires: autoconf
BuildRequires: automake
BuildRequires: bluez-libs-devel >= 2.21-1
BuildRequires: libao-devel >= 0.8.6-1
%endif
BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
%description
This project provides a way to use a bluetooth headset with Linux. We
do this currently by making an alsa kernel driver which uses bluez to
reach the headset. It works well enough now to get voice-quality audio
to and from most headsets.
%description -l pl
Dzięki temu oprogramowaniu można używać zestawów słuchawkowych
Bluetooth Headset z Linuksem. Osiągnięto to dzięki zbudowaniu alsowego
modułu do jądra, który to używa systemu bluez do komunikacji z takim
zestawem. Współpracuje z większością zestawów, ograniczeniem w
komunikacji jest często urządzenie USB, które to może mieć
nieobsługiwane częściowo protokoły, wskazówka: hciconfig hciXXX
revision. W skrajnym wypadku można próbować użyć innego urządzenia
USB.
%package -n kernel-char-btsco
Summary: Linux ALSA kernel driver for Bluetooth Headset
Summary(pl): Sterownik ALSA do jądra Linuksa dla Bluetooth Headset
Release: %{rel}@%{_kernel_ver_str}
Group: Base/Kernel
%{?with_dist_kernel:%requires_releq_kernel_up}
Requires(post,postun): /sbin/depmod
Requires: kernel-sound-alsa
%description -n kernel-char-btsco
Linux ALSA kernel driver for Bluetooth Headset named snd_bt_sco.
%description -n kernel-char-btsco -l pl
Sterownik ALSA do jądra Linuksa dla Bluetooth Headset o nazwie
snd_bt_sco.
%package -n kernel-smp-char-btsco
Summary: Linux ALSA kernel driver for Bluetooth Headset (SMP)
Summary(pl): Sterownik ALSA do jądra Linuksa dla Bluetooth Headset (SMP)
Release: %{rel}@%{_kernel_ver_str}
Group: Base/Kernel
%{?with_dist_kernel:%requires_releq_kernel_smp}
Requires(post,postun): /sbin/depmod
Requires: kernel-smp-sound-alsa
%description -n kernel-smp-char-btsco
Linux ALSA kernel (SMP) driver for Bluetooth Headset named snd_bt_sco.
%description -n kernel-smp-char-btsco -l pl
Sterownik ALSA do jądra Linuksa SMP dla Bluetooth Headset o nazwie
snd_bt_sco.
%prep
%setup -q
%patch0 -p1
%build
%if %{with userspace}
%{__aclocal}
%{__autoconf}
%{__autoheader}
%{__automake}
%configure
%{__make}
%endif
%if %{with kernel}
%if %{with dist_kernel}
cd kernel
# kernel module(s)
for cfg in %{?with_dist_kernel:%{?with_smp:smp} up}%; do
if [ ! -r "%{_kernelsrcdir}/config-$cfg" ]; then
exit 1
fi
install -d o/include/linux
ln -sf %{_kernelsrcdir}/config-$cfg o/.config
ln -sf %{_kernelsrcdir}/Module.symvers-$cfg o/Module.symvers
ln -sf %{_kernelsrcdir}/include/linux/autoconf-$cfg.h o/include/linux/autoconf.h
%if %{with dist_kernel}
%{__make} -C %{_kernelsrcdir} O=$PWD/o prepare scripts
%else
install -d o/include/config
touch o/include/config/MARKER
ln -sf %{_kernelsrcdir}/scripts o/scripts
%endif
# patching/creating makefile(s) (optional)
%{__make} -C %{_kernelsrcdir} clean \
RCS_FIND_IGNORE="-name '*.ko' -o" \
SYSSRC=%{_kernelsrcdir} \
SYSOUT=$PWD/o \
M=$PWD O=$PWD/o \
%{?with_verbose:V=1}
%{__make} -C %{_kernelsrcdir} modules \
CC="%{__cc}" CPP="%{__cpp}" \
SYSSRC=%{_kernelsrcdir} \
SYSOUT=$PWD/o \
M=$PWD O=$PWD/o \
%{?with_verbose:V=1}
for mod in *.ko; do
mod=$(echo "$mod" | sed -e 's#\.ko##g')
mv $mod.ko ../$mod-$cfg.ko
done
done
%else
cd kernel
%{__make}
%endif
%endif
%install
rm -rf $RPM_BUILD_ROOT
%if %{with userspace}
install -d $RPM_BUILD_ROOT%{_bindir}
for file in avdtp/avtest sbc/rcplay sbc/sbcenc sbc/sbcinfo a2play btsco2 btsco ; do
install $file $RPM_BUILD_ROOT%{_bindir}
done
%endif
%if %{with kernel}
install -d $RPM_BUILD_ROOT/lib/modules/%{_kernel_ver}{,smp}/misc
%if %{without dist_kernel}
for mod in *.ko; do
#nmod=$(echo "$mod" | sed -e 's#-nondist##g')
pwd
install kernel/$mod $RPM_BUILD_ROOT/lib/modules/%{_kernel_ver}/misc/$nmod
done
%else
for mod in *-up.ko; do
nmod=$(echo "$mod" | sed -e 's#-up##g')
pwd
install $mod $RPM_BUILD_ROOT/lib/modules/%{_kernel_ver}/misc/$nmod
done
%endif
%if %{with smp}
for mod in *-smp.ko; do
nmod=$(echo "$mod" | sed -e 's#-smp##g')
pwd
install $mod $RPM_BUILD_ROOT/lib/modules/%{_kernel_ver}smp/misc/$nmod
done
%endif
%endif
%clean
rm -rf $RPM_BUILD_ROOT
%post -n kernel-char-btsco
%depmod %{_kernel_ver}
echo "after install this package, remember add lines like this:"
echo "alias snd-card-1 snd-bt-sco"
echo "alias sound-slot-1 snd-bt-sco"
echo "to %{_sysconfdir}/modprobe.conf"
%postun -n kernel-char-btsco
%depmod %{_kernel_ver}
%post -n kernel-smp-char-btsco
%depmod %{_kernel_ver}smp
echo "after install this package, remember add lines like this:"
echo "alias snd-card-1 snd-bt-sco"
echo "alias sound-slot-1 snd-bt-sco"
echo "to %{_sysconfdir}/modprobe.conf"
%postun -n kernel-smp-char-btsco
%depmod %{_kernel_ver}smp
%if %{with userspace}
%files
%defattr(644,root,root,755)
%doc README README.PL.txt
%attr(755,root,root) %{_bindir}/*
%endif
%if %{with kernel}
%files -n kernel-char-btsco
%defattr(644,root,root,755)
/lib/modules/%{_kernel_ver}/misc/snd-bt-sco.ko.gz
%endif
%if %{with smp}
%files -n kernel-smp-char-btsco
%defattr(644,root,root,755)
/lib/modules/%{_kernel_ver}smp/misc/snd-bt-sco.ko.gz
%endif
%define date %(echo `LC_ALL="C" date +"%a %b %d %Y"`)
%changelog
* %{date} PLD Team <feedback w pld-linux.org>
All persons listed below can be reached at <cvs_login>@pld-linux.org
$Log: btsco.spec,v $
Revision 1.8 2006/04/12 12:15:40 glen
- add kernel epoch, adapterized
Revision 1.7 2006/04/09 09:44:45 aflinta
- fixed smp scripts, release 2
Revision 1.6 2006/04/04 05:24:32 wolvverine
- up to 0.41
Revision 1.5 2006/04/04 00:52:17 wolvverine
- correct log
Revision 1.4 2006/04/04 00:47:52 wolvverine
- patch from Lukasz Masko ed <at> yen <dot> ipipan <dot> waw <dot> pl
Revision 1.3 2005/12/03 10:39:19 qboosh
- revised docs and userspace build
- I don't see any reason for ExclusiveArch
Revision 1.2 2005/12/03 10:04:45 qboosh
- userspace bcond, cosmetics
Revision 1.1 2005/11/28 19:26:46 abram
- initial
- works on i686, but i can not test it on other platforms
Więcej informacji o liście dyskusyjnej pld-devel-pl