Ich schreibe einen Linux-Kernel-Treiber für einen Watchdog mit den internen Registern der CPU und eine dedizierte Stelle in (persistent) RAM für die Speicherung von Debug-Informationen im Falle eines Watchdog-ausgelöstes Reset.Wie können Ressourcen von zwei Geräten in einem Linux-Kernel-Treiber mithilfe der Gerätebaumstruktur abgebildet werden?
In der alten Welt hatte ich zwei Ressourcen vom Typ IORESOURCE_MEM
in meiner Board-Datei: die internen Register (Basisadresse der internen Regs plus Offset) und die Position im RAM (absolute Speicheradresse).
Ich könnte diese über platform_get_resource()
mit dem entsprechenden Index zugreifen, und dann könnte ich neu zuordnen.
In der neuen Welt mit einem Gerätebaum befindet sich mein Knoten für den Watchdog im Bereich der internen CPU-Register und ich kann ohne Probleme auf sie zugreifen.
Aber wie kann ich meinen Speicherplatz im RAM hinzufügen? Die Basisadresse des RAM unterscheidet sich von den CPU-internen Registern, so dass ich nicht einfach einen anderen Bereich zum "reg" -Eintrag hinzufügen kann (wie reg = <0x20300 0x408>, <0x3BFFE000 0x1000>;
). Muss ich vielleicht ein neues "Gerät" hinzufügen?
PRAM {
#address-cells = <1>;
#size-cells = <1>;
PRAM0: Watchdog_Crash_Debug_Context {
reg = <0x3BFFE000 0x1000>;
};
};
Aber wie referenziere ich es im Watchdog-Gerätetreiber? Oder im Watchdog-Gerätebaumeintrag?
Linux-Version ist 4.1.18.
Hardware von Software Watchdog? – jgr208
Hardware-Wachhund (auf Marvell Armada XP) –