MTD Erase Blockgröße von Null für SRAM

8

Raffinierte Frage

Wie liest und schreibt man Textinformationen von einem MTD SRAM-Gerät mit der Löschblockgröße Null?

Anmerkungen:

  1. Ich verwende den 23K256 Treiber
  2. Versuche, MTD-Util-Tools zu verwenden, sind fehlgeschlagen, weil libmtd nicht mit einer Löschblockgröße von null umgehen kann
  3. Versuche, eine Löschblockgröße künstlich hinzuzufügen, sind ebenfalls fehlgeschlagen (siehe unten)
  4. Versuche, echo > und cat für mtdblock zu verwenden, haben nur Müll erzeugt

Original Ich versuche, einen SRAM-Chip zu lesen und zu schreiben, der mit einem ARM-Prozessor verbunden ist, auf dem Linux läuft. Es ist mir egal, ob ich mit dem SRAM wie eine Datei, ein serielles Gerät oder eine Speicherpartition interagiert. Der vorhandene Gerätetreiber für den SRAM-Chip registriert das Gerät als MTD. Ich habe dies überprüft, indem ich /proc/mtd :

überprüft habe %Vor%

Ich habe ein Tutorial gefunden, um die MTD mit MTD Utils zu formatieren. Das Problem, das ich erfahre, ist, dass ich nicht mit dem SRAM / MTD-Gerät interagieren kann, weil alle MTD / UBI / JFF2-Tools im User-Space abstürzen, wenn ich dieses Gerät anschaue, IE:

%Vor%

Diese Ausnahme tritt auf, weil alle MTD-Dienstprogramme libmtd verwenden. Die mtd_get_dev_info1 Funktion in libmtd wird durch die Löschblockgröße geteilt und in meinem Fall ist die Löschblockgröße gleich Null.

%Vor%

Obwohl dieser Chip einen MTD-Treiber hat, glaube ich nicht, dass Schreibzyklen eine Rolle spielen, und deshalb ist der Löschblock Null. also meine Fragen sind die folgenden:

  1. Sollte ich den Treiber ändern, um dem Chip eine Löschblockgröße zu geben, damit die Dienstprogramme korrekt funktionieren? Wenn ja welche Größe?
  2. Soll ich libmtd ändern, um die Nulllöschblockgröße zu ignorieren? Wenn ja, wofür sollte ich eb_cnt setzen?
  3. Gibt es eine bessere Möglichkeit, Daten auf dem MTD-Gerät zu lesen und zu schreiben?

Zusätzliche Anmerkungen:

  1. Stabilität ist wichtiger als optimale Leistung in meiner Situation
  2. Ich habe versucht, ein echo test > /dev/mtdblock0 und cat /dev/mtdblock0 zu machen und habe nichts als Müll
  3. bekommen

Update 10/20 Die Löschblockgröße wurde im Treiber auf 1 geändert (ich wollte sie auf 4000 ändern, aber ich war mir nicht sicher über die Einheiten). MTD Utils löst die zuvor angegebene Ausnahme nicht mehr aus.

%Vor%

Allerdings schlägt Ubiformat fehl:

%Vor%

Update # 2 10/20 Leider führt das Setzen der Löschblockgröße auf 4000 (eigentlich 0x4000) dazu, dass der Kernel abstürzt, nachdem er ubiformat ausgeführt hat

%Vor%

Update 10/23 Ich habe versucht, das Laufwerk normal mit fdisk zu formatieren, aber es scheinen Fehler bezüglich des Fehlens von Zylindern zu sein:

%Vor%     
Liam Kelly 18.10.2017, 17:19
quelle

1 Antwort

0

Es gab ein zugrunde liegendes Hardwareproblem, das nach dem Fixieren das Schreiben und Lesen von Daten vom /dev/mtdblock0 -Gerät ermöglichte. Dies wurde überprüft, indem echo TEST > /dev/mtdblock0 zum Schreiben und cat /dev/mtdblock zum Lesen verwendet wurde.

Hier ist eine Zusammenfassung der anderen Fehler, die bei der Untersuchung dieses Problems gefunden wurden.

  1. Wenn der Chip nicht funktioniert, produziert der 23K256-Treiber immer noch die korrekte Ausgabe von einem cat /dev/mtdblock0 -Aufruf. Die Ausgabe wird alle gleich sein, während die tatsächliche nicht initialisierte Chipausgabe zufällig sein wird.
  2. Alle Anwendungen, die libmtd verwenden, einschließlich aller mtd-utils , treten beim Umgang mit MTD-Geräten mit Löschblockgröße Null auf.
  3. Künstliche Einstellung der SRAM-Löschblockgröße auf 0x4000 im Treiber kann dieses Problem beheben. Löschgröße 1 war nicht akzeptabel.
  4. fdisk wird aufgrund der Zylindergröße von 0 fehlerhaft sein (möglicherweise ist es möglich, im Expertenmodus herumzukommen)
Liam Kelly 26.10.2017, 19:17
quelle