OVH Cloud OVH Cloud

usbnet

9 réponses
Avatar
Zouplaz
Bonjouar !

J'ai tous les modules nécessaires, ils sont chargés et j'ai un périphérique
usb reconnu (c'est une console de jeux).

Mais quand je fais un ifconfig usb0 up j'obtiens un message d'erreur disant
"device not found" ou un truc comme ça...

Le module usbnet est pourtant bien chargé.

'tention je suis pas en train de dire "je voudrais transférer des fichiers
et/ou disposer d'un accès au net sur ma console". Transférer des fichiers
je le fais déjà (sous linux) et pour l'accès au net il me faudrait une pile
tcp/ip sur la console en question.

Non, je voudrais juste que usb0 existe sur mon système et je n'y arrive pô
!

Y a une raison ? Je dois fournir d'autres infos (si oui lesquelles ?)

Merci

9 réponses

Avatar
Rakotomandimby
Zouplaz wrote:

Je dois fournir d'autres infos (si oui lesquelles ?)
-LEs lignes de la doc que tu suis pour installer ton bouzin ( ou bien le

lien de la doc, ca serai plus simple ).
-les commandes que toi tu as entré pour supporter ton bouzin .
- ce que tu as fait et ce que tu n'a pas fait de ce qui est dit dans la doc
.
- les eventuels messages d'erreur .
- la sortie de "lsmod "

--
http://mrakotom.free.fr

Avatar
Zouplaz
Rakotomandimby - :

Zouplaz wrote:

Je dois fournir d'autres infos (si oui lesquelles ?)
-LEs lignes de la doc que tu suis pour installer ton bouzin ( ou bien

le lien de la doc, ca serai plus simple ).
-les commandes que toi tu as entré pour supporter ton bouzin .
- ce que tu as fait et ce que tu n'a pas fait de ce qui est dit dans
la doc .
- les eventuels messages d'erreur .
- la sortie de "lsmod "



1) Bon y a pas de doc, je n'ai trouvé aucune doc traitant d'un lien usb
entre un périphérique de ce type (unknow) et linux. Seuls sont abordés
les liens avec des pda type zaurus.

2)
insmod uhci
insmod usb-storage
insmod usbnet
insmod usbcore

fstab est modifié comme suit (ajout d'une entrée) :
none /proc/bus/usb usbdevfs noauto 0
0

Puis mount /proc/bus/usb

3) Bin encore une fois c'est pas vraiment une doc.
4) Quand je fais un ifconfig usb0 up j'obtiens
usb0: unknown interface: No such device

5) lsmod
st 27184 0 (autoclean)
uhci 24576 0 (unused)
usb-storage 22896 0 (unused)
ehci-hcd 22288 0 (unused)
usbnet 14240 0 (unused)
usbcore 62048 1 [uhci usb-storage ehci-hcd usbnet]
sg 25456 0
sym53c8xx 57104 0
ipt_MASQUERADE 1248 1 (autoclean)
ppp_synctty 4944 0 (unused)
ppp_async 6544 1
ppp_generic 15552 3 [ppp_synctty ppp_async]
slhc 4992 0 [ppp_generic]
vmnet 21280 4
vmmon 20192 0 (unused)
via-rhine 12688 1
crc32 2912 0 [usbnet via-rhine]
natsemi 15760 1
ide-scsi 9056 0

Je reprise que le périphérique est reconnu par une application spécifique
à la bécane (spécifique à cette console) donc le lien usb fonctionne.

Le premier problème à résoudre c'est : pourquoi ifconfig usb0 ne
fonctionne-t-il pas ?

Si tu as une idée...


Avatar
J. Mayer
On Tue, 30 Sep 2003 21:05:37 +0000, Zouplaz wrote:

Rakotomandimby - :

...

1) Bon y a pas de doc, je n'ai trouvé aucune doc traitant d'un lien usb
entre un périphérique de ce type (unknow) et linux. Seuls sont abordés
les liens avec des pda type zaurus.
Il y en a plein dans le code :=)

Et le module usbnet n'est pas gros, et il est bien fait:
c'est un très bon exemple de driver réseau simple sous Linux :=)


2)
insmod uhci
insmod usb-storage
insmod usbnet
insmod usbcore
usbnet _avant_ usbcore ? Je ne te crois pas...

Mais ce n'est pas grave...

4) Quand je fais un ifconfig usb0 up j'obtiens
usb0: unknown interface: No such device
Que dit:

cat /proc/net/dev
Si tu ne le vois pas là, effectivement, il y a peu de chances
que ça marche...

En fait, le driver usbnet marche bien pour faire du transfert
Linux <-> Linux, mais n'est pas interropérable avec Windows
(sauf dans deux cas) et n'est généralement pas interropérable
avec les devices (sauf les Ipaq, Zaurus et Yopi. C'est à la fois
du à la documentation et à la "qualité" des drivers Windows
qui souvent n'offrent pas de vrai interface réseau mais ne s'interfacent
qu'avec des softs propriétaires...
Si tu m'offres ta console et que je trouve un peu de temps,
je peux regarder :=)
Sinon, tu devras patienter jusqu'à ce que quelqu'un se penche sur
le problème :=(
Plus sérieusement, tu devrais t'addresser au mainteneur du driver
en question: Pavel Machek, je crois, ou regarder s'il y a une mailing
list pour ce driver.

Avatar
Zouplaz
J. Mayer - :

On Tue, 30 Sep 2003 21:05:37 +0000, Zouplaz wrote:

Rakotomandimby - :

...

1) Bon y a pas de doc, je n'ai trouvé aucune doc traitant d'un lien usb
entre un périphérique de ce type (unknow) et linux. Seuls sont abordés
les liens avec des pda type zaurus.
Il y en a plein dans le code :=)

Et le module usbnet n'est pas gros, et il est bien fait:
c'est un très bon exemple de driver réseau simple sous Linux :=)



Ah tiens, c'est une bonne idée ça m'expliquera peut être ce qu'il se
passe...


2)
insmod uhci
insmod usb-storage
insmod usbnet
insmod usbcore
usbnet _avant_ usbcore ? Je ne te crois pas...

Mais ce n'est pas grave...


T'as raison j'ai cité dans le désordre !


4) Quand je fais un ifconfig usb0 up j'obtiens
usb0: unknown interface: No such device
Que dit:

cat /proc/net/dev
Si tu ne le vois pas là, effectivement, il y a peu de chances
que ça marche...



Non, rien de rien...

En fait, le driver usbnet marche bien pour faire du transfert
Linux <-> Linux, mais n'est pas interropérable avec Windows
(sauf dans deux cas) et n'est généralement pas interropérable
avec les devices (sauf les Ipaq, Zaurus et Yopi. C'est à la fois
du à la documentation et à la "qualité" des drivers Windows
qui souvent n'offrent pas de vrai interface réseau mais ne s'interfacent
qu'avec des softs propriétaires...
Si tu m'offres ta console et que je trouve un peu de temps,
je peux regarder :=)


Ah mais pourquoi Microsoft ??? J'ai jamais dit qu'il s'agissait d'une XBox
!! Non c'est une GP32, une console portable à base d'un proc ARMT920 et
dotée d'une liaison usb.

C'est d'ailleurs pour ça que je dis que la liaison est bonne puisqu'un
petit utilitaire spécifique me permet de transferer des fichiers entre
l'hote linux et la console.

Sinon, tu devras patienter jusqu'à ce que quelqu'un se penche sur
le problème :=(
Plus sérieusement, tu devrais t'addresser au mainteneur du driver
en question: Pavel Machek, je crois, ou regarder s'il y a une mailing
list pour ce driver.



Oui mais je comprends pas bien si usbnet PEUT servir à quoi que ce soit
dans le cas d'une liaison de ce type...

En fait, mon objectif est de d'établir une liaison ppp sur usb0 et ensuite
de bricoler en C sur la console pour essayer de me faire une mini pile ip
(ne parlons même pas de tcp) à but purement pédagogique...

Si usb0 veut bien exister le reste ne devrait pas poser problème...

Allez, allez quoi, t'as bien une piste ;-) !!


Avatar
J. Mayer
On Wed, 01 Oct 2003 10:20:53 +0000, Zouplaz wrote:

J. Mayer - :

On Tue, 30 Sep 2003 21:05:37 +0000, Zouplaz wrote:



....
4) Quand je fais un ifconfig usb0 up j'obtiens
usb0: unknown interface: No such device
Que dit:

cat /proc/net/dev
Si tu ne le vois pas là, effectivement, il y a peu de chances
que ça marche...


Non, rien de rien...
Donc, on est fixé...



En fait, le driver usbnet marche bien pour faire du transfert
Linux <-> Linux, mais n'est pas interropérable avec Windows
(sauf dans deux cas) et n'est généralement pas interropérable
avec les devices (sauf les Ipaq, Zaurus et Yopi. C'est à la fois
du à la documentation et à la "qualité" des drivers Windows
qui souvent n'offrent pas de vrai interface réseau mais ne s'interfacent
qu'avec des softs propriétaires...
Si tu m'offres ta console et que je trouve un peu de temps,
je peux regarder :=)


Ah mais pourquoi Microsoft ??? J'ai jamais dit qu'il s'agissait d'une XBox
!! Non c'est une GP32, une console portable à base d'un proc ARMT920 et
dotée d'une liaison usb.

Parce que la plupart des questions sur ce driver portent sur ce type

d'échange et que, de plus, je connais le problème pour avoir travaillé
dessus...

C'est d'ailleurs pour ça que je dis que la liaison est bonne puisqu'un
petit utilitaire spécifique me permet de transferer des fichiers entre
l'hote linux et la console.


Donc tu vois la console sur ton bus USB, comme un device propriétaire,
c'est ça ? Est ce que tu sais ce que fait cet utilitaire sur le bus
USB ?


Sinon, tu devras patienter jusqu'à ce que quelqu'un se penche sur
le problème :=(
Plus sérieusement, tu devrais t'addresser au mainteneur du driver
en question: Pavel Machek, je crois, ou regarder s'il y a une mailing
list pour ce driver.



Oui mais je comprends pas bien si usbnet PEUT servir à quoi que ce soit
dans le cas d'une liaison de ce type...

En fait, mon objectif est de d'établir une liaison ppp sur usb0 et ensuite
de bricoler en C sur la console pour essayer de me faire une mini pile ip
(ne parlons même pas de tcp) à but purement pédagogique...

Si usb0 veut bien exister le reste ne devrait pas poser problème...

Allez, allez quoi, t'as bien une piste ;-) !!


usbnet fourni des device de type ethernet. Au niveau USB, les trames
ethernet sont généralement encapsulées dans une "trame" au format
rudimentaire.
Pour t'en servir, il faut que tu ai déjà une couche IP. Idem pour ppp,
d'ailleurs...
Il faudrait que tu te serve de quelque chose de plus simple,
tant que tu n'as pas de liaison IP: une émulation de port série
ou de serveur tftp, par exemple. Il vaut mieux le faire en mode
user (avec la libusb) et le porter dans le kernel une fois que
ça marche !
Mais il faut que tu saches ou que tu découvres ce que fait le
logiciel de transfert que tu utilises. Un petit sniffer USB n'est
jamais de trop, dans ce cas là.



Avatar
Zouplaz
J. Mayer - :

C'est d'ailleurs pour ça que je dis que la liaison est bonne
puisqu'un petit utilitaire spécifique me permet de transferer des
fichiers entre l'hote linux et la console.


Donc tu vois la console sur ton bus USB, comme un device propriétaire,
c'est ça ? Est ce que tu sais ce que fait cet utilitaire sur le bus
USB ?


Je suppose qu'il se sert de usbdevfs (si je fais pas un mount ça ne
fonctionne pas). Mais j'ignore tout de usbdevfs


usbnet fourni des device de type ethernet. Au niveau USB, les trames
ethernet sont généralement encapsulées dans une "trame" au format
rudimentaire.
Pour t'en servir, il faut que tu ai déjà une couche IP. Idem pour ppp,
d'ailleurs...


Eh bien je voudrais bien essayer de forger quelques paquets sur la ptite
console... Mais j'en suis pas encore là.

Il faudrait que tu te serve de quelque chose de plus simple,
tant que tu n'as pas de liaison IP: une émulation de port série
ou de serveur tftp, par exemple. Il vaut mieux le faire en mode
user (avec la libusb) et le porter dans le kernel une fois que
ça marche !
Mais il faut que tu saches ou que tu découvres ce que fait le
logiciel de transfert que tu utilises. Un petit sniffer USB n'est
jamais de trop, dans ce cas là.



J'ai les sources quelque part... je vais y jeter un coup d'oeil.

------------------------------------------------------------------------

Ceci étant j'ai mis un coup de pied dans usbnet.c : j'ai rajouté quelques
lignes qui définissent un driver bidon (je me suis basé sur un driver
existant)... Attention je n'ai pas crée de code, juste copié deux
structures incluant les vendor/product ID de la console.

Maintenant quand je l'allume non seulement il n'y a plus de message linux
indiquant qu'aucun driver n'a réclamé le périphérique mais de plus j'ai bel
et bien ifconfig usb0 qui passe.

Par contre j'ai fait un mknod /dev/usb/usb0 c 243 0
je sais pas si j'aurais du...

Il faudrait maintenant que j'arrive à savoir si quelque chose peut
transiter entre la console et cette interface usb0. Pour l'instant c'est le
nombre d'erreur qui augmente sur usb0.

Déjà, sur le principe ça me dirait si je peux aller plus loin.

M'enfin, je sais pas si c'est pas un peut trop compliqué pour moi. Le
firmware de la console permet un accès "haut niveau" au port usb (selon un
protocole maison je suppose). Il faudrait que je descende très bas au
niveau du contrôleur usb mais bien évidemment la documentation est assez
rare. D'ou un niveau de complexité assez méchant surtout sans outil
spécifique pour développer (écrire du code sans même pas pouvoir mettre un
breakpoint... pas simple).

Je sais pas trop quoi en penser... Il y a bien un émulateur mais je doute
qu'il émule le hard à ce point là... et puis il tourne sous windows, y a
pas les sources, etc etc...


Avatar
J. Mayer
On Wed, 01 Oct 2003 13:28:15 +0000, Zouplaz wrote:

J. Mayer - :

C'est d'ailleurs pour ça que je dis que la liaison est bonne
puisqu'un petit utilitaire spécifique me permet de transferer des
fichiers entre l'hote linux et la console.


Donc tu vois la console sur ton bus USB, comme un device propriétaire,
c'est ça ? Est ce que tu sais ce que fait cet utilitaire sur le bus
USB ?


Je suppose qu'il se sert de usbdevfs (si je fais pas un mount ça ne
fonctionne pas). Mais j'ignore tout de usbdevfs

usbdevfs marche avec des ioctl si je me souviens bien.

En lisant et en écrivant sur les devices, tu dois pouvoir envoyer
et recevoir des packets USB.


usbnet fourni des device de type ethernet. Au niveau USB, les trames
ethernet sont généralement encapsulées dans une "trame" au format
rudimentaire.
Pour t'en servir, il faut que tu ai déjà une couche IP. Idem pour ppp,
d'ailleurs...


Eh bien je voudrais bien essayer de forger quelques paquets sur la ptite
console... Mais j'en suis pas encore là.

Il faudrait que tu te serve de quelque chose de plus simple,
tant que tu n'as pas de liaison IP: une émulation de port série
ou de serveur tftp, par exemple. Il vaut mieux le faire en mode
user (avec la libusb) et le porter dans le kernel une fois que
ça marche !
Mais il faut que tu saches ou que tu découvres ce que fait le
logiciel de transfert que tu utilises. Un petit sniffer USB n'est
jamais de trop, dans ce cas là.



J'ai les sources quelque part... je vais y jeter un coup d'oeil.
Tu es sauvé, alors !



------------------------------------------------------------------------

Ceci étant j'ai mis un coup de pied dans usbnet.c : j'ai rajouté quelques
lignes qui définissent un driver bidon (je me suis basé sur un driver
existant)... Attention je n'ai pas crée de code, juste copié deux
structures incluant les vendor/product ID de la console.

Maintenant quand je l'allume non seulement il n'y a plus de message linux
indiquant qu'aucun driver n'a réclamé le périphérique mais de plus j'ai bel
et bien ifconfig usb0 qui passe.
C'est normal...



Par contre j'ai fait un mknod /dev/usb/usb0 c 243 0
je sais pas si j'aurais du...
Ca ne sert à rien pour une interface réseau...



Il faudrait maintenant que j'arrive à savoir si quelque chose peut
transiter entre la console et cette interface usb0. Pour l'instant c'est le
nombre d'erreur qui augmente sur usb0.
C'est tout aussi normal: la couche réseau de Linux essaye d'envoyer

des packets dessus. Rien ne se passe, donc il y a des timeout et
il note les packets comme étant en erreur...

Déjà, sur le principe ça me dirait si je peux aller plus loin.

M'enfin, je sais pas si c'est pas un peut trop compliqué pour moi. Le
firmware de la console permet un accès "haut niveau" au port usb (selon un
protocole maison je suppose). Il faudrait que je descende très bas au
niveau du contrôleur usb mais bien évidemment la documentation est assez
rare. D'ou un niveau de complexité assez méchant surtout sans outil
spécifique pour développer (écrire du code sans même pas pouvoir mettre un
breakpoint... pas simple).
Si tu sais comment marche le logiciel de transfert de fichier,

tu peux sans doute faire un pseudo fichier de chaque coté,
via deux démons. Ca te fait une émulation basique de port série
bidirectionnel... Ensuite, tu fait une couche IP dans le daemon
qui tourne sur la console et tu peux lancer ppp...
Note que tu peux développer et debugger celà en local sur ta machine
Linux et adapter le programme qui doit tourner sur la console une
fois que ça marche. Comme ça, tu pourras débugger dans de bonnes
conditions...



Avatar
Zouplaz
J. Mayer - :

Si tu sais comment marche le logiciel de transfert de fichier,
tu peux sans doute faire un pseudo fichier de chaque cot‚,
via deux d‚mons. Ca te fait une ‚mulation basique de port s‚rie
bidirectionnel... Ensuite, tu fait une couche IP dans le daemon
qui tourne sur la console et tu peux lancer ppp...
Note que tu peux d‚velopper et debugger cel… en local sur ta machine
Linux et adapter le programme qui doit tourner sur la console une
fois que ‡a marche. Comme ‡a, tu pourras d‚bugger dans de bonnes
conditions...



Ha pas sur parce que le soft de transfert de fichier ne fonctionne (comme
son homologue sous windows) que si la console est placée dans un mode
spécial (le mode transfert de fichiers justement)... Dans ce cas, le soft
en question papotte avec un protocole très très simple avec la console et
lui transmet des commandes sur le port usb genre 0x77 (faire un mkdir),
suivi du chemin etc etc

Je ne peux pas compter là dessus pour aller plus loin... Par contre peut-
être je peux essayer de voir ce que je peux faire avec des appels usb haut
niveau (s'ils existent dans le firmware pour l'instant j'ai rien trouvé...)
et suivre ta méthode.

Ceci dit je comprends pas trop quand tu dis créer un démon côté linux...
Oui, il recevrait des données provenant de la console mais comment faire
passer ces données vers le pppd (celui qui tournera sur linux) ?? pppd peut
ingurgiter des données provenant d'un autre démon et non pas d'une
interface ??

Avatar
J. Mayer
On Wed, 01 Oct 2003 14:26:30 +0000, Zouplaz wrote:

J. Mayer - :

Si tu sais comment marche le logiciel de transfert de fichier,
tu peux sans doute faire un pseudo fichier de chaque cot‚,
via deux d‚mons. Ca te fait une ‚mulation basique de port s‚rie
bidirectionnel... Ensuite, tu fait une couche IP dans le daemon
qui tourne sur la console et tu peux lancer ppp...
Note que tu peux d‚velopper et debugger cel… en local sur ta machine
Linux et adapter le programme qui doit tourner sur la console une
fois que ‡a marche. Comme ‡a, tu pourras d‚bugger dans de bonnes
conditions...



Ha pas sur parce que le soft de transfert de fichier ne fonctionne (comme
son homologue sous windows) que si la console est placée dans un mode
spécial (le mode transfert de fichiers justement)... Dans ce cas, le soft
en question papotte avec un protocole très très simple avec la console et
lui transmet des commandes sur le port usb genre 0x77 (faire un mkdir),
suivi du chemin etc etc

Je ne peux pas compter là dessus pour aller plus loin... Par contre peut-
être je peux essayer de voir ce que je peux faire avec des appels usb haut
niveau (s'ils existent dans le firmware pour l'instant j'ai rien trouvé...)
et suivre ta méthode.



Pour savoir comment ça marche, il te faut un sniffer sur ton PC
windows, donc. J'en ai déjà utilisé un, mais je ne me souviens plus
de son nom (snoopy ?). Tu lances ensuite les commandes une à une
et tu en déduis ce que veut dire ce que tu vois passer sur le bus.
Si tu peux lancer un executable en background sur la console dans
ce mode, c'est nickel, sinon, il faut que tu trouves les API de
haut niveau, en effet...
Si tu as un firmware pour la console sur ton PC, ça peut être plus
simple, en essayant de trouver les symboles dans le firmware, etc...

Ceci dit je comprends pas trop quand tu dis créer un démon côté linux...
Oui, il recevrait des données provenant de la console mais comment faire
passer ces données vers le pppd (celui qui tournera sur linux) ?? pppd peut
ingurgiter des données provenant d'un autre démon et non pas d'une
interface ??


ppp marche très bien sur un port série (ou tout autre pseudo
device assez ressemblant). Donc, si ton pseudo-device réagit à peu
près comme un port série standard, ça doit marcher. Ca marche aussi
entre deux processus: c'est comme celà que marche pppoe, dans
rp-pppoe, si je ne me trompes pas. Tu peux sans doute regarder
ce qu'il fait pour que ça marche...
Dans le pire des cas, si tu as 2 ports séries sur ton PC, tu les relies
entre eux, tu lances ppp sur l'un d'entre eux et tu te sert du
second comme interface pour ton démon. Ca peut être une solution
temporaire pour éviter d'avoir à écrire du code pour celà...