[gull] Wifi en mode master

Guillaume Yziquel guillaume.yziquel at free.fr
Mon May 14 03:28:18 CEST 2007


Je me suis rendu compte que j'ai oublié de mettre la liste en Cc. Voici
donc ma réponse à Jeremy. Veuillez me pardonner pour la longueur...

> D'Inverno Jeremy a écrit :
>> > Bonjour Guillaume,
> 
> Bonjour Jérémy,
> 
> je te remercie pour ta réponse rapide.
> 
>> > D'après le HowTo que tu as suivi sur le site intelllinuxwireless.org
>> > <http://intellinuxwireless.org/?p=mac80211&n=HOWTO-mac80211>, il te faut
>> > les sources de ton kernel.
> 
> Et ce sont ces sources qui sont censées être montrées du doigt par le
> lien en /lib/modules/2.6.18-4-amd64/sources/, si j'ai bien compris.
> 
>> > A mon avis pas de problèmes au niveau des sources manques certainement
>> > au niveau des liens dans /libm/modules/2.6.18-4-amd64/
> 
> Ben, concernant les sources, je ne sais vraiment pas où elles se
> trouvent sur mon ordinateur. J'ai lu sur internet qu'on pouvait les
> installer via un apt-get install kernel-source-version, mais je ne
> trouve pas de tels paquets dans aptitude.
> 
> Bref. Je ne sais pas vraiment quelle est la méthode canonique
> d'installation des sources du noyau.
> 
>> > Si le lien /libb/modules/2.6.18-4-amd64/sources n'existe pas, il
>> > n'arrives pas a trouver le Makefile de ton kernel, et il n'as pas l'aire
>> > d'apprécier:
> 
> Visiblement...
> 
>> > Perso je n'ai pas de lien /lib/modules/`uname -r`/sources mais j'ai un
>> > lien build vers les sources de mon kernel.
>> > 
>> > jeremy at neptune:/lib/modules/2.6.20-15-generic$ ls -l build
>> > lrwxrwxrwx 1 root root 40 2007-04-25 11:33 build ->
>> > /usr/src/linux-headers-2.6.20-15-generic
> 
> J'ai la même chose:
> 
>> > yziquel at seldon:~$ ls -la /lib/modules/2.6.18-4-amd64/
>> > total 1340
>> > [...]
>> > lrwxrwxrwx 1 root root     37 2007-05-13 13:51 build -> /usr/src/linux-headers-2.6.18-4-amd6 4
>> > lrwxrwxrwx 1 root root     37 2007-04-05 13:31 build.save -> /usr/src/linux-headers-2.6.18-4-amd64
>> > [...]
>> > yziquel at seldon:~$
> 
> Mais cela ne pointe que vers des en-têtes, et non pas vers le code en
> tant que tel...
> 
>> > Je pense qu'il te faut un lien sources vers ton kernel qui contient ton
>> > Makefile qui manque:
>> > 
>> > jeremy at neptune:/lib/modules/2.6.20-15-generic$ ls -l sources
>> > lrwxrwxrwx 1 root root 41 2007-05-13 17:51 sources ->
>> > /usr/src/linux-headers-2.6.20-15-generic/
> 
> Même remarque: Il ne s'agit que d'en-têtes et non pas du code.
> 
>> > Et pour Host AP comme expliqué ici <http://en.wikipedia.org/wiki/HostAP>
>> > il s'agit d'un pilote permettant d'utiliser ta carte en mode MASTER
>> > (comme point d'accès).
>> > 
>> > Voila, je te souhaite bonne chance
> 
> Merci. Je vais en avoir besoin: ma première compilation de noyau
> s'annonce douloureuse.
> 
> Guillaume Yziquel.

et Jeremy m'a répondu:

> Essaye un
> #aptitude install kernel-headers-`uname -r`
> 
> C'est possible que les sources completes ne soit pas necessaire mais juste les "en-têtes".

Bon. Alors, les en-têtes, je les avais déjà. Pour les sources, j'ai
effectivement installé, via aptitude, le package linux-tree-2.6.18, qui
dépendait, entre autres, de linux-source-2.6.18. Cela a donc mis dans
/usr/src/ un archive linux-source-2.6.18.tar.bz2. En décompressant, on
obtient donc le code du noyau. Pour moi, c'est de l'ordre de la découverte.

Je me suis, par ailleurs, appuyé sur ces deux documents pour comprendre
un peu commet Debian gère le noyau Linux:

http://kernel-handbook.alioth.debian.org/ch-packaging.html

http://kernel-handbook.alioth.debian.org/ch-common-tasks.html

J'ai donc mis mon code de noyau au niveau "patchlevel" 4. Comme le noyau
que j'utilise actuellement. (Mis à part ce driver, j'aimerais bien
conserver mon noyau tel qu'il est maintenant).

Une fois de le code du noyau désarchivé, j'ai créé un lien symbolique
/lib/modules/2.6.18-4-amd64/source vers /usr/src/linux-source-2.6.18/.

> yziquel at seldon:/lib/modules/2.6.18-4-amd64$ ls -la
> [...]
> lrwxrwxrwx 1 root root     37 2007-05-13 13:51 build -> /usr/src/linux-headers-2.6.18-4-amd64
> lrwxrwxrwx 1 root root     37 2007-04-05 13:31 build.save -> /usr/src/linux-headers-2.6.18-4-amd64
> [...]
> lrwxrwxrwx 1 root root     28 2007-05-14 02:49 source -> /usr/src/linux-source-2.6.18
> yziquel at seldon:/lib/modules/2.6.18-4-amd64$

Puis j'ai tenté d'apposer ce patch au code du noyau, en suivant les
instructions du HOWTO sommaire situé à
http://intellinuxwireless.org/?p=mac80211&n=HOWTO-mac80211

> yziquel at seldon:~/src/mac80211-7.0.9$ make clean
> Removing staging and built files.
> yziquel at seldon:~/src/mac80211-7.0.9$ make
> Building modified version in 'modified/' directory:
> Copying modified/ from origin/...done
> Applying patches and scripts from pending/.
>  + Applying: pending/09-range-name-rate.patch
>         Add WE range, name and rate capabilities
>  + Applying: pending/10-txpower.patch
>         Fix user specified TXPOWER from being overridden by stack.
>  + Applying: pending/20-wireless-dev-qos.patch
>         This is revised QoS patch target to replace the 20 and 21 pending
>  + Applying: pending/30-Fix-ieee80211_sta_config_auth-to-select-networks-if.patch
>         From c0485efc42bfde16590f25eb8a4d77ee48ccad9d Mon Sep 17 00:00:00 2001
>  + Applying: pending/30-fixup-giwrate.patch
>         Fix SIOGIWRATE so it actually returns the most recent rate *or* highest
> Checking kernel compatibility in:
>         /lib/modules/2.6.18-4-amd64/source//
>  * Kernel requires compatibility version:
>    - Requires qdisc API compat
>    - Requires non-block crypto compat
>    - Requires delayed_work compat
>    - Requires net_device::ieee80211_ptr compat
>    - Requires rtnl_notify API compat
>    - Requires class_dev -> dev API compat
>    - Requires to_net_dev API compat
>    - Requires dev_release API compat
>    - Requires genetlink removal compat
>    - Requires device_rename compat
>    - Requires net_sch_fifo compat
> Building compatibility version in 'compatible/' directory:
> Copying compatible/ from modified/...done
>  + Applying: patches/qdisc-api.patch
>         Use older qdisc API for qdisc_create_dflt
>  + Applying: patches/block-cipher.patch
>         Switch crypto system to older non-block cipher algorithms.
>  + Applying: patches/ieee80211_ptr.patch
>         Re-use ax25_ptr in net_device for ieee80211_ptr
>  + Running: ieee80211_ptr.sh
>         Type-cast reused void* ax25_ptr to struct wireless_dev *
>  + Applying: patches/delayed_work.patch
>         Add delayed_work structure compatibility.
>  + Running: delayed_work.sh
>         Use compat_ delayed_work functions to fix argument issues.
>  + Applying: patches/rtnl_notify.patch
>         Use netlink_broadcast vs. rtnl_notify
>  + Applying: patches/remove_debugfs.patch
>         Remove DEBUGFS usage (due to class_dev breakage)
>  + Applying: patches/class_dev_to_dev-wireless-ieee80211_ptr.patch
>         Reverse class_dev to dev changes when ieee80211_ptr is used
>  + Applying: patches/dev_release.patch
>         Legacy device.h API (dev_uevent, dev_release, dev_attrs)
>  + Applying: patches/nl80211-remove-kconfig.patch
>         Remove nl80211 from being an option in Kconfig
>  + Applying: patches/device_rename.patch
>         The ability to rename devices requires device_rename so we can't use it.
>  + Applying: patches/net_sch_fifo.patch
>         Add pfifo_qdisc if kernel doesn't support explicit CONFIG_NET_SCHED_FIFO

Si j'ai bien compris, c'est plutôt à ce moment que le patch est apposé:

> yziquel at seldon:~/src/mac80211-7.0.9$ su
> Password:
> seldon:/home/yziquel/src/mac80211-7.0.9# make patch_kernel
> Patching from compatible/ to /lib/modules/2.6.18-4-amd64/source/:
>  + Copied 64 files.
> Checking for required kernel build updates...
>  - checking net/Kconfig and net/Makefile...
>  + Updated Kconfig for mac80211
>  + Updated Makefile for mac80211
>  + Updated /lib/modules/2.6.18-4-amd64/source/net/Kconfig for cfg80211
>  + Updated /lib/modules/2.6.18-4-amd64/source/net/Makefile for cfg80211
>  - checking net/core/Makefile for old 'wireless'...
>  + Removed legacy wireless from /lib/modules/2.6.18-4-amd64/source/net/core/Makefile
>  - checking net/Makefile and Kconfig for old 'd80211'...
> Done.
> 
> NOTE:  As of mac80211-2.0.0, kernel built-ins for the wireless extension
> handlers have been replaced with built-ins provided by mac80211.  This
> requires you to rebuild your main kernel image and reboot to that
> kernel in order to use the mac80211 subsystem.  We are looking for ways
> to correct this in the future.

Cette note me semble indiqué qu'on ne pouvait pas se contenter des
en-têtes, et que le code du noyau était bien nécessaire.

> seldon:/home/yziquel/src/mac80211-7.0.9# cd /lib/modules/2.6.18-4-amd64/build
> seldon:/lib/modules/2.6.18-4-amd64/build# make menuconfig
> scripts/Makefile.build:17: /usr/src/linux-headers-2.6.18-4-amd64/scripts/basic/Makefile: Aucun fichier ou répertoire de ce type
> make[1]: *** Pas de règle pour fabriquer la cible « /usr/src/linux-headers-2.6.18-4-amd64/scripts/basic/Makefile ». Arrêt.
> make: *** [scripts_basic] Erreur 2
> seldon:/lib/modules/2.6.18-4-amd64/build#

Et là, catastrophe. Quelque part, je me demande s'il est normal d'avoir
de tels liens symboliques désignants deux lieux distincts.

> lrwxrwxrwx 1 root root     37 2007-05-13 13:51 build -> /usr/src/linux-headers-2.6.18-4-amd64
> lrwxrwxrwx 1 root root     37 2007-04-05 13:31 build.save -> /usr/src/linux-headers-2.6.18-4-amd64
> lrwxrwxrwx 1 root root     28 2007-05-14 02:49 source -> /usr/src/linux-source-2.6.18

Bref. Tout commentaire est bienvenu. Parce que je commence à
sérieusement sécher...

Guillaume Yziquel.



More information about the gull mailing list