ELDK 4.0
mit Linux 2.6
eingesetzt werden. Ein passendes BSP
für die CPU87
ist noch zu besorgen.
RENOTIFY
erfinden, die alle Geräte (-objekte) noch mal beim Nameservice bekannt gibt. Ist - in seltenen Fällen - eventuell nötig, wenn dieser Rebootet wurde und sich vorher nicht alles merken konnte.
cancel()
Problematik besteht weiterhin! Im Moment hat der Aufruf keine Funktion.
cancel()
aufgerufen wurde, soll nochmal das Callback des Clients über die Methode exit()
mit entsprechender ODA-Message aufgerufen werden. Sieht eigentlich so aus, als wollte man das für die requestXxx()
-Methoden nicht implementieren.
AccDevice::cancel()
ist nicht komplett implementiert. Es steht noch die Frage, wie man überhaupt einen "pendig request", der ja irgendwo im Zustand "blocked" hängt, beenden kann. Eigentlich geht doch nur, ein Flag zu setzen (exit = true), so dass beim späterne Weiterlaufen des Threads keine Antwort mehr an den Client geht. Stattdessen ist womöglich ein Eintrag ins Log sinnvoll.
Man sollte mal überlegen, ob das Eine oder Andere bisher fest Verdrahtete, wie z.B. /opt/acc/cpu, nicht besser über Umgebungsvariablen realisiert werden sollte.
USRVERS
bekommen, damit das Nodalprogramm vme_software
funktioniert.
usrSet()->findUsr(...)
auch usrs().findUsr(...)
schreiben. Aber dann bekommt man beim Zugriff auf eine USR eine "Property not found"-Exception zurück. Warum? Schreibt man const Usr* usr = usrSet()->findUsr(...)
, also mit const
und ohne Typecast, dann meckert der Compiler die folgende Zeile AccDevRetStatus ret = usr->write(...)
an, weil damit das const
discarded würde. Warum? Weil doch eigentlich Usr* const usr = usrSet()->findUsr(...)
gemeint ist, oder?
Mal versuchen ein Supergerät zu bauen, das zwei "normale" Geräte beinhaltet.
#include <platforms/cpu86.h>
steckt in der Datei /lib/modules/2.4.25/build/include/asm/mpc8260.h
, die womöglich von Denx kommt, oder? Dieses Include wird jedenfalls auf /lib/modules/2.4.25/build/include/platforms/
erwartet (so ist's zumindest auf belx05), liegt aber auf /lib/modules/2.4.25/build/arch/ppc/platforms/
. Da es das Directory .../include/platforms/
gar nicht gab, habe ich es erzeugt und (bisher nur) die *.h-Files von .../arch/ppc/platforms/
dort hin kopiert. Nun tut's. Wenn ich mich recht erinnere, dann hatten wir das gleiche Problem auch auf den belxxx-PPC-Rechnern, als sie NFS-mäßig noch alle von belx01 bedient wurden. Und wir haben es wohl auch genau so gelöst.
Die Frage ist, was ist der Standard? Ist Denx nicht dem Standard angepasst? Oder haben wir das Cross-Entwicklungssystem nicht standard-mäßig generiert? Oder wo klemmt's sonst? Ein Kopieren der Dateien ist jedenfalls auf Dauer wohl nicht der richtige Ansatz. Da muss man noch mal denken oder mit dem Herrn Denk reden.
Peter fragt, ob eventuell ein passender Link helfen könnte, der ".../include/platforms" heisst und nach "...arch/ppc/platforms" zeigt? Damit würde man verlinken statt kopieren.
kg1cg77.acc.gsi.de
. #define ACT_DEV_IMPL GmDevicein den gm-usrs.cc, die für die
add-default-usrs.cc
usw. gebraucht werden? So isses nicht schön.
lifeCtrlThread
in equinfo.cc
erledigt (die Daten werden aus localtime()
gewonnen). Das muss längerfristig wohl noch anders gemacht werden.
ja
, sonst s.nächster Punkt)
lifCtrlThread
) macht für jedes device ein chekSupStatus()
. Möglicherweise muss man aber zwischen checkSupStatus()
und updateSupStatus()
unterscheiden, wenn es sich um Geräte handelt, die nicht auf einer SE angeklemmt sind. updateSupStatus()
meldet nur den aktuellen Zustand während checkSupStatus()
ihn auch wirklich überprüfen müsste (was bei SE-Geräten auf der SE passiert). updateSupStatus()
könnte bei VmeDevices
überprüfen, ob alle Geräte der SE auch in der Datenbank eingetragen sind und gefundene Leichen entsorgen. (s.o.)
Es sollte ein Verfahren implementiert werden, um die Verkopplungen der Geräte zu behandlen. Im einfachsten Fall kann dazu in einer Tabelle verzeichnet werden, welche Geräte zu einer Gruppe gehören, und die Geräte können sich aus dieser Tabelle die Nomenklaturen der beteiligten Geräte holen und über die Nomenklaturen z.B. die Gerätedaten abgleichen.
Ein konsequenterer Ansatz wäre, in Fällen wie der Integratorgitter die Gitterelektronik als eigene Geräte-Ebene einzuführen. die SE würde nur das Gerät "Gitterelektronik" behandeln. Die eigentlichen Profilgitter-Geräte existieren dann nur auf dem GµP und setzen auf dem Gerät "Gitterelektronik" auf, d.h. alle Zugriffe auf die Hardware laufen immer und nur über das Gerät "Gitterlektronik".