ndiswrapper mit kernel 2.6.36

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
The Hit-Man
Beiträge: 2249
Registriert: 21.11.2004 17:01:56
Wohnort: Menden ( Sauerland )
Kontaktdaten:

ndiswrapper mit kernel 2.6.36

Beitrag von The Hit-Man » 23.12.2010 17:38:36

ich habe mir nen eigenen kernel gebaut und wollte nun versuchen den ndiswrapper zu installieren. habe auch schon gesehen, das ich dafür 2 patches brauche und das patchen und bauen des modules hat auch so weit geklappt. nur nach einem

Code: Alles auswählen

make install
wird das module nach /lib/misc kopiert, wo ich es nicht hin haben möchte, da es bei einem modprobe nicht gefunden wird :( ich kann zwar nen insmod benutzen, aber wollte ich ungern. ich habe mir das Makefile mal angeschaut und so wie dort der Pfad zusammengebaut wird, sollte das eigentlich passen, tut es nur leider nicht. weiß jemand warum?
Wer HTML postet oder gepostetes HTML quotet oder sich gepostetes oder
gequotetes HTML beschafft, um es in Verkehr zu bringen, wird geplonkt.

damals windows, früher ubuntu, danach debian, heute arch-linux ;)

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: ndiswrapper mit kernel 2.6.36

Beitrag von rendegast » 24.12.2010 09:00:59

Nach /lib/misc?
Sollte ein /lib/modules/$KERNELVERSION/misc o.ä. werden?

Makefile, Abschnitt 'install'?
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Benutzeravatar
The Hit-Man
Beiträge: 2249
Registriert: 21.11.2004 17:01:56
Wohnort: Menden ( Sauerland )
Kontaktdaten:

Re: ndiswrapper mit kernel 2.6.36

Beitrag von The Hit-Man » 24.12.2010 10:12:15

Sollte ein /lib/modules/$KERNELVERSION/misc o.ä. werden?
ganz genau, so sollte es sein und im Makefile hatte ich reingeschaut, also es steht eher in der .spec datei und sieht eigentlich richtig aus. ich leg sie mal bei.

Code: Alles auswählen

# Define ndiswrapper_version only if it is not already defined.
%{!?ndiswrapper_version: %define ndiswrapper_version 1.56}
%{!?ndiswrapper_release: %define ndiswrapper_release 1}

# Define kernel version if not already defined
%{!?kernel: %define kernel %(uname -r)}
%{!?ksrc: %define ksrc /lib/modules/%{kernel}/source}
%{!?_inst_dir: %define _inst_dir /lib/modules/%{kernel}/misc}

%define _sbinrootdir /sbin

Summary: ndiswrapper allows you to use windows XP drivers for that WLAN card without proper Linux drivers.
Name: ndiswrapper
Version: %{ndiswrapper_version}
Release: %{ndiswrapper_release}
License: GPL
Group: System Environment/Base
URL: http://ndiswrapper.sourceforge.net
Source: %{name}-%{version}.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: %{ksrc}/Makefile

%description
Some wireless LAN vendors refuse to release hardware specifications or
drivers for their products for operating systems other than Microsoft
Windows. The ndiswrapper project makes it possible to use such
hardware with Linux by means of a loadable kernel module that "wraps
around" NDIS (Windows network driver API) drivers.  This rpm contains
just the userspace tools. You will also need the kernel module rpm.

%package -n kernel-module-%{name}-%{kernel}
Summary: Ndiswrapper kernel module
Group: System Environment/Base
Requires: /boot/vmlinuz-%{kernel}, modutils
Requires: %{name} = %{version}-%{release}
BuildRequires: %{ksrc}/Makefile

%description -n kernel-module-%{name}-%{kernel}
Kernel module for ndiswrapper.

%prep
%setup -q

%build
make all KVERS=%{kernel} KSRC=%{ksrc}

%install

%define inst_dir $RPM_BUILD_ROOT%{_inst_dir}
%define sbindir $RPM_BUILD_ROOT%{_sbinrootdir}
%define usrsbindir $RPM_BUILD_ROOT%{_sbindir}
%define mandir $RPM_BUILD_ROOT%{_mandir}

rm -rf $RPM_BUILD_ROOT
make install DIST_DESTDIR=$RPM_BUILD_ROOT INST_DIR=%{inst_dir} KVERS=%{kernel} KSRC=%{ksrc} sbindir=%{sbindir} usrsbindir=%{usrsbindir} mandir=%{mandir}

%clean
rm -rf $RPM_BUILD_ROOT

%files
%defattr(0755,root,root)
%{_sbinrootdir}/loadndisdriver
%{_sbindir}/ndiswrapper*
%{_mandir}/man8/*
%doc README AUTHORS ChangeLog INSTALL

%files -n kernel-module-%{name}-%{kernel}
%{_inst_dir}/ndiswrapper.*

%post -n kernel-module-%{name}-%{kernel}
if [ "`uname -r`" = "%{kernel}" ] ; then
  depmod -a >/dev/null 2>&1 || :
fi

%postun -n kernel-module-%{name}-%{kernel}
if [ "`uname -r`" = "%{kernel}" ] ; then
  depmod -a >/dev/null 2>&1 || :
fi

%changelog
* Mon Jan 10 2005 David Kaplan <dmk@localhost.localdomain> -
- Got rid of makeinstall macro as it asks for problems and use naming convention of make files.

* Tue Jan  4 2005 David Kaplan <dmk@localhost.localdomain> -
- Updated spec file so that it is closer to kernel module standard spec
- Made ndiswrapper_version a configurable macro

* Tue Feb  3 2004  <abennett@olin.edu> -
- Initial build.
aber wie gesagt, trotzdem wird das modul an die falsche stelle kopiert.
Wer HTML postet oder gepostetes HTML quotet oder sich gepostetes oder
gequotetes HTML beschafft, um es in Verkehr zu bringen, wird geplonkt.

damals windows, früher ubuntu, danach debian, heute arch-linux ;)

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: ndiswrapper mit kernel 2.6.36

Beitrag von rendegast » 24.12.2010 11:28:17

Werden die Variablen auf dem Zielsystem wohl anders initialisiert.

http://sourceforge.net/projects/ndiswrapper/files/ ?

Code: Alles auswählen

:/tmp/ndiswrapper-1.56$ grep spec Makefile
DISTFILES=AUTHORS ChangeLog INSTALL Makefile README ndiswrapper.spec \
        # Update version in dist rpm spec file - don't crash if it fails
        -sed -i "s/\%define\s\+ndiswrapper_version\s\+[^\}]\+\}/%define ndiswrapper_version $(DRIVER_VERSION)\}/" $(distdir)/ndiswrapper.spec
rpm: dist ndiswrapper.spec
.spec Datei, rpm-source-Paket <-> debian
-> baut ein rpm für rpm-Systeme, hier uninteressant, außer Du wendest alien auf das rpm an.



Hier ist der install-Abschnitt des Makefile wichtig:

Code: Alles auswählen

.PHONY: all

all:
	+make -C driver
	+make -C utils

.PHONY: install
install:
	+make -C driver install
	+make -C utils install
-> install-Abschnitt von driver/Makefile:

Code: Alles auswählen

install: config_check modules
	echo $(INST_DIR)
	mkdir -p $(INST_DIR)
	install -m 0644 $(MODULE) $(INST_DIR)
ifndef DIST_DESTDIR
	-/sbin/depmod -a $(KVERS) -b $(DESTDIR)
endif
->

Code: Alles auswählen

$ egrep "INST_DIR|KVERS" Makefile
KVERS ?= $(shell uname -r)
KBUILD := $(shell readlink -f /lib/modules/$(KVERS)/build)
KVERS := $(shell sed -ne 's/"//g;s/^\#define UTS_RELEASE //p' $(VERSION_H))
INST_DIR ?= $(shell echo $(DESTDIR)/lib/modules/$(KVERS)/misc | sed 's^//^/^g')
Sieht eigentlich sauber aus.
Zuletzt geändert von rendegast am 24.12.2010 12:02:27, insgesamt 2-mal geändert.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Benutzeravatar
The Hit-Man
Beiträge: 2249
Registriert: 21.11.2004 17:01:56
Wohnort: Menden ( Sauerland )
Kontaktdaten:

Re: ndiswrapper mit kernel 2.6.36

Beitrag von The Hit-Man » 24.12.2010 11:55:33

habe mir meinen kernel per make-kpkg + linux sourcen und linux headers. das ergibt ja dann .deb pakete. diese habe ich dann einfach installiert. habe aber schon mal ein modul gebaut, für meine native wlan karte. das hat allerdings funktioniert oder sagen wir mal so, er hat das modul dann auch an die richtige stelle gepackt. per checkinstall habe ich dann aus der nativen karte nen .deb gemacht. da gabs keine probleme, nur beim ndiswrapper harkt es. kann mir natürlich behelfen und das modul dann an die richtigen stelle kopieren, möchte ich aber ungern, da es auch nen .deb paket werden sollte. achja, das .deb paket wird auch erstellt, mit dem ndiswrapper, allerdings auch dort steht es an der falschen position.

den nativen treiber konnte ich dann nur mit einem dpkg --force-all -i installieren, da irgendwas vom kernel störte. schien aber nicht weiter schlimm zu sein.

das dolle ist nur, das der ndiswrapper viel besser funtzt, als die nativen treiber. keine ahnung, warum das so ist.
Wer HTML postet oder gepostetes HTML quotet oder sich gepostetes oder
gequotetes HTML beschafft, um es in Verkehr zu bringen, wird geplonkt.

damals windows, früher ubuntu, danach debian, heute arch-linux ;)

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: ndiswrapper mit kernel 2.6.36

Beitrag von rendegast » 24.12.2010 12:06:56

Nach einer kleinen Änderung an drivers/Makefile:

Code: Alles auswählen

#install: config_check modules
install:
	echo $(INST_DIR)
	echo mkdir -p $(INST_DIR)
	echo install -m 0644 $(MODULE) $(INST_DIR)
ifndef DIST_DESTDIR
	-/sbin/depmod -a $(KVERS) -b $(DESTDIR)
endif
->
$ make install
make -C driver install
make[1]: Entering directory `/tmp/ndis/ndiswrapper-1.56/driver'
echo /lib/modules/misc
/lib/modules/misc
echo mkdir -p /lib/modules/misc
mkdir -p /lib/modules/misc
echo install -m 0644 ndiswrapper.ko /lib/modules/misc
install -m 0644 ndiswrapper.ko /lib/modules/misc
Da ist dann wohl ein kleiner Bug.


Die für obige Varable INSTDIR wichtige Variable KVERS wird am Anfang bestimmt:

Code: Alles auswählen

KVERS ?= $(shell uname -r)

# KBUILD is the path to the Linux kernel build tree.  It is usually the
# same as the kernel source tree, except when the kernel was compiled in
# a separate directory.
KBUILD := $(shell readlink -f /lib/modules/$(KVERS)/build)

ifeq (,$(KBUILD))
$(error Kernel tree not found - please set KBUILD to configured kernel)
endif

# Kernel Makefile doesn't always know the exact kernel version, so we
# get it from the kernel headers instead and pass it to make.

VERSION_H := $(KBUILD)/include/linux/utsrelease.h
ifeq (,$(wildcard $(VERSION_H)))
VERSION_H := $(KBUILD)/include/linux/version.h
endif
ifeq (,$(wildcard $(VERSION_H)))
$(error Cannot find kernel version in $(KBUILD), is it configured?)
endif

KVERS := $(shell sed -ne 's/"//g;s/^\#define UTS_RELEASE //p' $(VERSION_H))
Das 'uname -r' ist richtig.
Also steckt der Fehler im Auswerten von utsrelease/version.h oder dem sed-Ausdruck.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: ndiswrapper mit kernel 2.6.36

Beitrag von rendegast » 24.12.2010 12:20:21

Da steckt die Lösung:

Code: Alles auswählen

:/lib/modules/2.6.36.2# find build/ | egrep "version.h|utsrelease.h"
build/include/xen/interface/version.h
build/include/linux/dvb/version.h
build/include/linux/version.h
build/include/config/isdn/diversion.h
build/include/config/localversion.h
build/include/sound/version.h
build/include/generated/utsrelease.h

:/lib/modules/2.6.36.2# cat build/include/generated/utsrelease.h
#define UTS_RELEASE "2.6.36.2"

:/lib/modules/2.6.36.2# cat build/include/linux/version.h
#define LINUX_VERSION_CODE 132644
#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
Der sed-Ausdruck ist für die utsrelease.h, die aber ab vanilla-Kernel ? an anderem Ort steckt.

Das gilt für einen einfach kompilierten Kernel + dessen source,
wie für das durch kernel-package erstellte headers-Paket.

Ändere

Code: Alles auswählen

VERSION_H := $(KBUILD)/include/linux/utsrelease.h
ifeq (,$(wildcard $(VERSION_H)))
VERSION_H := $(KBUILD)/include/linux/version.h
endif
in

Code: Alles auswählen

VERSION_H := $(KBUILD)/include/generated/utsrelease.h
ifeq (,$(wildcard $(VERSION_H)))
VERSION_H := $(KBUILD)/include/linux/version.h
endif
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Benutzeravatar
The Hit-Man
Beiträge: 2249
Registriert: 21.11.2004 17:01:56
Wohnort: Menden ( Sauerland )
Kontaktdaten:

Re: ndiswrapper mit kernel 2.6.36

Beitrag von The Hit-Man » 24.12.2010 12:26:44

ja, danke erst mal. aber was meinst du mit "einfachen kernel"? meine kernel sourcen und headers liegen doch da, wo sie auch liegen sollten und der linux-link sitzt ja dann auch richtig.
also ist es nen bug vom ndiswrapper? also dessen installations script? oder lag jetzt jetzt an mir?
Wer HTML postet oder gepostetes HTML quotet oder sich gepostetes oder
gequotetes HTML beschafft, um es in Verkehr zu bringen, wird geplonkt.

damals windows, früher ubuntu, danach debian, heute arch-linux ;)

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: ndiswrapper mit kernel 2.6.36

Beitrag von rendegast » 24.12.2010 13:39:49

meine kernel sourcen und headers
Mehrdeutig.
ZBsp. "raw":

Code: Alles auswählen

make menuconfig
make all
make install modules_install
Oder aus Paketen installiert,
wobei die Pakete unterschiedliche Strukturen besitzen können, zBsp. debian <-> kernel-package.

Ein "Bug" ist es insoweit, als daß dieser Pfad nicht an neuere Kernel angepaßt ist,
dazu http://sourceforge.net/projects/ndiswra ... es/stable/:
"1.56 2010-02-11"

Aber auch das:

Code: Alles auswählen

$ apt-cache policy ndiswrapper-common ndiswrapper-source 
ndiswrapper-common:
  Installiert: (keine)
  Kandidat:    1.56-1
  Versionstabelle:
     1.56-3 0
        -50 http://ftp2.de.debian.org/debian/ unstable/main i386 Packages
     1.56-1 0
        500 http://ftp2.de.debian.org/debian/ testing/main i386 Packages
     1.53-2 0
         -5 http://ftp2.de.debian.org/debian/ stable/main i386 Packages
ndiswrapper-source:
  Installiert: (keine)
  Kandidat:    1.56-1
  Versionstabelle:
     1.56-3 0
        -50 http://ftp2.de.debian.org/debian/ unstable/main i386 Packages
     1.56-1 0
        500 http://ftp2.de.debian.org/debian/ testing/main i386 Packages
     1.53-2 0
         -5 http://ftp2.de.debian.org/debian/ stable/main i386 Packages
Wolltest Du das "neueste" ndiswrapper für lenny haben?
Dann hättest Du ja schon allein mit der Kompilation des 2.6.36 auf lenny genug Arbeit gehabt.
Fährst Du jedoch squeeze, so hast Du Dir wegen der ohnehin vorhandenen Pakete umsonst Arbeit gemacht.
Nach den trivialen Abhängigkeiten würden die squeeze-Pakete wohl auch unter lenny einsetzbar sein.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Benutzeravatar
The Hit-Man
Beiträge: 2249
Registriert: 21.11.2004 17:01:56
Wohnort: Menden ( Sauerland )
Kontaktdaten:

Re: ndiswrapper mit kernel 2.6.36

Beitrag von The Hit-Man » 25.12.2010 23:06:41

ja, habe squeeze, allerdings habe ich es da nicht geschafft, die patches einzuspielen. da gabs fehler. der ndiswrapper läßt sich sonst nicht mit einem höheren kernel, als squeeze, nicht mehr richtig erstellen. daher auch die patches.
Wer HTML postet oder gepostetes HTML quotet oder sich gepostetes oder
gequotetes HTML beschafft, um es in Verkehr zu bringen, wird geplonkt.

damals windows, früher ubuntu, danach debian, heute arch-linux ;)

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: ndiswrapper mit kernel 2.6.36

Beitrag von rendegast » 26.12.2010 01:48:59

Gerade mal verglichen,
m-a: Das /usr/src/ndiswrapper.tar.bz2 aus ndiswrapper-source
ist identisch zum 1.56 von http://sourceforge.net/projects/ndiswrapper/files/
DKMS: Das /usr/src/ndiswrapper-1.56/ aus ndiswrapper-dkms
ist identisch zum driver/ des 1.56 von http://sourceforge.net/projects/ndiswrapper/files/

Jedoch, hättest Du Deine Patches + die Pfadänderung auf diese angewendet,
wären entsprechende Probleme beim Upgrade des debian-Kernels aufgetreten
(falls der auch mit einem ndiswrapper-Modul versorgt würde.
Aber, bin ja ein Fuchs, versorge ich den debian mit dem m-a, und das gepatchte dkms bleibt für die vanilla-Eigenkompilate ;) )




----------------------
Und ich sehe gerade, habe mich wohl vor ein paar Monaten schonmal damit beschäftigt:
Da liegt in /usr/src noch der ndiswrapper-Patch für 2.6.35 rum.
(usb.c wrapndis.c)
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Antworten