Hallo,
ich hoff, das ist das richtige Forum.
Erstmal zur Vorgeschichte:
Wir (die Firma in der ich Arbeite) stellen kleine, tragbare Geräte her,
an denen jeweils 2 Sensoren (Bewegungssensoren, ist nochmal eine eigene
Platine) an einem RS485 Bus hängen.
In den Geräten verwenden wir das LILLY-912 Modul von Incostartec, auf
dem ein Linux-Kernel in der Version 2.6.20.4 läuft. Auf dem Modul
befindet sich ein Cirrus Logic EP9312 AMR9 Prozessor und die
dazugehörigen Kernel-Dateien wurden mit einem Patch von Cirrus Logic
hinzugefügt.
Da beim Messvorgang eine ziemlich große Datenmenge entsteht, speichern
wir diese in einer Textdatei zwischen und übertragen diese nach der
MEssung auf einen USB-Stick.
Das funktioniert auch alles soweit super.
Nun wollen wir diese Daten auf einer Compact-Flash Karte Speichern, um
mehr als nur eine Messung zu ermöglichen. Aus Performancegründen würden
wir die Karte gern im UDMA bzw. MDMA Modus laufen lassen, weil da der
Datendurchsatz höher ist. Sonst haben wir das Problem, das der
schweibvorgang zu langsam ist und nicht alle Messwerte geschrieben
werden, was wiederum zu Fehlern führt.
In der Kernelkonfiguration habe ich alle dafür notwendigen Optionen
ausgewählt. Ich kann die Karte auch Mounten und drauf schreiben, jedoch
nicht in den DMA Modus wechseln.
Ich habe mit dem Programm "hdparm" versucht, in den DMA Modus zu
wechseln, jedoch scheitert der Versuch mit einer Fehlermeldung:
1 | / # hdparm -d1 /dev/hda
|
2 |
|
3 | /dev/hda:
|
4 | setting[ 6781.600000] device only supports MDMA ? (we're hosed)
|
5 | using_dma to 1 (on)
|
6 | hdparm: HDIO_SET_DMA: Input/output error
|
7 | using_dma = 0 (off)
|
WEnn ich den Parameter -i verwende, erhalte ich folgende Infos:
1 | / # hdparm -i /dev/hda
|
2 |
|
3 | /dev/hda:
|
4 |
|
5 | Model=SMI MODEL, FwRev=20071116, SerialNo=SMI 00007093
|
6 | Config={ HardSect NotMFM Fixed DTR>10Mbs }
|
7 | RawCHS=1966/16/63, TrkSize=0, SectSize=576, ECCbytes=4
|
8 | BuffType=DualPort, BuffSize=1kB, MaxMultSect=1, MultSect=off
|
9 | CurCHS=1966/16/63, CurSects=1981728, LBA=yes, LBAsects=1981728
|
10 | IORDY=no, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
|
11 | PIO modes: pio0 pio1 pio2 pio3 pio4
|
12 | DMA modes: *mdma0 mdma1 mdma2
|
13 | AdvancedPM=no
|
14 |
|
15 | * signifies the current active mode
|
Die Info sagt aus, das der MDMA0 Modus aktiv ist. Verwende ich aber
hdparm ohne argumente, dann erschein folgendes:
1 | / # hdparm /dev/hda
|
2 |
|
3 | /dev/hda:
|
4 | multcount = 0 (off)
|
5 | IO_support = 1 (32-bit)
|
6 | unmaskirq = 0 (off)
|
7 | using_dma = 0 (off)
|
8 | keepsettings = 0 (off)
|
9 | readonly = 0 (off)
|
10 | readahead = 256 (on)
|
11 | geometry = 1966/16/63, sectors = 1981728, start = 0
|
Dieser Teil sagt mir, das DMA nicht verwendet wird (using_dma = 0).
Was mache ich falsch? Kann mir dort jemand Helfen?
Ich bedanke mich schonmal im Vorraus für die Antworten und die
aufgewendete Zeit!!!