PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [HNP] Ram-Test auf PowerPC ohne BS in C


f.reischl
2009-04-20, 11:04:42
Hi,

ich habe (demnächst) folgendes Problem:
Es geht um einen Ram-Test, der in reinem C geschrieben werden soll. Grundlage ist ein PowerPC.
Der Boot Loader startet den Ram-Test. Nun ist es so, dass das Testprogramm
ebenso im RAM liegt, also muss dieser Bereich geschützt werden, darf also
vom Programm nicht getestet werden, sonst würde es sich selbst überschreiben.
Deswegen ist es sinnvoll, zwei Tests durchzuführen und dabei das Programm
an einen anderen, bereits getesteten Bereich zu kopieren.
Das Problem liegt nun darin, wie man den Stack umkopiert, um mögliche
Inkonsistenzen zu vermeiden.
Derzeit wird folgendes gemacht:
1. sicherer Bereich getestet.
2. unsicherer Bereich inklusive Stack in sicheren kopiert (Funktion
CopyRAM). Damit wird dieser unsicher.
3. vormals unsicherer Bereich getestet.
Das Programm ist verschiebbar (reloctable). Allerdings scheinen im Stack
einige Zeiger zu sein, die auf den alten Bereich zeigen...

Wie muss man vorgehen, damit der Stack weiterhin funktioniert, also auf die
neuen Adressen zeigt?

Ich weiß, es ist eine sehr spezifische Frage, deswegen: Kennt ihr evtl. ein gutes Forum für diese Frage?

Der_Donnervogel
2009-04-20, 16:48:44
Also gleich mal vorweg, ich bin auch kein Experte auf dem Gebiet. Deshalb hier mal ein Schuss ins Blaue von mir. Wenn man nicht auf dem Stack sondern im Heap arbeitet, dann weiß man welche Pointer nach dem Verschieben korrigiert werden müssen. Also kann man wenn man weiß wohin das Programm verschoben wurde (wovon ich ausgehe), die ganzen Pointer auf den Heap nach dem Verschieben "manuell" anpassen.

Legolas
2009-04-20, 20:15:32
Hi,

ich habe (demnächst) folgendes Problem:
Es geht um einen Ram-Test, der in reinem C geschrieben werden soll. Grundlage ist ein PowerPC.
Der Boot Loader startet den Ram-Test. Nun ist es so, dass das Testprogramm
ebenso im RAM liegt, also muss dieser Bereich geschützt werden, darf also
vom Programm nicht getestet werden, sonst würde es sich selbst überschreiben.
Deswegen ist es sinnvoll, zwei Tests durchzuführen und dabei das Programm
an einen anderen, bereits getesteten Bereich zu kopieren.
Das Problem liegt nun darin, wie man den Stack umkopiert, um mögliche
Inkonsistenzen zu vermeiden.
Derzeit wird folgendes gemacht:
1. sicherer Bereich getestet.
2. unsicherer Bereich inklusive Stack in sicheren kopiert (Funktion
CopyRAM). Damit wird dieser unsicher.
3. vormals unsicherer Bereich getestet.
Das Programm ist verschiebbar (reloctable). Allerdings scheinen im Stack
einige Zeiger zu sein, die auf den alten Bereich zeigen...

Wie muss man vorgehen, damit der Stack weiterhin funktioniert, also auf die
neuen Adressen zeigt?

Ich weiß, es ist eine sehr spezifische Frage, deswegen: Kennt ihr evtl. ein gutes Forum für diese Frage?

Könnte es sich bei "einige Zeiger" nicht um eventuelle Rücksprungadressen handeln?

Coda
2009-04-20, 21:08:11
Man sollte wohl am besten gar keinen Stack verwenden und nur relative Sprünge. Daten laden würde ich auch nur relativ zu einem Offset.

Wieso schaust du dir nicht den Source von memtest86+ an?

Gast
2009-04-20, 21:48:10
Du sagst ja nicht, wie das System genau aussieht, deshalb sagt meine Glaskugel:
- Ram-Test aus dem Flash ausführen. U.U. langsam, aber geht ;)
- "Zweiten" Test vorziehen, dann unbedingter Sprung zurück in den Bootloader, also quasi ein Soft-Reset. Dieses mal aber mit der endgültigen Stack-Konfiguration. Ungültig machen der Caches nicht vergessen, falls vorhanden.

Gast
2009-04-21, 09:15:02
Wieso schaust du dir nicht den Source von memtest86+ an?

Soweit ich das weis nistet sich Memtest im Speicher der Grafikkarte ein. Da unser System ein VME-Board ist gibt es diese Möglichkeit leider nicht.

Gast
2009-04-21, 09:22:25
Du sagst ja nicht, wie das System genau aussiehtvorhanden.

Es handelt sich um ein PPC basiertes VME board. Wir benutzen einen Bootloader von LynuxWorks (2.0). Dieser wurde von uns etwas modifiziert um zusätzliche Kommandos im Bootmenü zu haben, u.a. ramtest und flashtest. D.h. der RAM-Test wird über das Kommando in der Konsole gestartet. nach dem er fertig ist landet man wieder in der Konsole.


- Ram-Test aus dem Flash ausführen. U.U. langsam, aber geht ;)vorhanden.
Ja, das ist leider viel zu langsam, da wir zeitliche Anforderungen haben, die wir so schon kaum einhalten können.


- "Zweiten" Test vorziehen, dann unbedingter Sprung zurück in den Bootloader, also quasi ein Soft-Reset. Dieses mal aber mit der endgültigen Stack-Konfiguration. Ungültig machen der Caches nicht vergessen, falls vorhanden.

Das wird schwierig, da der RAM-Test ja durch ein Kommando in der Bootmenü Konsole angestoßen wird. Ich hab noch keine Ahnung, wie man das hinbekommen kann.

Gast
2009-04-21, 20:14:08
Es handelt sich um ein PPC basiertes VME board. Wir benutzen einen Bootloader von LynuxWorks (2.0). Dieser wurde von uns etwas modifiziert um zusätzliche Kommandos im Bootmenü zu haben, u.a. ramtest und flashtest. D.h. der RAM-Test wird über das Kommando in der Konsole gestartet. nach dem er fertig ist landet man wieder in der Konsole.

Ja sags doch gleich. Es gibt ja nur einen PPC und auch nur ein VME board mit PPC. :P ;)

Ja, das ist leider viel zu langsam, da wir zeitliche Anforderungen haben, die wir so schon kaum einhalten können.

Hardware falsch ausgewählt, zeitliche Anforderungen "falsch" (wie oft werden Requirements gemacht die halt schön zu haben wären, aber über die Folgen hat sich niemand Gedanken gemacht...) oder sonstige Anforderungen falsch (muss der Speicher unbedingt IMMER am Anfang getestet werden?).
Da würde ich dem Verantwortlichen noch mal auf den Zahn fühlen.

Das wird schwierig, da der RAM-Test ja durch ein Kommando in der Bootmenü Konsole angestoßen wird. Ich hab noch keine Ahnung, wie man das hinbekommen kann.
Err, Du sprichst von strengen zeitlichen Anforderungen, hast aber Zeit den Ramtest von Hand anzustoßen? (Nicht so ernst nehmen, soll ja wahrscheinlich noch anders werden. ;))

Hybrid 1: Ramtest aus dem Flash ausführen, so dass der Bereich in den der Ramtest kommt geprüft wird, dann Code in geprüftes Ram und dann ab dafür. Der Test müsste im Vergleich zum Rest ja klein sein.

Hybrid 2: Falls Cache vorhanden ist, kann der öfter mal als normales SRAM konfiguriert werden und liegt dann irgendwo im Adressraum herum. Test da reinkopiert und ab geht die Luzi.

In jedem fall wirst Du um eine ordentliche Portion PPC Assembler nicht herumkommen. Hast Du die Sourcen zum Bootloader?

Gast
2009-04-22, 07:46:00
Ja sags doch gleich. Es gibt ja nur einen PPC und auch nur ein VME board mit PPC. :P ;)

Das ist meines Erachtens nicht wirklich relevant, da es mir um ein prinzipielles Vorgehen geht. Der Vollständigkeithalber hier etwas mehr Details. Das board ist eine Eigenentwicklung und enthält 5 x PPC 7448 CPUs.


Err, Du sprichst von strengen zeitlichen Anforderungen, hast aber Zeit den Ramtest von Hand anzustoßen?

Das Anstoßen ist ja auch nicht das Problem. Der Test soll innerhalb einer gewissen Zeit abgearbeitet sein. Da zählt jede Minute, da das ganze für die Serienfertigung benötigt wird.


Hybrid 1: Ramtest aus dem Flash ausführen, so dass der Bereich in den der Ramtest kommt geprüft wird, dann Code in geprüftes Ram und dann ab dafür. Der Test müsste im Vergleich zum Rest ja klein sein.

Das wäre nochmal zu überlegen ob das in das Gesamtkonzept passt.


Hybrid 2: Falls Cache vorhanden ist, kann der öfter mal als normales SRAM konfiguriert werden und liegt dann irgendwo im Adressraum herum. Test da reinkopiert und ab geht die Luzi.

Nette Idee, da muss ich mit unseren Hardware-Leuten reden ob das geht.


Hast Du die Sourcen zum Bootloader?

Ja, ich hatte ja gesagt, dass wir diesen modifizieren.

Coda
2009-04-22, 12:49:57
Soweit ich das weis nistet sich Memtest im Speicher der Grafikkarte ein.
Das halt ich für ein Gerücht.

Gast
2009-04-22, 20:01:37
Das ist meines Erachtens nicht wirklich relevant, da es mir um ein prinzipielles Vorgehen geht. Der Vollständigkeithalber hier etwas mehr Details. Das board ist eine Eigenentwicklung und enthält 5 x PPC 7448 CPUs.


Das Anstoßen ist ja auch nicht das Problem. Der Test soll innerhalb einer gewissen Zeit abgearbeitet sein. Da zählt jede Minute, da das ganze für die Serienfertigung benötigt wird.


Das wäre nochmal zu überlegen ob das in das Gesamtkonzept passt.


Nette Idee, da muss ich mit unseren Hardware-Leuten reden ob das geht.


Ja, ich hatte ja gesagt, dass wir diesen modifizieren.

So langsam kommen ja die relevanten Infos. Ob das bei einem so großen PPC noch geht, den Cache als SRAM zu konfigurieren, weiß ich aus dem Stehgreif auch nicht. Blackfins oder TMS320er erlauben das aber in aller Regel.

Wenn es um den Fertigungstest geht ists natürlich wieder was anderes. Ich dachte, das soll eine Art POST werden...
Noch ne Idee: Ramtest per JTAG in den RAM und dann laufen lassen, das kann man ja an verschiedenen Stellen wiederholen.

(Du arbeitest nicht zufällig in München bei einer Firma, in deren Namen S&R vorkommt?)

Gast
2009-04-24, 11:34:50
Noch ne Idee: Ramtest per JTAG in den RAM und dann laufen lassen, das kann man ja an verschiedenen Stellen wiederholen.

Das geht leider auch nicht, da das ganze im Rahmen von automatisch ablaufenden Tests passieren soll. Wir entwicklen eigens ein Testsystem dafür.


(Du arbeitest nicht zufällig in München bei einer Firma, in deren Namen S&R vorkommt?)
Ne brainchild.