2011-09-07 64 views
0

我們有一個嵌入式Linux版本,以睡眠模式(硬件)中的HDD開始。該軟件然後啓動並啓用驅動器的電源。 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檢測發生之前,軟件試圖訪問驅動器。我們可以增加睡眠,但這不是一個可靠的機制,因爲我們已經注意到檢測所花的時間是非確定性的。

有什麼辦法可以獲得內核/ hotplug/etc。系統報告何時檢測到硬盤?

謝謝。

+0

是沒可能開始啓動時再使用hdparm的告訴它旋轉停止在HD啓動腳本? –

+0

不幸的不是。硬件是這樣連接的,它需要在輸出引腳上改變電平。該引腳可能在內核初始化期間可用,所以我需要檢查... – user626201

回答

3

我認爲答案在udev設備管理器(wikipedia page)的某個地方。它在嵌入式環境中完全可用。

它允許您write rules能夠在檢測到某些設備時啓動腳本/程序。

像這樣的事情可以做的東西:

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

如果你有一箇舊的內核,你可能有激活hotplug系統。

最後的機會是inotify工具,可以監視文件系統中的任何內容(甚至是/ dev目錄:))。

+0

不幸的是,我們的系統沒有運行udev,否則這將是很好的。它似乎支持內核熱插拔,雖然我沒有看到'mdev -s'從任何地方開始 – user626201

+0

@ user626201:舊內核?也許你內核正在使用hotplug守護進程? –

+0

是的,基於2.6.18的內核 – user626201

2

你有一組選項要做到這一點,從最簡單到最複雜的:

  • 手冊輪詢。只需編寫一個shell腳本,在實際使用之前輪詢直到硬盤變得可用。當然,這不是最好的解決方案,但它的工作原理很簡單。
  • mdev。如果您的嵌入式Linux系統是基於Busybox的(我希望它是!),那麼Busybox集成了mdev程序。它的使用非常簡單,記錄在http://git.buildroot.net/busybox/tree/docs/mdev.txt。當設備被檢測到時,mdev將非常容易地允許您運行shell腳本。如果您的嵌入式Linux系統中已經有Busybox,那絕對是我推薦的解決方案。正如其他人所建議的那樣,可以使用以下各項:
  • udev。這是在全面的桌面/服務器系統中使用的解決方案。它比mdev更依賴,並且安裝起來有點困難。如果你只有硬盤檢測問題需要解決,我會說使用udev有點矯枉過正,但如果你打算將它用於其他目的,爲什麼不。
  • 的udev + udisks + DBUS,這實際上就是上完全成熟的系統中使用。 udisks是一個守護進程,它使用udev來通知系統中出現的新存儲設備,它會獲得關於它們的一些額外信息,然後通過D-Bus發送消息。它允許提供D-Bus服務來操縱存儲設備。

我希望這給你一個可能的解決方案的概述。

+0

謝謝 - 我們已經使用手動輪詢。不支持mdev和udev :(不幸的是,客戶需要這個特定的芯片,而且我們受限於工具支持,因爲芯片已經過時了。 – user626201