J'essaie de comprendre comment le modèle de périphérique/pilote Linux fonctionne et pour ce faire j'ai écrit un petit module. Ce module est simple, récupère un pointeur vers un struct net_device
(appelons-le netdev) par la fonction dev_get_by_name(&init_net, "eth0")
. Pourquoi la valeur de netdev->dev.bus
est NULL
? Ce pointeur doit-il représenter la structure bus_type
sur laquelle mon périphérique est connecté? Le champ netdev->parent->bus
n'est cependant pas NULL
mais il devrait représenter le bus pour eth controller ... une explication?Pourquoi dev.bus est NULL dans mon appareil?
Répondre
C'est parce que votre périphérique eth, ou mieux son dispositif « objet » dans le noyau, est pas un bus, et donc sa valeur de bus reste non initialisée. Mais son périphérique parent est généralement sur un bus et il suffit que le périphérique parent connaisse le bus sur lequel il se trouve, car les deux périphériques sont éventuellement liés lors de l'initialisation du pilote.
Jetons un oeil à un exemple: voici ce que j'ai dans sysfs pour mon appareil eth0 (notez le champ de l'appareil):
$ ll /sys/class/net/eth0/
total 0
-r--r--r-- 1 root root 4096 May 20 11:10 address
-r--r--r-- 1 root root 4096 May 20 11:10 addr_len
-r--r--r-- 1 root root 4096 May 20 11:10 broadcast
-r--r--r-- 1 root root 4096 May 20 11:10 carrier
lrwxrwxrwx 1 root root 0 May 20 11:10 device -> ../../../devices/pci0000:00/0000:00:19.0
-r--r--r-- 1 root root 4096 May 20 11:10 dev_id
-r--r--r-- 1 root root 4096 May 20 11:10 dormant
-r--r--r-- 1 root root 4096 May 20 11:10 features
-rw-r--r-- 1 root root 4096 May 20 11:10 flags
-rw-r--r-- 1 root root 4096 May 20 11:10 ifalias
-r--r--r-- 1 root root 4096 May 20 11:10 ifindex
-r--r--r-- 1 root root 4096 May 20 11:10 iflink
-r--r--r-- 1 root root 4096 May 20 11:10 link_mode
-rw-r--r-- 1 root root 4096 May 20 11:10 mtu
-r--r--r-- 1 root root 4096 May 20 11:10 operstate
drwxr-xr-x 2 root root 0 May 20 11:10 power
drwxr-xr-x 2 root root 0 May 20 11:10 statistics
lrwxrwxrwx 1 root root 0 May 20 11:10 subsystem -> ../../net
-rw-r--r-- 1 root root 4096 May 20 11:10 tx_queue_len
-r--r--r-- 1 root root 4096 May 20 11:10 type
-rw-r--r-- 1 root root 4096 May 20 11:10 uevent
Le lien pour le périphérique est créé à partir de ce code du pilote fonction sonde, où netdev est le dispositif de réseau, et PDEV le dispositif PCI associé:
SET_NETDEV_DEV(netdev, &pdev->dev);
qui selon la documentation est:
/* Set the sysfs physical device reference for the network logical device
* if set prior to registration will cause a symlink during initialization.
*/
#define SET_NETDEV_DEV(net, pdev) ((net)->dev.parent = (pdev))
Et voici ce que j'ai dans le dispositif PCI correspondant, qui a été fixé par SET_NETDEV_DEV (où vous pouvez remarquer le champ de bus):
$ ll /sys/devices/pci0000\:00/0000\:00\:19.0/
total 0
-rw-r--r-- 1 root root 4096 May 20 11:54 broken_parity_status
lrwxrwxrwx 1 root root 0 May 20 11:22 bus -> ../../../bus/pci
-r--r--r-- 1 root root 4096 May 20 11:07 class
-rw-r--r-- 1 root root 256 May 20 11:22 config
-r--r--r-- 1 root root 4096 May 20 11:54 device
lrwxrwxrwx 1 root root 0 May 20 11:22 driver -> ../../../bus/pci/drivers/e1000e
-rw------- 1 root root 4096 May 20 11:22 enable
-r--r--r-- 1 root root 4096 May 20 11:07 irq
-r--r--r-- 1 root root 4096 May 20 11:54 local_cpulist
-r--r--r-- 1 root root 4096 May 20 11:07 local_cpus
-r--r--r-- 1 root root 4096 May 20 11:22 modalias
-rw-r--r-- 1 root root 4096 May 20 11:22 msi_bus
lrwxrwxrwx 1 root root 0 May 20 11:22 net:eth0 -> ../../../class/net/eth0
drwxr-xr-x 2 root root 0 May 20 11:11 power
-r--r--r-- 1 root root 4096 May 20 11:22 resource
-rw------- 1 root root 131072 May 20 11:22 resource0
-rw------- 1 root root 4096 May 20 11:22 resource1
-rw------- 1 root root 32 May 20 11:22 resource2
lrwxrwxrwx 1 root root 0 May 20 11:22 subsystem -> ../../../bus/pci
-r--r--r-- 1 root root 4096 May 20 11:22 subsystem_device
-r--r--r-- 1 root root 4096 May 20 11:22 subsystem_vendor
-rw-r--r-- 1 root root 4096 May 20 11:22 uevent
-r--r--r-- 1 root root 4096 May 20 11:22 vendor
J'espère que cela clarifie la situtation.
- 1. problème avec requête (MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, null) sur mon appareil
- 2. asp.net MVC ModelState est null dans mon test d'unité. Pourquoi?
- 3. Pourquoi ce param est envoyé comme Null dans mon Bean?
- 4. Pourquoi mon nouvel objet() NULL?
- 5. pourquoi OperationContext.Current est null?
- 6. HttpContext.Current est null dans mon service web
- 7. Pourquoi @ ($ null) est $ false, mais @ ($ null, $ null) est $ true?
- 8. pourquoi est - (null) à la fin de mon objet
- 9. android: pourquoi est mon application "non disponible" pour mon appareil 2.3.3 (sur le marché)
- 10. Android, appareil photo dans mon application est pivoté
- 11. Pourquoi l'écran blanc de mes cartes v2 sur mon appareil?
- 12. Pourquoi mon httpServletRequest revient-il NULL?
- 13. Pourquoi HttpContext.Current.Session est null dans Global.asax?
- 14. Pourquoi est-ce un NULL
- 15. Mon appareil photo personnalisé arrive à se bloquer après avoir pris quelques photos pourquoi est-ce?
- 16. Pourquoi je n'arrive pas à ouvrir mon appareil photo?
- 17. Pourquoi mon scheduleAtFixedRate est-il ignoré dans mon code ..?
- 18. Impossible de déterminer si iCloud est activé sur mon appareil
- 19. mon tableau 2D est toujours NULL?
- 20. application de test dans mon appareil
- 21. UILocalNotification ne fonctionne pas dans mon appareil
- 22. Pourquoi Android XmlPullParser est-il vraiment lent sur mon ancien appareil?
- 23. Pourquoi est-ce que null <> null = null dans mysql
- 24. Pourquoi request_rec :: filename NULL lorsque la fonction ap_hook_type_checker est appelée dans mon module Apache 2.2?
- 25. Pourquoi ce tableau C NULL est-il indirectement appelé dans mon code Objective-C? (cocos2d)
- 26. UILabel non alloué, est null - pourquoi?
- 27. pourquoi je reçois un signal SIGUSR1 lorsque j'exécute mon application sur mon appareil?
- 28. Quel est le problème avec mon appareil photo?
- 29. Mon appareil n'est pas détecté pour tester mon application Android
- 30. HttpContext.Current.Session est null demandant des images. Pourquoi?
Merci Longfield la réponse Mon système est en cours d'exécution sur une carte basée sur un processeur MPC8306 et regarder/sys/class/net/eth0 j'ai le lien suivant pour le dispositif: 'appareil -> ../ .. /../ devices/e0100000.qe/e0102000.ethernet' et en regardant '/ sys/devices/e0100000.qe' et'/sys/devices/e0100000/e0102000.ethernet' j'ai trouvé que ceux-ci partagent le bus '/ sys /bus/of_platform'... Je dois utiliser le même bus sur lequel eth0 est en particulier un bus mii/mdio. Depuis le bus est vu comment firmware ouvert dois-je utiliser of_mii et of_mdio interface? Un petit exemple serait très utile! Merci beaucoup! – MirkoBanchi