www.mikrocontroller.net

Forum: PC Hard- und Software Linux aufs Nötigste abspecken


Autor: LinuKS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Liebe Leute!

Ich habe vor, mit einem betagten Linuxrechner Messwerte meines 
Mikrocontrollerboards über die serielle Schnittstelle zu empfangen. Da 
das Ganze schon so weit klappt (Programm wurde in C geschrieben), habe 
ich nun eine vielleicht etwas exotische Frage an alle Linux-Freaks unter 
euch.

Da ich momentan Ubuntu-Linux (10.4) auf dem Rechner installiert habe, 
benötige ich für diese Messwertanzeige eigentlich nur dieses 
Messwertprogramm. Das Ganze wäre eine einfache Konsolenanwendung, die 
mittels "curses.h" die Messwerte, die vom Controller an Linux (via 
RS232) geschickt werden, darstellt.
Nun zum Projekt: Ich möchte mein Linux booten und zwar so, dass nach dem 
Booten mein C-Programm öffnet.
Bedingung: NICHTS, aber auch GARNICHTS Unnötiges soll auf diesem System 
Platz finden. Es soll ausschließlich dieses C-Programm gebootet werden, 
welches die Messwerte anzeigt. Also kein X-Server, keine Treiber die ich 
nicht benötige....usw.

   --->       Sinn des Ganzen: Eine Bootzeit < 5 sec.    <--------

Gibt es irgendwo ein Tutorial oder habt ihr eine 
Schritt-für-Schritt-Anleitung, wie ich das am Besten bewerkstelligen 
kann?

Ich hoffe ihr versteht mein Vorhaben.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das könnte eine Anlaufstelle sein:

http://www.linuxfromscratch.org/

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn du wirklich nichts anderes brauchst kann du auf das ganze init zeug 
verzichten.

Beim booten einfach mal init=/bla/c-programm hinschreinben.

Wenn das immer noch zu langsam ist, dann musst du dir ein eigenen Kernel 
bauen, der nur das nötigste enthält.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eventuell hilft dir dies weiter: http://www.damnsmalllinux.org

Autor: Tim T. (tim_taylor)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder du verzichtest direkt aufs ganze Linux und machst es wie z.B. 
Memtest86

Autor: Thomas B. (detritus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Einsatz einer SSD könnte auch helfen.

Autor: Tim T. (tim_taylor)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Marcus B. (raketenfred)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ggf. mal Arch angucken, das kommt afaik nackt

Autor: LinuKS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke!!

> Beim booten einfach mal init=/bla/c-programm hinschreinben.

Wo soll ich das bei Ubuntu hinschreiben? Eine Ausgabe liefert dieses 
System leider nicht (mehr) ?!


> Der Einsatz einer SSD könnte auch helfen.

Der Sinn soll ja nicht das schnelle Booten sein sondern das 
minimalistische System. Das hat dann eben das schnelle Booten zur Folge.


Gruß

Autor: Tim T. (tim_taylor)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder eben der Standardweg:

1. Debian installieren ohne Extrapakete.
2. Kernel ohne irgendwelchen extra Kram bauen, auch keine Module.
3. Alle nicht mehr benötigte Pakete entfernen.
4. Startskripte anpassen.

Autor: Tim T. (tim_taylor)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
LinuKS schrieb:

> Wo soll ich das bei Ubuntu hinschreiben? Eine Ausgabe liefert dieses
> System leider nicht (mehr) ?!

Oh, wenn das dein Wissensstand ist wird es sehr schwierig für dich...

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
LinuKS schrieb:
>> Beim booten einfach mal init=/bla/c-programm hinschreinben.
>
> Wo soll ich das bei Ubuntu hinschreiben? Eine Ausgabe liefert dieses
> System leider nicht (mehr) ?!

achso, ja das muss beim bootloader eingetragen werden. Bei grub kann man 
es auch beim booten machen. Also dort wie die auswahl der Kernels 
vorhanden ist. Ich kenn jetzt aber Ubuntu nicht um etwas genauers zu 
sagen.

Autor: Ethernet-fan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
LinuKS schrieb:

> Wo soll ich das bei Ubuntu hinschreiben? Eine Ausgabe liefert dieses
> System leider nicht (mehr) ?!


So ein wenig Ahnung sollte wohl schon vorhanden sein. Wie alt bist du 
denn ?

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nimm doch einfach MS-DOS, das bootet auf heutigen  Rechnern innert 2..3s 
(plus die Boot-Zeit, die vom BIOS verbraten wird)

Autor: manu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter schrieb:
> LinuKS schrieb:
>>> Beim booten einfach mal init=/bla/c-programm hinschreinben.
>>
>> Wo soll ich das bei Ubuntu hinschreiben? Eine Ausgabe liefert dieses
>> System leider nicht (mehr) ?!
>
> achso, ja das muss beim bootloader eingetragen werden. Bei grub kann man
> es auch beim booten machen. Also dort wie die auswahl der Kernels
> vorhanden ist. Ich kenn jetzt aber Ubuntu nicht um etwas genauers zu
> sagen.

in welchem Runlever läuft der dann hoch?

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
manu schrieb:
> in welchem Runlever läuft der dann hoch?

es gibt dann keine Runlevel weil es kein init prozess mehr gibt.

Autor: Tom M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
LinuKS schrieb:
> Ich habe vor, mit einem betagten Linuxrechner Messwerte meines
> Mikrocontrollerboards über die serielle Schnittstelle zu empfangen. Da
> das Ganze schon so weit klappt (Programm wurde in C geschrieben), habe
> ich nun eine vielleicht etwas exotische Frage an alle Linux-Freaks unter
> euch.

Falls es unbedingt Linux sein soll, schliesse ich mich der Empfehlung 
an, eine Debian-Minimalinstallation zu verwenden. Ein LFS (linux from 
scratch) ist extrem aufwändig und schwer zu warten.

* Hast du den source code der App?
Falls ja: Du könntest die App auf DOS portieren. Ein Uralt- oder 
Nettop-Rechner bootet FreeDOS in Nullkommanix. Serielle Schnittstelle 
und Screen ansteuern ist relativ simpel, v.a. wenn du , wenn du schonmal 
DOSe Programmiert hast.

* Hast du etwas Erfahrung mit Programmierung?
oder
* Kennst du das Protokoll, welches App und C-Programm verwenden?
Falls ja: Du könntest selbst eine App schreiben für die superschlanke 
superschnellbootende Plattform deiner Wahl.

> Das Ganze wäre eine einfache Konsolenanwendung, die
> mittels "curses.h" die Messwerte, die vom Controller an Linux (via
> RS232) geschickt werden, darstellt.

kopfkratz mittels curses.h aha...
Zeig mal die Ausgabe von ldd $CONSOLENPROGRAMM

> Nun zum Projekt: Ich möchte mein Linux booten und zwar so, dass nach dem
> Booten mein C-Programm öffnet.

öffnet, hmmmmm. Es wird schwieriger als ich dachte... ;)

Autor: LinuKS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Könnt mir jemand Schritt-für-Schritt erklären, wie Ihr es mit dem GRUB 
machen würdet?

Meint ihr die "grub.cfg", wo ich das
> init=/bla/c-programm

einfügen soll?
So heißt die zumindest unter Ubuntu. Sie ist ein Shellskript.



Ich habe bisher nur mit Windows gearbeitet, programmiere aber zur Zeit C 
unter Linux. Von Linux habe ich nicht allzuviel Ahnung, deshalb frage 
ich euch ja.

Gruß

Autor: Tom M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nicht dauerhaft eintragen, bevor es nicht funzt, du wirst ernsthaft 
Schwierigkeiten haben, wieder ein lauffähiges System zu kriegen.

Notier dir den Pfad auf dein c-programm. Starte die Kiste neu, beim GRUB 
prompt änderst du die init= Zeile manuell. Musst irgendwann "e" drücken 
im GRUB Menu oder so, RTFM. :)

Autor: LinuKS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt kein GRUB-Menu. Liegt wohl an VMWare?!

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
LinuKS schrieb:
> Es gibt kein GRUB-Menu. Liegt wohl an VMWare?!

ganz bestimmt nicht.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In der aktuellen Version vom grub (die ist komplett neu) kriegt man 
normalerweise kein Menu zu sehen.

Autor: LinuKS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach kann nur sagen, dass nach Starten meiner VM sofort UBUNTU lädt (mit 
dem Ubuntu-Zeichen), innerhalb 8 sec. erscheint dann die Anmeldung. GRUB 
muss aber ja schon vorher starten, habe aber wiegesagt keine 
Möglichkeit, etwas einzugeben...
Es wird nichts angezeigt!

Autor: nix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man erhält das Menu bei GRUB2 in dem man die Shift-Taste gedrückt hält.

Autor: mkeller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die einfachste Variante: Debian oder Ubuntu in minmalkonfig 
installieren, alle nicht benötigten Pakete entfernen und wenns sein muss 
auch den Kernel entschlanken.

Wieso so kompliziert?!

Autor: LinuKS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Man erhält das Menu bei GRUB2 in dem man die Shift-Taste gedrückt hält.

Vielen Dank! Das hat geklappt!

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mkeller schrieb:
> Die einfachste Variante: Debian oder Ubuntu in minmalkonfig
> installieren, alle nicht benötigten Pakete entfernen und wenns sein muss
> auch den Kernel entschlanken.
>
> Wieso so kompliziert?!

weil dann immer noch viel zu viel geladen wird. Ich glaube auch nicht 
das du udev deinstallieren kannst.

Autor: LinuKS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nochmal zu dem Grub:

Ich halte nun die Shift-Taste gedrückt, dann kommt die Auswahl der 
Kernel. Drücke ich auf "e", so erscheint eine Ansammlung von Befehlen in 
dem Grubfenster. Mit ESC kehre ich zurück zur Kernelauswahl. Gehe ich 
aber erneut in "e", ist meine Änderung (mit init......) nicht mehr 
vorhanden.

Drücke ich Strg+C, dann kommt eine Befehlszeile: "grub>".

Wo soll ich dieses init hinschreiben?


Danke

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
LinuKS schrieb:
> Ich halte nun die Shift-Taste gedrückt, dann kommt die Auswahl der
> Kernel. Drücke ich auf "e", so erscheint eine Ansammlung von Befehlen in
> dem Grubfenster. Mit ESC kehre ich zurück zur Kernelauswahl.

das ESC wird das Problem sein, drücke mal b für boot.

Autor: mkeller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter schrieb:
> weil dann immer noch viel zu viel geladen wird. Ich glaube auch nicht
> das du udev deinstallieren kannst.

Hatte mir den 1. Beitrag nicht so genau durchgelesen.
Wieso muss die Kiste in 5s hochgefahren sein? Das wird recht schwer, 
wenn man nicht alles selber baut.

Vielleicht wäre Microcore Linux was:
http://tinycorelinux.com/forum/index.php?topic=1853.0

Autor: manu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter schrieb:
> manu schrieb:
>> in welchem Runlever läuft der dann hoch?
>
> es gibt dann keine Runlevel weil es kein init prozess mehr gibt.

Ich bin begeistert, das funktioniert ja wirklich! Und vorallem so 
einfach.

Wenn ich in Grub mein neuen Menüpunkt auswähle, dann dauert es keine 5 
Sekunden und schon läuft mein "Hello World!"-Programm (in der virtuellen 
Maschine).

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ LinuKS

das erstellen einer minimalen Linux Distribution ist nicht sehr 
kompliziert. Im wesentlich brauchst du nur einen Bootloader (z.B. GRUB), 
den Linux Kernel und die Busybox. Je nach Hardware sind damit Bootzeiten 
von unter 5 Sekunden drin.
Wie die einzelnen Komponenten erstellt werden müssen ist allerdings 
nicht mal eben erklärt sondern eher etwas für ein eigenes Tutorial.

Gruss,
Tobi

Autor: Franz B. (byte)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ABBO

Perfekt... genau das Thema geht mir momentan auch im Kopf um. Bei mir 
gehts darum meine Nano und Pixo ITX Board mit 800LX und Via mit Logic 
bzw. Hirn in Form eines Betriebssystems zu versorgen. Hat hier schon 
jemand Erfahrungen mit sowas gesammelt? Ich will zb. Megas angebunden 
über USB (CDC, FDTI) steueren/auslesen, Webcam-Video streamen und/oder 
Verarbeiten,  .... etc. Ersteres geht ja mit den AVRs schon in Maßen 
alleine. Aber ich möchte dann noch komplexere Logiken einbinden... bzw. 
Bilderkennung, etc.

Im Endeffekt läuft alles immer darauf hinaus ein Grundsystem auf den 
Kisten zum laufen zu bringen und das ganze dann Stück für Stück zu 
erweitern. Leider ist vieles bei so kleinen System immer komplette 
Handarbeit bzw. muss fast von 0 erstellt werden. Kernel, Module, etc. 
Also falls jemand Infos/Links etc. hat dann bitte hier reinwerfen. Ich 
könnte mir vorstellen das sich jemand schon eine Universallösung 
ausgedacht hat. Danke

Autor: LinuKS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich lade mir mal Debian und installiere das Ganze mal ohne 
graphischer Oberfläche und irgendwelchen Paketen.

Als nächstes erweitere ich dann diesen Grub.

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht noch eine Idee falls du kein dauerhaft schreibbares 
Dateisystem brauchst: Du könntest alle benötigten Programme in einer 
Init-RD verpacken.

Ich hab das mal selbst für einen DHCP/DNS-Server so gemacht. Die 
Startzeit lag (nach Bios) deutlich unter 5 Sekunden.

Autor: Lukas K. (carrotindustries)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ArchLinux kannst du dir auch mal Ansehen. In der /etc/rc.sysinit kannst 
du den Bootvorgang weitestgehend selbst anpassen.

Autor: manu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@LinuKS

ich habe einfach einen Eintrag kopiert, eine Zeile gelöscht und zwei 
Zeilen umgeschrieben und schon hatte es beim Booten zur Auswahl.

Unterer Ausschnitt aus grub.cfg

### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries.  Simply 
type the
# menu entries you want to add after this comment.  Be careful not to 
change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###

menuentry "test" {
        recordfail=1
        if [ -n ${have_grubenv} ]; then save_env recordfail; fi
        set quiet=1
        insmod ext2
        set root=(hd0,1)
        search --no-floppy --fs-uuid --set 
9e066ea4-fdb9-4b83-acb1-a99e0d31e7ef
        linux   /boot/vmlinuz-2.6.31-14-generic init=/test/a.out
}

Autor: Zwie Blum (zwieblum)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Sinn des Ganzen: Eine Bootzeit < 5 sec.

In 5 Sekunden ist dein BIOS noch nicht mal bei Bootloader laden 
angelangt.

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
www.openwrt.org

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier noch ein Beispiel um die inird-Variante umzusetzen:

Basis Ubuntu

1. Folgende Verzeichnisstruktur anlegen:
$ mkdir -p miniboot/build/bin
$ mkdir miniboot/build/lib

2. Benötigte Dateien hineinkopieren:
99
$ cd miniboot/build
$ cp /usr/lib/initramfs-tools/bin/busybox bin
$ cp /lib/ld-linux.so.2 lib
$ cp /lib/libc.so.6 lib
$ cd bin
$ ln -s busybox sh
$ ln -s busybox mount
$ cd ..

3. Init-Skript erzeugen
$ cat >init <<EOT
#!/bin/sh

# taken from the Ubuntu orginal init-script
[ -d /dev ] || mkdir -m 0755 /dev
[ -d /root ] || mkdir -m 0700 /root
[ -d /sys ] || mkdir /sys
[ -d /proc ] || mkdir /proc
[ -d /tmp ] || mkdir /tmp
mkdir -p /var/lock
mount -t sysfs -o nodev,noexec,nosuid none /sys
mount -t proc -o nodev,noexec,nosuid none /proc

if ! mount -t devtmpfs -o mode=0755 none /dev; then
        mount -t tmpfs -o mode=0755 none /dev
        mknod -m 0600 /dev/console c 5 1
        mknod /dev/null c 1 3
fi
mkdir /dev/pts
mount -t devpts -o noexec,nosuid,gid=5,mode=0620 none /dev/pts || true


# Ab hier eigenen Code schreiben
echo "Hallo Welt"
read
EOT
$ chmod +x init

4. initrd erzeugen
$ cd ..
$ (cd build; find . | cpio -o -H newc | gzip) > inird

5. Testen mit qemu
$ qemu -kernel /vmlinuz -initrd initrd

Die reine Bootzeit ohne Bios liegt mit dieser Variante bis zum echo 
unter qemu unter 1 Sekunde. Für die praktische Anwendung muss natürlich 
noch ein Bootloader wie syslinux benutzt werden.

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.