Forum: Mikrocontroller und Digitale Elektronik Embedded Linux


von Otto (Gast)


Lesenswert?

Hallo
Ich habe da ein Embbeded linux BusyBox v1.1.3
Anschlüsse Lan und Usb.
Zugriff über Telnet und kann dort standart Comandos ausführen cd , ls, 
ps
und durch die Verzeichnisse wühlen. Unteranderm habe ich als Verzeichnis 
meinen Usbstick gefunden.

Nun die Frage aller Fragen wie und wo fine ich als noch nicht Linuxer 
hilfe wie schreibt man für soein System Programme

liebe grüße

von Klaus W. (mfgkw)


Lesenswert?

Da brauchst die passende Entwicklungsumgebung auf dem PC.
Die besteht zumindest aus einem Crosscompiler, und vermutlich
den Quellen deines Embedded Linux.
Programmiert und übersetzt wird dann auf dem PC, und entweder
einzelne kompilierte Programm übertragen, oder gleich das ganze
System als Image.

von Otto (Gast)


Lesenswert?

Was währe denn die passende Entwicklungsumgebung für ein solches Linux 
system ?
Ich denke mit meinem Windows C gerümpel komm ich da nicht weit.
Ich habe von Linux leider keine ahnung aber das ist doch ein 
Betriebsystem auf einem Microcontroller auf dem ich nun Programme 
ausführen kann ohne die quellen meines Linux zu kennen oder ohne gleich 
das system neu aufspielen zu müssen?

Liebe grüße

von (prx) A. K. (prx)


Lesenswert?

Otto schrieb:

> Was währe denn die passende Entwicklungsumgebung für ein solches Linux
> system ?

Für gewöhnlich findet man das dort, wo man das embedded Linux System her 
hat. Andernfalls wirds steinig.

von ikarus (Gast)


Lesenswert?

A. K. schrieb:
> Otto schrieb:
>> Was währe denn die passende Entwicklungsumgebung für ein solches Linux
>> system ?
> Für gewöhnlich findet man das dort, wo man das embedded Linux System her
> hat. Andernfalls wirds steinig.
Nur so aus Interesse und weil es für Otto wohl auch sehr interessant 
ist, er braucht einen Linux-Rechner oder VirtualBox um für das/ein 
Linux-System zu kompilieren?

von sffdfdf (Gast)


Lesenswert?

aber bitte die SW aus der rosaroten Edition, nicht die aus der
blauen

von (prx) A. K. (prx)


Lesenswert?

ikarus schrieb:

> Nur so aus Interesse und weil es für Otto wohl auch sehr interessant
> ist, er braucht einen Linux-Rechner oder VirtualBox um für das/ein
> Linux-System zu kompilieren?

Nicht zwangsläufig. cygwin könnte ausreichen.

von Imon (Gast)


Lesenswert?

ikarus schrieb:
> Nur so aus Interesse und weil es für Otto wohl auch sehr interessant
> ist, er braucht einen Linux-Rechner oder VirtualBox um für das/ein
> Linux-System zu kompilieren?

Es Kommt darauf an (TM), erstmal braucht er nur ein Crosscompiler 
welcher für sein Target Code generiert. Die Tägliche erfahrung hat 
jedoch gezeigt das es um Zehnerpotenzen Schmerz freier geht wenn er das 
ganze unter eine Linux System macht.
Abgesehen davon das man wenn man so einige regeln beachtet seine 
Software erstmals auf den host mit einen entsprechenden Compiler für 
denn Host testen kann und erst wenn man meint das es läuft tauscht man 
denn Compiler aus und Probiert sein Glück auf denn Target.

Auch kann es sinnvoll sein da der TO Lan hat und eine busybox auf seinen 
host einen Verzeichnis via NFS frei zugeben und das am Target zu 
mounten.
So kann man sich gerade wärend der Software Entwicklung das Kopieren auf 
das Target sparen. Was das entwickeln beschleunigt,

Sicher auch das NFS kann man Wahrscheinlich mit Windows machen, aber 
auch hier muss man sich erstmal umsehen wie das geht, so das es wie 
schon gesagt am stress freisten ist sich ein Linux und sei es nur in 
einer VM als Host zu suchen.

Otto schrieb:
> Was währe denn die passende Entwicklungsumgebung für ein solches Linux
> system ?

Das kommt ein wenig auf dein System an, am besten die welche die Leute 
nutzen welche für dein System die Software schreiben. Wenn du die nicht 
bekommen kannst, musst du versuchen eine Entwicklungsumgebung zu nutzen 
welche dem an nächsten kommt.
Meisten ist es so das zum Beispiel Chip Hersteller und/oder 
Distributoren
schon ein rudimentäres Linux bereitstellen, an welchen sich viele 
Hersteller Orientieren wenn sie Ihr eigenes Produkt entwickeln, aber wie 
man dir gesagt hat der weg kann Steinig sein.


> Ich denke mit meinem Windows C gerümpel komm ich da nicht weit.

Richtig siehe Oben.

> Ich habe von Linux leider keine ahnung aber das ist doch ein
> Betriebsystem auf einem Microcontroller auf dem ich nun Programme
> ausführen kann ohne die quellen meines Linux zu kennen oder ohne gleich
> das system neu aufspielen zu müssen?

Das kommt drauf an, du sagst uns recht wenig über dein System ausser das 
es eine Busybox hat dem entsprechend wohl ein Linux ist und ein LAN 
Anschluss hat. Ich wage sogar zu behaupten das dein System mit hoher 
Wahrscheinlichkeit eine Serielle Schnittstelle haben wird. Vielleicht 
nicht nach draußen geführt und vielleicht fehlen auch die nötigen 
Pegelwandler, aber sie wird sicher an irgendwelchen Pins leicht zu 
erreichen sein.
Was denn Aufwand angeht welchen du treiben musst um dein Programm auf 
die Box zu bekommen hängt vom Typ des rootfilesystem ab, wenn es ein 
read only Filesystem ist wirst du ein neues Image für das rootfilesystem 
bauen müssen. Ist es das nicht kann es sein das du mit einen simplen cp 
dein Programm vom USBStick auf das gerät bekommst.

Denn Typ des Filesystem kannst du mit den Aufruf von mount aus der 
busybox feststellen.

Was die Quellen angeht wenn dein Programm recht trivial ist kann es sein 
das dir ein Crosscompiler reicht. Die Erfahrung sagt eher nein es wird 
nicht reichen, außerdem kann es ein ziemlicher Kraftakt sein Programme 
zu Fuß für eine Embedded System Cross zu kompilieren.

Wie oft habe ich schon in Configure scripten sowas wie "Nobody ever 
wants to cross Compile This" gelesen. so das ich erst mal anfangen 
durfte. die quellen fit zu machen damit sie auf meinen Target laufen. 
Hast du nun noch ein uCLinux am Start kannst du dich auch noch damit Rum 
ärgern das hier eine Sachen wie fork nicht existieren und du darfst die 
Quellen auch noch dagegen fit machen. für ein solches Vorgehen hat es 
sich in der Linux Gemeinschaft eingebürgert die Änderungen in Form von 
diff oder patch Dateien zu teilen. Welche man selbst verständlich auch 
manuell anwenden kann aber spätesten wenn du 10 Patch rumfliegen hast 
für ein Programm freust du dich über denn Luxus eines Buildsystem für 
deine Embedded Hardware.

Also sehe zu das du für dein PC oder VM ein Linux ans laufen bekommst 
(K)ubuntu ist gut Dokumentiert und gut zum Einstieg. Besorge dir die
Quellen für die Software auf deiner box ( ist GPL, kannst du also vom 
Verkäufer einklagen ;-) ) und nutze ein Buildsystem für embedded 
Software.
Vorzugsweise am Anfang das welches auch die anderen Entwickler für deine 
Hardware nehmen, damit du nicht zu beginn gleich auf verlorenen Posten 
stehst.

von ikarus (Gast)


Lesenswert?

Imon schrieb:
> ikarus schrieb:
>> Nur so aus Interesse und weil es für Otto wohl auch sehr interessant
>> ist, er braucht einen Linux-Rechner oder VirtualBox um für das/ein
>> Linux-System zu kompilieren?
> Es Kommt darauf an (TM), erstmal braucht er nur ein Crosscompiler
> welcher für sein Target Code generiert. Die Tägliche erfahrung hat
> jedoch gezeigt das es um Zehnerpotenzen Schmerz freier geht wenn er das
> ganze unter eine Linux System macht.
Damals war CygWin zumindest für Applikationen eine Möglichkeit, bei 
Kernel-Modulen brauchte es aber defintiv ein Linux-System. Wobei ich 
doch froh über den Linux-Rechner war, der mir zur Verfügung gestanden 
hat. ;-)

Imon schrieb:
> Abgesehen davon das man wenn man so einige regeln beachtet seine
> Software erstmals auf den host mit einen entsprechenden Compiler für
> denn Host testen kann und erst wenn man meint das es läuft tauscht man
> denn Compiler aus und Probiert sein Glück auf denn Target.
Ja, so habe ich es damals auch gemacht.
Danke für die Antwort.

von Kevin (Gast)


Lesenswert?

Es ist sehr empfehlenswert dafür unter Linux zu entwickeln. Erspart 
viele Probleme. Zudem sind die Crosscompiler häufig nur für Linux 
verfügbar.

Du brauchst auf jeden Fall den Crosscompiler. Normalerweise findest du 
den in der GCC (zB für arm) oder du bekommst ihn vom Hersteller des 
Embedded Linux  Eval Board  Prozessors. Einfach mal anfragen.

Normalerweise wird zur Entwicklung nur der Bootloader und der Kernel 
richtig geflasht. Das Filesystem bleibt auf deinem Computer in einem 
Ordner und wird dann vom Kernel über NFS gemountet. Dazu müssen 
natürlich die Ethernet Treiber fest in den Kernel kompilliert sein und 
du musst entsprechende Parameter im Bootloader setzen.
Wenn du nur schnell was ausprobieren willst, kannst du die Programme 
natürlich auch auf einem Stick speichern. Ist aber nur halb so 
komfortabel.

Wenn du den Crosscompiler hast, wirst du erstmal einige Stunden damit 
verbringen, die ganze Umgebung aufzusetzen (Umgebungsvariablen, Hello 
World kompilliern, Libraries kompillieren etc.)

gruss Kevin

von Otto (Gast)


Lesenswert?

Danke für die vielen schnellen Informationen.

Ich hatte gedacht das Linux währe in etwar mit Ms-Dos vergleichbar,
auf welchem man Programme ausführen könnte

von NurEinGast (Gast)


Lesenswert?

> Ich hatte gedacht das Linux währe in etwar mit Ms-Dos vergleichbar,
> auf welchem man Programme ausführen könnte

Klar, kann man.
Wenn Du ein Programm für das gerät hast, dann kannst Du es drauf 
kopieren und laufen lassen. Soweit kein Problem.
Die ganzen Info's oben mit "crosscompiler" sind dafür da, ein Programm 
für das Gerät erstellen bzw. compilieren zu können.

>  Ich habe da ein Embbeded linux BusyBox v1.1.3

Verrätst Du uns was für ein Gerät das ist ?

NurEinGast

von Otto (Gast)


Lesenswert?

Ein Programm habe ich nich
Das gerät ist eine Yakumo Wireles Strorage 60 und mein Plan war es ein 
Programm zu schreiben welches automatisch um eine bestimme Uhrzeit 
Dateien von mehreren Netzwerk Rechnern auf einen Usb stick kopiert

liebe grüße

von Klaus W. (mfgkw)


Lesenswert?

Dafür brauchst du evtl. den ganzen Kram mit crosscompiler
etc. gar nicht, weil dafür wahrscheinlich auch ein Skript
reicht.

Du schreibst also gar kein C-Programm, sondern nur das Skript
und lässt das dann von der Shell ausführen.

Möglicherweise hast du auf dem kleinen Rechner einen Editor
(vi?), ansonsten musst du es auf dem PC schreiben und wie
auch immer dorthin übertragen (nfs, scp, ftp, kermit, ...).

von ikarus (Gast)


Lesenswert?

Otto schrieb:
> Das gerät ist eine Yakumo Wireles Strorage 60 und mein Plan war es ein
> Programm zu schreiben welches automatisch um eine bestimme Uhrzeit
> Dateien von mehreren Netzwerk Rechnern auf einen Usb stick kopiert
Da reicht ein Shell-Skript und cron.
1
#!/bin/sh
2
3
SRC = /pfad/zur/datei
4
DST = /pfad/zum/ordner/in/dem/gespeichert/werden/soll
5
6
cp $SRC $DST
Dann noch cron konfigurieren und gut ist. Das ist aber ein nicht 
funktionsfähiges Grundgerüst, es fehlen noch viele grundsätzliche 
Informationen um eine funktionierende Lösung zu erstellen.

von Klaus W. (mfgkw)


Lesenswert?

PS:
Da würde man das Skript schreiben in der Art, daß es die Aktion
nur einmal macht:
1
#!/bin/sh
2
#
3
# Dieses Skript ist von...
4
# und macht ...
5
6
echo "Hallo Welt!"
7
8
# ... hin- und herkopieren, je nach Belieben...

Dieses Skript legt man z.B. in /usr/local/bin oder sonstwo ab
und macht es ausführbar:
1
chown root /usr/local/bin/meintollesskript
2
chmod 700 /usr/local/bin/meintollesskript

So kann man es schon mal ausprobieren, indem man es von Hand aufruft.

Dafür, daß es regelmäßig ausgeführt wird, gibt es in
der Regel bereits ein fertiges Programm, das ist der cron-Dämon.

Der wird über Dateien gesteuert, z.B. /etc/crontab :
1
# /etc/crontab: system-wide crontab
2
# Unlike any other crontab you don't have to run the `crontab'
3
# command to install the new version when you edit this file
4
# and files in /etc/cron.d. These files also have username fields,
5
# that none of the other crontabs do.
6
7
SHELL=/bin/sh
8
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
9
10
# m h dom mon dow user  command
11
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
12
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cro
13
n.daily )
14
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cro
15
n.weekly )
16
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cro
17
n.monthly )
18
#
19
20
00 1    * * *  root      /usr/local/bin/meintollesskript
21
22
*/2 *   * * * klaus          /usr/local/bin/fetchallemail

Das ist eine mögliche crontab. Die würde jede Nacht um 1:00
dein Skript ausführen, und zudem alle zwei Minuten das Skript
/usr/local/bin/fetchallemail.

PS: ikarus kam schneller angeflogen...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.