mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Kernelpatch NGW100 LInux


Autor: Philipp H. (ennox)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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
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.
#ifdef __USE_MISC
# define CBAUDEX 0010000
#endif
#define  BOTHER   0010000
#define  B57600   0010001
#define  B115200  0010002
#define  B230400  0010003
#define  B460800  0010004
#define  B500000  0010005
#define  B576000  0010006
#define  B921600  0010007
#define  B1000000 0010010
#define  B1152000 0010011
#define  B1500000 0010012
#define  B2000000 0010013
#define  B2500000 0010014
#define  B3000000 0010015
#define  B3500000 0010016
#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.

Autor: ... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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&f...

Autor: Philipp H. (ennox)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Andreas Ferber (aferber)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:
#include <linux/serial.h>
...
struct serial_struct ser_info; 
ioctl(ser_dev, TIOCGSERIAL, &ser_info); 
ser_info.flags = ASYNC_SPD_CUST | ASYNC_LOW_LATENCY; 
ser_info.custom_divisor = ser_info.baud_base / CUST_BAUD_RATE; 
ioctl(ser_dev, TIOCSSERIAL, &ser_info);
...

Andreas

Autor: Philipp H. (ennox)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: ... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Philipp H. (ennox)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Andreas Ferber (aferber)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Philipp H. (ennox)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Philipp H. (ennox)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
HM ok ich werde wohl nicht um die Gestaltung aus dem Userspace drum 
herum kommen.

Autor: ... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.