Frage

Wir haben einen eingebetteten Linux-Build, der mit einer Festplatte im Ruhemodus (Hardware) beginnt.Die Software startet dann und aktiviert die Stromversorgung des Laufwerks.Linux erkennt das Laufwerk in Ordnung:

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

Leider versucht die Software, auf das Laufwerk zuzugreifen, bevor die oben genannte SCSI-Erkennung erfolgt.Wir könnten einen Schlaf hinzufügen, aber dies ist kein zuverlässiger Mechanismus, da wir festgestellt haben, dass die zum Erkennen benötigte Zeit nicht deterministisch ist.

Gibt es eine Möglichkeit, den Kernel / Hotplug / etc.System, das meldet, wenn die Festplatte erkannt wird?

Danke.

War es hilfreich?

Lösung

Ich denke, die Antwort befindet sich irgendwo im udev Geräte-Manager ( Wikipedia-Seite ).Es kann in einer eingebetteten Umgebung vollständig verwendet werden.

Hiermit können Sie Regeln schreiben , mit denen Skripte / Programme gestartet werden können, wenn einige Geräte erkannt werden.

So etwas könnte das Zeug machen:

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

Wenn Sie einen alten Kernel haben, ist möglicherweise das Hotplug -System aktiviert.

Die letzte Chance ist das inotify -Tool, mit dem Sie alles in Ihrer Datei überwachen könnenSystem (gerade / dev Verzeichnis :)).

Andere Tipps

Sie haben eine Reihe von Optionen, von der einfachsten bis zur kompliziertesten:

  • Manuelle Abfrage . Schreiben Sie einfach ein Shell-Skript, das abfragt, bis die Festplatte verfügbar ist, bevor Sie sie tatsächlich verwenden. Zugegeben, dies ist nicht die schönste Lösung, aber es funktioniert und ist einfach.
  • mdev . Wenn Ihr eingebettetes Linux-System auf Busybox basiert (was ich hoffe!), Integriert Busybox das Programm mdev. Die Verwendung ist sehr einfach und wird unter http://git.buildroot.net/ dokumentiert. Busybox / Tree / Docs / mdev.txt . Mit mdev können Sie sehr einfach ein Shell-Skript ausführen, wenn ein Gerät erkannt wird. Wenn Sie bereits Busybox in Ihrem eingebetteten Linux-System haben, ist dies definitiv die Lösung, die ich empfehlen würde.
  • udev , wie von anderen vorgeschlagen. Dies ist die Lösung, die in vollwertigen Desktop- / Serversystemen verwendet wird. Es hat mehr Abhängigkeiten als mdev und ist etwas schwieriger einzurichten. Wenn Sie nur Ihr Problem mit der Festplattenerkennung lösen müssen, würde ich sagen, dass die Verwendung von udev etwas übertrieben ist. Wenn Sie es jedoch für andere Zwecke verwenden möchten, warum nicht.
  • udev + udisks + dbus , dies wird tatsächlich auf vollwertigen Systemen verwendet. udisks ist ein Daemon, der udev verwendet, um über neue Speichergeräte im System benachrichtigt zu werden. Er erhält einige zusätzliche Informationen dazu und sendet dann eine Nachricht über D-Bus. Es ermöglicht D-Bus-Diensten, die Speichergeräte zu manipulieren.

    Ich hoffe, dies gibt Ihnen einen Überblick über die möglichen Lösungen.

Sie können den uevent-Netlink-Socket abhören - Sie erhalten dieselben Ereignisse wie udevd

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top