Comment apprendre la structure de Linux, les pilotes sans fil (mac80211)?
Il ya tellement de nombreuses structures dans le Linux sans fil pilote mac80211. Des choses comme struct net_device
, struct ieee80211_hw
, struct ieee80211_vif
et struct ieee80211_local
et ainsi de suite. Donc, beaucoup de structures que je ne comprends pas ce que l'information qu'ils contiennent et, quand elles ont été initialisées.
Comment puis-je en apprendre plus sur eux et l'ensemble de l'architecture de pilotes sans fil?
Salut, Bienvenue sur stackoverflow. De bonnes questions, obtenir de bonnes réponses ont généralement une plus étroite et plus spécifiquement la question que l'on vous ai demandé ici, qui est très large et ouverte.
Le mieux que je puisse vraiment proposer à partir de cette question est de la lecture de la source (lxr.linux.non/#linux+v3.0.3 c'est très pratique), qui rôdent sur certaines listes de discussion (linuxwireless.org/en/developers/MailingLists) et à l'essai de certaines modifications de votre propre. Si vous êtes en mesure de le faire et ensuite poser une question plus précise, je pense que vous aurez beaucoup de meilleures réponses.
Le mieux que je puisse vraiment proposer à partir de cette question est de la lecture de la source (lxr.linux.non/#linux+v3.0.3 c'est très pratique), qui rôdent sur certaines listes de discussion (linuxwireless.org/en/developers/MailingLists) et à l'essai de certaines modifications de votre propre. Si vous êtes en mesure de le faire et ensuite poser une question plus précise, je pense que vous aurez beaucoup de meilleures réponses.
OriginalL'auteur user907124 | 2011-08-23
Vous devez vous connecter pour publier un commentaire.
Vous voudrez peut-être vérifier Johannes Berg (mac80211 responsable) diapositives ici:
http://wireless.kernel.org/en/developers/Documentation/mac80211?action=AttachFile&do=get&target=mac80211.pdf
Ils peuvent être un peu obsolète, mais devrait vous donner un endroit pour commencer.
Un haut niveau de description de l'Linux WiFi de la pile du noyau:
netif_rx()
). À partir de là sur le net de base sera de passer à travers la pile TCP/IP de code et se placer en file d'attente sur les sockets à partir de laquelle le processus de l'espace utilisateur va le lire. Sur le Tx chemin paquets seront envoyés à partir de la netdev de base pour le pilote réseau sans fil à l'aide de lando_start_xmit()
de rappel. Le pilote de registres (comme d'autres netdevices comme un pilote ethernet) un ensemble d'opérations de rappels à l'aide de lastruct net_device_ops
.nl80211
(voirinclude/uapi/linux/nl80211.h
). Vous pouvez envoyer des commandes et des événements en réponse.nl80211
commande il obtient initialement traitée parcfg80211
module du noyau (c'est le code est sousnet/wireless
et les gestionnaires sont ennet/wireless/nl80211.c
).cfg80211
généralement appel à un pilote de niveau inférieur. En cas de Complète du matériel MAC spécifiques HW pilote est juste en dessous de cfg80211. Le pilote ci-dessouscfg80211
enregistre un ensemble d'op aveccfg80211
en utilisantcfg80211_ops struct
. Voir, par exemple, brcmfmac pilote (drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c
)mac80211
qui est un module du noyau de la mise en œuvre de la couche MAC 802.11. Dans ce cascfg80211
vais parler àmac80211
qui sera à son tour d'utiliser le matériel spécifique pilote de niveau inférieur. Un exemple de ceci est iwlwifi (Pour les puces d'Intel).mac80211
enregistre aveccfg80211
à l'aide de lacfg80211_ops
(voirnet/mac80211/cfg.c
). Spécifiques HW pilote enregistre avecmac80211
à l'aide de laieee80211_ops struct
(par exempledrivers/net/wireless/iwlwifi/mvm/mac80211.c
).ieee80211_allow_hw()
généralement après la détection du MATÉRIEL.ieee80211_alloc_hw()
obtient la taille des données privées struct utilisé par le HW pilote. À tour de rôle, les appelscfg80211 wiphy_new()
de l'affectation de l'espace suffisant pour le wiphy struct, leieee80211_local struct
(qui est utilisé parmac80211
) et le HW pilote de données privées (la superposition est vu dansieee80211_alloc_hw
code).ieee80211_hw
est encastré un struct dansieee80211_local
qui est "visible" pour le HW pilote. L'ensemble de ces (wiphy
,ieee80211_local
,ieee80211_hw
) représentent un seul périphérique connecté.ifconfig
. Chaque interface virtuelle est représentée par unieee80211_vif
. Cette structure contient également, à la fin privée des structures accessibles par le HW pilote. Plusieurs interfaces peuvent être utilisées pour exécuter quelque chose comme une station sur wlan0 et un point d'accès sur wlan1 (ce qui est possible en fonction de la HW capacités).OriginalL'auteur eyalsh