كيف يتم إعلامك عند اكتشاف محرك أقراص ثابتة في Linux

StackOverflow https://stackoverflow.com/questions/7334807

سؤال

لدينا إصدار Linux مدمج يبدأ بمحرك أقراص ثابتة في وضع السكون (الأجهزة).يبدأ البرنامج بعد ذلك ويتيح الطاقة لمحرك الأقراص.يكتشف Linux محرك الأقراص بشكل جيد:

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

لسوء الحظ، يحاول البرنامج الوصول إلى محرك الأقراص قبل حدوث اكتشاف SCSI أعلاه.يمكننا إضافة نوم ولكن هذه ليست آلية موثوقة حيث لاحظنا أن الوقت المستغرق للكشف غير حتمي.

هل هناك أي طريقة للحصول على kernel/hotplug/etc.نظام للإبلاغ عند اكتشاف القرص الصلب؟

شكرًا.

هل كانت مفيدة؟

المحلول

أعتقد أن الإجابة موجودة في مكان ما في udev مدير الجهاز ( صفحة wikipedia ).يمكن استخدامه بالكامل في بيئة مضمنة.

يسمح لك بكتابة القواعد التي يمكنها تشغيل البرامج النصية / البرامج عند اكتشاف بعض الأجهزة.

يمكن لشيء كهذا أن يفعل الأشياء: Genacodicetagpre

إذا كان لديك نواة قديمة ، فقد يتم تنشيط نظام hotplug .

الفرصة الأخيرة هي أداة inotify التي تتيح لك مراقبة أي شيء في ملفكsystem (even / dev directory :)).

نصائح أخرى

لديك مجموعة من الخيارات للقيام بذلك، من الأبسط إلى الأكثر تعقيدًا:

  • الاقتراع اليدوي.ما عليك سوى كتابة برنامج نصي shell يقوم بالاستقصاء حتى يصبح القرص الثابت متاحًا قبل استخدامه فعليًا.من المؤكد أن هذا ليس الحل الأفضل، لكنه فعال وبسيط.
  • mdev.إذا كان نظام Linux المضمن لديك يعتمد على Busybox (وهو ما آمل أن يكون كذلك!)، فإن Busybox يدمج mdev برنامج.استخدامه بسيط للغاية وتم توثيقه في http://git.buildroot.net/busybox/tree/docs/mdev.txt. mdev سيسمح لك بسهولة بتشغيل برنامج نصي shell عند اكتشاف الجهاز.إذا كان لديك Busybox بالفعل في نظام Linux المضمن لديك، فهذا هو الحل الذي أوصي به بالتأكيد.
  • udev, ، كما اقترح آخرون.هذا هو الحل المستخدم في أنظمة سطح المكتب/الخادم الكاملة.لديها تبعيات أكثر من mdev وهو أصعب قليلاً في الإعداد.إذا كان لديك فقط حل لمشكلة الكشف عن القرص الصلب، فسأقول ذلك باستخدام udev هو مبالغة بعض الشيء، ولكن إذا كنت تنوي استخدامه لأغراض أخرى، لماذا لا.
  • udev + udiks + com.dbus, هذا هو في الواقع ما يتم استخدامه في الأنظمة الكاملة. udisks هو الشيطان الذي يستخدم udev ليتم إعلامك بأجهزة التخزين الجديدة التي تظهر في النظام، فإنه يحصل على بعض المعلومات الإضافية عنها ثم يرسل رسالة عبر D-Bus.يسمح بتوفير خدمات D-Bus للتعامل مع أجهزة التخزين.

آمل أن يمنحك هذا نظرة عامة على الحلول الممكنة.

يمكنك الاستماع إلى مقبس netlink uevent - ستحصل على نفس الأحداث مثل udevd

راجع http://lwn.net/Articles/242046/

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top