Hoi,
wie in einem anderen Beitrag geschrieben, arbeite ich gerade an einer
Umsetzung des DMX-Protokolls über USART. Ich arbeite derzeit noch mit
dem BUildroot 2.3.0 von Atmel.
Es ist zwar veraltet aber produziert auch nicht ständig irgentwelche
Fehler beim Compilieren.
Ich versuchte mit
1
stty -F /dev/ttyS2 speed 250000
die Baudrate auf 250000 kbit/s einzustellen. Diese nimmt er nicht an.
Wie ich mittlerweile herausgefunden habe fehlt der passende Eintrag in
der Termios.h.
Ich werde also einen Kernelpatch mit "quilt" bauen müssen. Ich kenne
zwar die Befehle die ich dazu brauche, aber wie genau der Eintrag der
termios.h aussehen soll und wie sich das mit den Verzeichnissen verhält
ist mir leider noch unklar.
1
#ifdef __USE_MISC
2
# define CBAUDEX 0010000
3
#endif
4
#define BOTHER 0010000
5
#define B57600 0010001
6
#define B115200 0010002
7
#define B230400 0010003
8
#define B460800 0010004
9
#define B500000 0010005
10
#define B576000 0010006
11
#define B921600 0010007
12
#define B1000000 0010010
13
#define B1152000 0010011
14
#define B1500000 0010012
15
#define B2000000 0010013
16
#define B2500000 0010014
17
#define B3000000 0010015
18
#define B3500000 0010016
19
#define B4000000 0010017
Also wie das aussieht muss ich in diesem Bereich B250000 einfügen. Nur
ob ich den beliebig platzieren ist die Frage?
Des weitern, wo muss ich den Patch erstellen und wo muss er hin habe ich
irgendwie nicht verstanden.
Philipp H. schrieb:
> die Baudrate auf 250000 *kbit/s*
? du meinst bit/s.
Philipp H. schrieb:
> Ich werde also einen Kernelpatch mit "quilt" bauen müssen.
sorry, was ist "quilt"?
Philipp H. schrieb:
> Nur>> ob ich den beliebig platzieren ist die Frage?
Ersetz doch einfach einen Wert, den du nicht brauchst durch dein
B250000.
Zu USART nach RS485 war hier noch ein Beitrag:
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=89720
JO 250 kbit/s sollte das heißen, ist richtig :-)
Ersetzten, ok wenn das geht.
Das Problem was für mich dann dennoch weiterhin besteht ist, wie bekomme
ich das Ganze in den Kernel.
Wie patche ich das mit "quilt" ?
Bin noch nicht ganz so dahinter, wo ich das Patchverzeichnis btw den
fertigen Patch hinkopiere.
Den Patch zu erstellen ansich ist ja nicht schwer.
Erstens: der Kernel hat kein integriertes Patchsystem, auch kein quilt.
Wenn dann musst du dir selbst etwas zum Kompilieren eines gepatchten
Kernels bauen, oder einfach Patch anwenden und kompilieren.
Zweitens: du müsstest nicht nur den Kernel, sondern auch die Libc
ändern.
Drittens: das ganze ist garnicht nötig. Unter Linux kannst du beliebige
Baudraten setzen, sofern die jeweilige Hardware und deren Treiber das
kann. Beispielcode:
Das der Kernel kein eigenes Patchsystem hat, ist mir bewust.
"stty" kann nur die Baudraten nutzen, die in der Termios.h eingetragen
sind.
Die Baudrate die ich nutzen möchte, ist aber nicht eingetragen.
Was ich mit dem Patch meinte ist, wenn ich die Termios.h verändere, muss
ich die Änderungen ja irgentwie in den Kernel bekommen. Ich verstehe
halt nicht, wie ich das bewerkstelligen soll?
Mit quilt erstellt man einen Patch für den Kernel. Nur wohin ich den
fertigen patch packen muss, ist mir halt nicht klar. Alternativ könnte
ich die termios.h verändern, das uImage löschen und den Kernel koplett
neubauen. Nur dann ist "quilt" volkommen überflüssig. Und genau da weis
ich auch nicht ganz weiter.
Bei deinem Code muss ich passen weil mir dazu derzeit die Befehle
fehlen, zumindst habe ich noch keine quelle für die Befehle gefunden,
btw sie dann irgentwie übersehen.
Philipp H. schrieb:
> Alternativ könnte> ich die termios.h verändern, das uImage löschen und den Kernel koplett> neubauen.
Genau so.
Ob es allerdings reicht nur die .h zu ändern?
Von der Seite ausgesehen könntest du recht haben, da die Baudrate ja
über eine Formel errechnet. Ist nur die Frage wo ich noch eine Änderung
ansetzten muss. Aus einem Beitrag von avrfreaks, geht hervor, dass ein
Fehlerhafter Eintrag in termois.h verhindert hatte das baudrates >=
30200 gehen.
Daraus hatte ich geschlossen das Dieses so gehen müsste. Nur wo du das
jetzt sagst, bissel zweifeln tu ich da dann auch.
Philipp H. schrieb:
>> "stty" kann nur die Baudraten nutzen, die in der Termios.h eingetragen> sind.
Dann benutz halt kein stty. Du musst doch eh ein Programm schreiben, das
das DMX-Protokoll implementiert, dann kannst du auch gleich die
Schnittstelle dort initialisieren, anstatt das über stty zu machen.
Ist sowieso zuverlässiger.
Deine Änderung in der termios.h zieht einen Rattenschwanz an Problemen
nach sich, die man sich mit ein paar einfachen Zeilen C im Userspace
komplett ersparen kann.
Andreas
Ja da hast du wohl Recht, Fehleranzahl könnte stark steigen etc.
Wie ich gerade sehe werden die Befehle wohl in der Serial.h stehen. Habe
die ausch schon mal angeschaut, nur das war die für das UC3 Framework,
wusste nicht ob ich die für Linux verwenden kann. Habe da wohl was
überlesen. Nur a finde ich die verwendeten Befehle von dir auch nicht.
Bin in der ganzen Sache leider noch nicht soweit drin das ich das ganze
so angehen könnte.
Eine eigene Frage?
Dieser Thread ist über 16 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.