Question

Nous avons une version Linux embarqué qui commence par un disque dur en mode veille (matériel). Le logiciel commence alors et permet l'alimentation du lecteur. Linux détecte la fin du lecteur:

ata1: exception Emask 0x10 SAct 0x0 SErr 0x4050000 action 0x42 frozen
ata1: soft resetting port
ata1: SATA link up 1.5 Gbps (SStatus 113 SControl F0000)
ata1.00: ATA-8, max UDMA/133, 976773168 sectors: LBA48 NCQ (depth 0/32)
ata1.00: ata1: dev 0 multi count 0
ata1.00: configured for UDMA/133
ata1: EH complete
  Vendor: ATA       Model: Hitachi HCS5C105  Rev: JC2O
  Type:   Direct-Access                      ANSI SCSI revision: 05
SCSI device sda: 976773168 512-byte hdwr sectors (500108 MB)
sda: Write Protect is off
SCSI device sda: drive cache: write back
SCSI device sda: 976773168 512-byte hdwr sectors (500108 MB)
sda: Write Protect is off
SCSI device sda: drive cache: write back
 sda: sda1 sda2
sd 0:0:0:0: Attached scsi disk sda
sd 0:0:0:0: Attached scsi generic sg0 type 0

Malheureusement, les tentatives de logiciels pour accéder au lecteur avant ci-dessus SCSI se détecter. On pourrait ajouter un sommeil, mais ce n'est pas un mécanisme fiable comme nous l'avons remarqué que le temps nécessaire pour détecter est non-déterministe.

Est-il possible d'obtenir le noyau / hotplug / etc. système de rapport lorsque le disque dur est détecté?

Merci.

Était-ce utile?

La solution

Je pense que la réponse est quelque part dans le udev gestionnaire de périphériques ( wikipedia ). Il est entièrement utilisable dans un environement intégré.

Il vous permet de règles d'écriture qui sont en mesure de scripts / programmes de lancement lors de la détection des périphériques.

Quelque chose comme cela pourrait faire les choses:

KERNEL=="sda", RUN+="/usr/bin/my_program"

Si vous avez un ancien noyau, vous pouvez avoir le système hotplug activée.

Les derniers wouls chance l'outil inotify qui vous permettent de contrôler quoi que ce soit dans votre fichier système (même répertoire / dev:).)

Autres conseils

Vous avez un ensemble d'options pour ce faire, du plus simple au plus compliqué:

  • vote manuelle . Il suffit d'écrire un script shell que les sondages jusqu'à ce que le disque dur est disponible avant de l'utiliser. Certes, ce n'est pas la plus belle solution, mais il fonctionne et est simple.
  • mdev . Si votre système Linux embarqué est basé Busybox (qui je l'espère est!), Puis Busybox intègre le programme mdev. Son utilisation est très simple et est documenté http://git.buildroot.net/ busybox / arbre / docs / mdev.txt . mdev vous permettra très facilement d'exécuter un script shell quand se détecte un périphérique. Si vous avez déjà Busybox dans votre système Linux embarqué, c'est certainement la solution que je recommande.
  • udev , tel que proposé par d'autres. Ceci est la solution utilisée dans les systèmes de bureau / serveur épanouie. Il a plus de dépendances que mdev et est un peu plus difficile à installer. Si vous avez seulement votre problème de détection de disque dur à résoudre, je dirais que l'utilisation udev est un peu exagéré, mais si vous avez l'intention de l'utiliser à d'autres fins, pourquoi pas.
  • udev + udisks + dbus , c'est en fait ce qui est utilisé sur les systèmes Full Blown. udisks est un démon qui udev utilisations pour être informé des nouveaux périphériques de stockage qui apparaissent dans le système, il obtient quelques informations supplémentaires à leur sujet, puis envoyer un message sur D-Bus. Il permet fournit des services D-Bus pour manipuler les périphériques de stockage.

J'espère que cela vous donne un aperçu des solutions possibles.

Vous pouvez écouter la prise NetLink uevent - vous obtiendrez les mêmes événements que udevd

voir http://lwn.net/Articles/242046/

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top