uCLinux auf STM32F429Discovery Board

Gast #4660798
Lesenswert?

Hallo,
ich habe nach der folgenden Anleitung 
(http://www.mikrocontroller.net/articles/Linux_auf_STM32) das uCLinux 
auf einem STM32F429 Discovery Board zum laufen gebracht. Das System 
bootet, wie in dem Artikel zu sehen und ich habe einen USB-UART Adapter 
angeschlossen. Nun stehe ich vor dem Problem, dass ich dem System keine 
Befehle übergeben kann. Ich kann über minicom zwar Eingaben machen, 
jedoch passiert nichts wenn ich die Eingabetaste drücke.

Ich hoffe jemand kann mir sagen was ich falsch mache...

Gruß
Gast #4666936
Lesenswert?

Ich bekomme einen Login Prompt. Der Bootvorgang läuft genauso weit wie 
in dem Artikel abgebildet. Also:

"Jan  1 00:00:01 login[29]: root login on 'ttyS2'
~ #"


Ich würde das ganze gerne mit der etc/initab untersuchen, jedoch scheint 
es diese Datei nicht mehr zu geben.
(Firma: matzetronics) #4666946
Lesenswert?

Thrillhouse schrieb:
> "Jan  1 00:00:01 login[29]: root login on 'ttyS2'
> ~ #"

Im Artikel wird ttyS0 gezeigt, und m.E. sollte das auch der primäre 
login sein.
Das wird auch ein paar Zeilen dadrüber angeschaltet:
>starting pid 29, tty '/dev/ttyS0': '/bin/login -f root'
An der Stelle, wo der Prozess gestartet wird, sollte eigentlich auch die 
Baudrate und das device stehen. Mögl. ist das die /etc/init/rc oder die 
/etc/init/rc.local

> Ich würde das ganze gerne mit der etc/initab untersuchen, jedoch scheint
> es diese Datei nicht mehr zu geben.
Hmm, sollte es bei Kernel 2.6 eigentlich geben. Das Dings heisst inittab 
mit Doppel-T.
'init' ist normalerweise die Mutter aller Prozesse und startet login.
Schau das mal durch:
http://www.alterawiki.com/wiki/How_to_set_up_a_login_prompt_with_uClinux
Gast #4667027
Lesenswert?

Matthias S. schrieb:
> Im Artikel wird ttyS0 gezeigt, und m.E. sollte das auch der primäre
> login sein.
> Das wird auch ein paar Zeilen dadrüber angeschaltet:
>>starting pid 29, tty '/dev/ttyS0': '/bin/login -f root'

Das müsste daran liegen, dass ich USART3 benutze. Wenn ich RX und TX des 
USB-UART Adapters mit PA9 und PA10 des STM verbinde startet der 
Bootvorgang nicht.

Einen Login Prompt, wie in dem verlinkten Tutorial beschrieben kann ich 
leider nicht erstellen, da ich ja keine Möglichkeit habe in dem µCLinux 
Dateisystem zu navigieren bzw irgendwelche Befehle zu übergeben.

Gruß
(Firma: matzetronics) #4667096
Lesenswert?

Thrillhouse schrieb:
> Einen Login Prompt, wie in dem verlinkten Tutorial beschrieben kann ich
> leider nicht erstellen, da ich ja keine Möglichkeit habe in dem µCLinux
> Dateisystem zu navigieren bzw irgendwelche Befehle zu übergeben.

Das hast du aber, bevor du das Image auf dem STM schreibst.
Da steht übrigens auch noch:
"Um die serielle Konsolo zu verwenden benötigt man z.B. noch einen 
RS232(TTL)/USB Wandler. Dieser wird mit 3 Pins an PA9, PA10 und GND für 
die Verwendung des USART1 angeschlossen. Ändert man noch in 3 Dateien 
den seriellen Port von USART3 auf USART1 erhält man nach dem Start 
(bootet unter 1s) folgendes Bootlog:"

Also muss man da noch in 3 Dateien rumfummeln. USART3 ist auf dem 
DiscoF429 Board nicht frei verfügbar, mindestens ein Pin geht immer an 
irgendwelche andere Peripherie:
http://mikrocontroller.bplaced.net/wordpress/wp-content/uploads/2015/10/Pinbelegung_f429_v101.html
Gast #4667139
Lesenswert?

Matthias S. schrieb:
> Also muss man da noch in 3 Dateien rumfummeln. USART3 ist auf dem
> DiscoF429 Board nicht frei verfügbar, mindestens ein Pin geht immer an
> irgendwelche andere Peripherie:
> 
http://mikrocontroller.bplaced.net/wordpress/wp-content/uploads/2015/10/Pinbelegung_f429_v101.html

Danke, ich versuche nun mal herauszufinden um welche drei Dateien es 
sich dabei handelt.
Gast #4667815
Lesenswert?

(1) stm32f429-linux-builder/configs/kernel_config'

...

#
# STM32 I/O interfaces
#
CONFIG_STM32_DMA=y
CONFIG_STM32_USART1=y
# CONFIG_STM32_USART2 is not set
# CONFIG_STM32_USART3 is not set
# CONFIG_STM32_USART4 is not set
# CONFIG_STM32_USART5 is not set
# CONFIG_STM32_USART6 is not set
# CONFIG_STM32_I2C1 is not set
# CONFIG_STM32_I2C2 is not set
CONFIG_STM32_I2C3=y

...

(2) stm32f429-linux-builder/rootfs/etc/inittab

# inittab for uClinux
# Format:
# id:runlevels:action:process

# /etc/start must be executable script
null::sysinit:/etc/start

ttyS0::respawn:/bin/login -f root

null::wait:/bin/cat /proc/cpuinfo > /dev/tty1



(3) 
stm32f429-linux-builder/uclinux/arch/arm/configs/stm32f429-discovery_def 
config

....

#
# STM32 I/O interfaces
#
CONFIG_STM32_DMA=y
CONFIG_STM32_USART1=y
# CONFIG_STM32_USART1 is not set
# CONFIG_STM32_USART2 is not set
# CONFIG_STM32_USART3 is not set
# CONFIG_STM32_USART4 is not set
# CONFIG_STM32_USART5 is not set
# CONFIG_STM32_USART6 is not set

...
Gast #4670028
Lesenswert?

Wenn ich die drei Dateien so abändere wie von "xxx" beschrieben kann ich 
noch immer nicht booten indem ich den USB-UART Adapter an PA9 und PA10 
anschließe.
In dem Fall erscheinen in der Shell nur irgendwelche kryptischen Zeichen 
und Buchstaben. Das sieht aus als würde etwas mit der Baud Rate nicht 
stimmen...

Die "inittab" Datei habe ich inzwischen gefunden, jedoch kann ich da 
nirgendwo etwas zur Baudrate der UART Verbindungen finden.


Gruß
Gast #4675255
Lesenswert?

Matthias S. schrieb:
> Du weisst aber schon, das du nach Änderungen der kernel_config einen
> neuen Kernel kompilieren musst?

Das weiß ich natürlich. Bevor ich den Kernel neu kompiliert habe, war 
über USART1 gar keine Eingabe möglich. Jetzt passiert was, aber eben 
nichts brauchbares. (siehe letzer Post von mir)
Moderator Persönliche Seite #4675343
Lesenswert?

Thrillhouse schrieb:
> Danke für den Tipp. Jedoch habe ich das schon versucht, leider ohne
> Erfolg.

Hattest Du denn den Eindruck, dass bei einer bestimmten Baudrate 
zumindest die Hälfte der Buchstaben lesbar war? Dann könnte es noch ein 
Parity Bit sein, z.B. wie 7 Bit Even Parity.

Welches TTY ist es denn jetzt wirklich? ttyS0 oder ttyS2?

Wie lautet der inittab-Eintrag für dieses tty?

Du solltest den Eintrag derart anpassen, dass dort ein getty (sofern 
vorhanden) und nicht /bin/login direkt gestartet wird. Bei getty lässt 
sich nämlich eine Baudrate angeben. getty schaltet das TTY dann auf die 
gewünschte Baudrate um, fragt nach dem Usernamen und startet 
anschließend /bin/login mit diesem Usernamen, damit dieser dann das 
Password abfragt.
Gast #4675591
Lesenswert?

Frank M. schrieb:
> Hattest Du denn den Eindruck, dass bei einer bestimmten Baudrate
> zumindest die Hälfte der Buchstaben lesbar war? Dann könnte es noch ein
> Parity Bit sein, z.B. wie 7 Bit Even Parity.

Ja, bei einer Baudrate von 9600 und 6 Bit Even Parity wurde mit tty0 
gebootet und die Ausgaben wurden korrekt gezeigt. Allerdings war dabei 
dann das Problem, dass die Eingaben nur als Fragezeichen angezeigt 
wurden.

Frank M. schrieb:
> Du solltest den Eintrag derart anpassen, dass dort ein getty (sofern
> vorhanden) und nicht /bin/login direkt gestartet wird. Bei getty lässt
> sich nämlich eine Baudrate angeben. getty schaltet das TTY dann auf die
> gewünschte Baudrate um, fragt nach dem Usernamen und startet
> anschließend /bin/login mit diesem Usernamen, damit dieser dann das
> Password abfragt.

Das habe ich mal gemacht und das getty scheint eine endlose 
Reboot-Schleife zu erzeugen. Ich habe die Änderung an der inittab nun 
wieder rückgängig gemacht und neu kompiliert, jetzt passiert an tty0 
nichts mehr...bei keiner Baudrate.
Wenn ich den USB-UART Adapter jetzt an USART3 (ttys2) anschließe kommt 
Folgendes immer wieder:

starting pid 01, tty 'dev/ttyS2': 'getty -f root'
process 'getty -f root' (pid 01) exited. Scheduling for restart.

starting pid 02, tty 'dev/ttyS2': 'getty -f root'
process 'getty -f root' (pid 02) exited. Scheduling for restart.

.
.
.
Moderator Persönliche Seite #4675762
Lesenswert?

Thrillhouse schrieb:
> starting pid 01, tty 'dev/ttyS2': 'getty -f root'

Das Manual von getty solltest Du Dir schon ansehen. Es ist gewiss nicht 
damit getan, /bin/login durch getty zu ersetzen und den Rest so stehen 
zu lassen. Ich bin mir ziemlich sicher, dass getty mit "-f root" nichts 
anfangen kann. Und wo ist da die Angabe der Baudrate?

Hier ist zum Beispiel ein Manual für agetty, was auf Linux desöfteren 
benutzt wird:

http://linux.die.net/man/8/agetty

Im Abschnitt "Examples" findest Du dann so etwas für den 
inittab-Eintrag:

/sbin/agetty 9600 ttyS1

Ich würde persönlich auch noch -8 als Schalter verwenden, damit das TTY 
auch 8-Bit-clean ist. Aber lies einfach selbst, es lohnt sich.

Ob das agetty auf Deiner Linux-Variante dabei ist, weiß ich nicht. Wenn 
nur getty, dann gib bei Google ein "man getty" statt "man agetty". 
Dürfte aber für so simple Parameter wie 9600 und ttyS1 die gleiche 
Syntax verwenden.
(Firma: matzetronics) #4675903
Lesenswert?

Thrillhouse schrieb:
> starting pid 02, tty 'dev/ttyS2': 'getty -f root'

getty macht genau das, wie es heisst, es holt eine Konsole. Das danach 
'login' auf die Konsole geworfen wird, interessiert getty erstmal nicht, 
kann agetty aber per Parameter machen.

in der inittab steht dann, bei welchem Run Level was auf den tty 
passiert, dabei ist der Prozess bei uCLinux recht viel einfacher, als 
bei den 'grossen'. Es reicht meistens sowas hier:
1
inet:unknown:/bin/inetd
2
ttyS0:vt100:/sbin/agetty -l /bin/login ttyS0 9600 vt100
wobei du inet nur dann benötigst, wenn du Netzwerk Sachen machst.
Gast #4680640
Lesenswert?

Hallo,

könntest Du vielleicht mal einen brennfähigen Code hier einstellen? Mich 
würde das auch mal interessieren, was uCLinux so kann auf dem Disco 429 
Board. Bisher habe ich da zurück gescheut, weil mir das alles kryptisch 
daherkam.

Wenn ich das richtig verstehe kann ich über ein RS232 Kabel mit FTDI 
Interface und minicom o.ä. dann mit dem Board kommunizieren.

Gruss,
Christian
#4684394
Lesenswert?

Christian J. schrieb:
> Bisher habe ich da zurück gescheut, weil mir das alles kryptisch
> daherkam.

Die Anleitung, hier auf der 
Seite(https://www.mikrocontroller.net/articles/Linux_auf_STM32) ist doch 
eigentlich unmissverständlich. Ich bin auch noch ein Anfänger auf dem 
Gebiet und habe es damit Problemlos hinbekommen.

Christian J. schrieb:
> Wenn ich das richtig verstehe kann ich über ein RS232 Kabel mit FTDI
> Interface und minicom o.ä. dann mit dem Board kommunizieren.

Genau so ist es. Eigentlich alles ganz einfach, wenn man einen 
funktionstüchtigen USB-RS 232 Adapter hat... ;)

Gruß
Gast #4684783
Lesenswert?

Hallo,

ist es so schwer ein Hex File hier hochzuladen? Es gibt vielleicht 
Leute, die nicht die ganze Toolchain installieren möchten und die nicht 
Linux auf dem Rechner haben sondern einfach nur ein Flash Tool?

Gruss,
Christian
Gast #4685372
Lesenswert?

Christian J. schrieb:
> ist es so schwer ein Hex File hier hochzuladen?

Es ist nicht ein Hex File, es sind drei bin Files.
Hier ist die Kommandozeile, um mittels openocd die drei Dateien zu 
flashen
(Aus dem Makefile extrahiert):

openocd -f board/stm32f429discovery.cfg \
        -c "init" \
        -c "reset init" \
        -c "flash probe 0" \
        -c "flash info 0" \
        -c "flash write_image erase uboot.bin 0x08000000" \
        -c "flash write_image erase xipuImage.bin 0x08020000" \
        -c "flash write_image erase romfs.bin 0x08120000" \
        -c "reset run" -c shutdown
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren