Hallo,
ich habe hier einen SAM9G45 (ARM9) auf einer Testplatine. Hierfür habe
ich mir ein Linux compiliert was soweit auch geklappt hat.
Nun möchte ich das Linux etwas ausbaufähig haben, sodass ich über den
Paketmanager "IPKG" (die datei selbst heißt ipkg-cl) parkete wie z.B.
Apache nachinstallieren kann.
IPKG muss dafür konfiguriert werden irgendwo seine pakete herzubekommen
- und genau dafür fehlt mir das Wissen wo man die Links herbekommt.
Ich finde Pakete für fertige hardware, (und damit verbundene fertiges
Linux/ software, aber das bringt mir in meinem Spezialfall nichts.
Ich benötige eigentlich einen Server der mir rein den quellcode zur
Verfügungstellt. Kompilieren müsste der IPKG das von selbst mit dem GCC,
den ich anbiete.
Ein paketmanager ist bequem wegen der abhängigkeiten, dewegen vermute
ich, dass sowas auch dazu genutzt wird, um nicht vorcompilierte Dateien
Anwendungen zu installieren...
bin ich damit auf dem Holzweg? Wenn nein, wo liegt die software im netz?
ich freue mich auf wildeste konversationen! :-)
lg
ipkg wird meines Wissens nach nicht mehr gewartet, als Nachfolger eignet
sich opkg. Aber weder ipkg noch opkg compilieren dir irgendwas, sondern
installieren Binärpakete.
LinuxDAU schrieb:> Ich benötige eigentlich einen Server der mir rein den quellcode zur> Verfügungstellt.
dann solltest du eventuell überlege auf eine Quelltext Distri wie Gentoo
zu gehen.
OK, also bin ich auf solch einem system darauf angewiesen die pakete
selbst zu entpacken, zu ".configure"n und zu "make install"en.
Hmmh. Hmmh. Hmmh. hmmh.
oder OpenWRT
Die haben ein tolles Buldroot, das zumindest für bereits bekannt Geräte
sehr einfach zu bedienen ist (habs für TL-WR841N und TL-MR3020
Wlan-Router benutzt).
opkg ist das auch dabei.
Wo bekommt man denn z.B. ein Debian für ARM9 her? ich seh da leider
überhaupt nicht durch :-(
Kommt nach so einer Compilierung auch direkt ein Flash-Image raus mit
root-fs und alles drum und dran?
Kompilieren musst du nur den Kernel.
Das root fs kannst du z.B. mit debootstrap erstellen, der erste Schritt
geht ganz einfach und schnell z.B. mit einem ganz normalen x86 Rechner.
Den zweiten Schritt musst du dann auf dem ARM System ausführen. Einfach
ein init=/bin/sh im bootloader anhängen und debootstrap --second-stage
o.ä. ausführen.
Der Aufruf für debootstrap auf dem Rechner kann dann z.B. so aussehen:
Hallo Omega,
der Hinweis mit dem debootstrap-dingens klingt echt gut, aber ganz
ehrlich: da ist man völlig verloren. Ich habs gegoogelt und bin relativ
schnell auf
http://packages.debian.org/search?keywords=debootstrap
gestoßen. Schön - und nun?? Anhand deiner kommandozeile und der
Zielarchitektur suche ich nach dem begriff "armel" und entscheide mich
für etwas "stable"s. Z.B. Wheezy:
http://packages.debian.org/wheezy/cdebootstrap
Dort ist man das erste mal aufgeworfen und wird mit "armel" und "armhf"
konfrontiert. Es verusrsacht unsicherheit. ich bleibe bei "armel".
http://packages.debian.org/wheezy/armel/cdebootstrap/download
Der Anweisung zu folge setzt ich mir den link per copy&pase selbst
zusammen und lande auf einem FTP-Server:
http://ftp2.de.debian.org/debian/pool/main/c/cdebootstrap/
Von der Auswahl überwältigt greife ich nach der neusten Version in der
"armel" vorkommt:
http://ftp2.de.debian.org/debian/pool/main/c/cdebootstrap/cdebootstrap_0.5.10_armel.deb
ääähm und nun? jetzt habe ich in meinem Home-Verzeichnis eine
cdebootstrap_0.5.10_armel.deb. Das hat nichts mehr mit dem Aufruf in
deiner Kommandozeile zu tun. Tut mir leid, ich habe mich auf dem Weg zu
dieser Datei geschätze 10k mal falsch entscheiden können. Meine
Sicherheit konvergiert gegen null. Schneller als jede
exponentialfunktion.
Kann man diese datei jetzt überhaupt ausführen? was bedeutet die
dateiendung .deb? Aaach herje :-(
Okay, zugegeben mit meinem Post vorher wird keiner ohne Erfahrung damit
ein System aufsetzen können.
Vielleicht sollte ich mal eine Schritt für Schritt Anleitung schreiben
und auf meine Webseite stellen.
1. Grundlagen:
Du benötigst ein Linux auf deinem Rechner. Ich verwende da Debian.
debootstrap wird da einfach mit "sudo apt-get install debootstrap"
installiert.
2. Massenspeicher vorbereiten:
Vermutlich willst du ein Linux auf SD Karte installieren. Du
partitionierst dir die SD Karte wie du es brauchst. Ich habe es meistens
so aufgeteilt, dass die erste Partition das root fs wird und
entsprechend die größte ist. Die nächste ist vorgesehen für den Kernel
(oder manchmal auch mehrere Kernel), die letzte ist dann swap.
Bei mir ergibt sich auf einer 4 GB Karte folgende Aufteilung:
1
/dev/mmcblk0p1 1 447 3590496 83 Linux
2
/dev/mmcblk0p2 448 452 40162+ 83 Linux
3
/dev/mmcblk0p3 453 474 176715 82 Linux swap / Solaris
Partitionieren kannst du z.B. mit fdisk oder cfdisk. Anschließend müssen
die Partitionen formatiert werden. Wie ist dir überlassen.
3. Debootstrap anwenden:
Als erstes mountest du dein zukünftiges root fs, z.B. auf /mnt.
Jetzt kannst den den Befehl von vorher einfach ausführen, ohne zu
verstehen was der bewirkt.
arch gibt die Zielarchitektur an. ARM9 fällt unter "armel". Hättest du
einen ARM mit FPU, wie zum Beispiel den Tegra2, der einen Cortex A9 Kern
enthält, würde "armel" zwar funktionieren, aber "armhf" nutzt diese FPU.
Was in den meisten fällen schneller sein sollte.
variant legt die Debianvariante fest. Minbase, beinhaltet nur das
Minmalsystem und sonst nichts. Ergibt etwa 200MByte.
include damit kannst du manuell extra Pakete hinzufügen.
Am besten du fügst noch ein --foreign ein. Das gibt an, dass die
Zielarchitektur anders ist, als die die du momentan verwendest.
Ansonsten gibt es am Ende einen Fehler.
squeeze ist die Debianversion. Du könntest auch lenny oder wheezy
installieren. squeeze läuft bei mir problemloser auf ARM als wheezy.
mnt ist der Zielpfad des root fs
Abschließend wird der Quellserver angegeben.
Jetzt lädt debootstrap alle Pakete runter, und entpackt diese. Das
einrichten muss auf deinem Zielsystem passieren.
4. System einrichten:
Du umountest deine Speicherkarte und steckst sie an dein ARM System.
Dort hast du vermutlich uBoot als bootloader. Da musst du den Parameter
bootargs anpassen. Meistens steht da sowas
setzt dir den Parameter neu.
Mit "boot" lässt du das System booten. Wenn alles gut geht wirst du mit
"ls" ein Verzeichnis debootstrap finden. Da kannst du reinwechseln und
"./debootstrap --second-stage" ausführen. Das installiert dir das System
fertig.
5. Abschließendes:
Bevor du das System neu startest solltest du mit "passwd" ein root
Passwort setzen. Sonst kommst du nicht mehr rein. Ansonsten einrichten
was du sonst noch brauchst: Netzwerk, fstab, initab etc.
Jetzt neu starten und es sollte in ein Debian booten. Die .deb Pakete
kannst du mit dpkg -i datei.deb installieren. Oder einfach apt-get
nutzen.
ok, von der ausführlichkeit her ist das jetzt seeehr nett :-) Viiiielen
dank!! Ich kann dir erst in ein paar stunden sagen ob das so
funktioniert. Ich werde allerdings ein paar andere umwege gehen, da ich
in einer VM arbeite und auf die SD-Karte keinen USB2.0-Zugriff habe :-(
Mir stellt sich noch die frage nach dem Kernel. Welchen nehmen und
woher? Zur Zeit habe ich ein Linux 2.6.33 Kernel compiliert und
sozusagen fertig als "uImage" vorliegen. Kann ich das einfach weiter
nehmen, oder brauch ich etwas aktuelleres?
Es ist ein
http://shop.in-circuit.de/products/Home/ICnova-CPU-Module/6/ICnova-SAM9G45-OEM
Die mitgelieferte Software ist leider sehr unzureichend für meinen
Zweck. Da drauf läuft erstmal so gut wie nix :-(
Sagmal.. deine SD-Kartenaufteilung? MUSS die so sein, oder reicht eine
einzelne root-Partition. Ohne SD-Karten zugriff wirds nämlich leicht
unangenehm :-( hab gerade ein ext2 fs als Datei gemounted. aber wie man
die Datei jetzt weiter partitionieren kann... keine ahnung :-( Das ist
ja nur die partition ansich. Das Image brenn ich dann immer direkt auf
die Partition der SD-Karte (unter Windows) - was bisher super
funktioniert hat.
Deine Kommandozeile meckert:
debootstrap --no-check-gpg .....
Er kennt das "--no-check-gpg" Laut google soll man einfach das neuste
debootstrap installieren. das habe ich getan, denn vorher wars ja nicht
aufm system -.- zusätzlich habe ich "apt-get upgrade debootstrap"
aufgerufen, und da hats mir minutenlang u.a. irgendwelche
OpenOffice-Pakete runtergeladen, geholfen hats nix. kann man die option
weglassen?
Aaaalso... hab jetzt ein 1GB ext2 system auf der karte das von
debootstrap erstellt wurde. das "uImage" habe ich händisch reinkopiert.
Mein uBoot aufruf ist stark verschieden von dem, was du angegeben hast,
deswegen finde ich es erwähnenswert:
Mein uBoot ist bereits auf das booten von SD-Karte konfiguriert und
"bootcmd" ist auf "mmc rescan 0; ext2load mmc 0:1 0x70400000
/boot/uImage; setenv bootargs rootfstype=ext2 root=/dev/mmcblk0p1
rootwait ro; bootm"
gesetzt. Das initialisiert die SD-Karte, lädt das Kernelimage, sagt
bescheid, dass ext2 zu erwarten ist und da SD-Karte geht das ganze
anfangs nur readonly. (keine ahnung warum... sonst gibts kernel panic..)
So wie ich das verstehe muss ich das commando so umändern
"mmc rescan 0; ext2load mmc 0:1 0x70400000 /boot/uImage; setenv bootargs
noinitrd ro rootfstype=ext2 root=/dev/mmcblk0p1 rootwait init=/bin/sh;
bootm"
bzw zum händisch booten die einzelnen stufen manuell ausführen.
Nunja: er kommt soweit, dass er das rootfs mounted (ro)
und dann hat der Kernel panik, nachdem er 148K Speicher freigegeben hat
-.-
mein Kernel ist mit der OABI kompiliert... ist das evtl ein problem?
so wie ich das sehe startest du mit dem init=/bin/sh sofort die shell.
Wen die für EABI ist.... öööhm. Kernel umkompilieren? wie findet man
raus welche ABI ein system bzw eine exe nutzt?
Soweit ich weiß, muß entweder ALLES mit OABI bzw. EABI compiliert sein,
sonst funktioniert nix. Also Kernel, Executables und Bibliotheken.
Wenn Du nur einen Kernel mit OABI hast bzw. finden kannst, muß auch
alles andere OABI compiliert sein. Wie man in einer fertigen Bibliothek
oder einem Programm das application binary interface herausfindet, kann
ich leider auch nicht aus dem Stegreif beantworten. Für die alten iPAQs
gab es zum Beispiel Familiar Linux, dort ist alles OABI und auch neue
Programme muss man dem entsprechenden Compiler übersetzen. Bei Familiar
war auch IPKG als Standard-Packagemanager dabei, für vorgefertigte
Pakete habe ich es auch benutzt. Eigene Programme habe ich auf dem
Rechner Cross-compiliert, mich auf dem Board via SSH eingeloggt und dann
mittels wget vom Rechner-Webserver übertragen. Den Umweg über IPKG würde
ich dafür auch als zu umständlich halten.
Jörg
Hallo,
ich habe ENDLICH meinen kernel für EABI zum kompilieren bekommen :-)
Jetzt sieht soweit erstmal alles toll aus. Denn es gibt kein
Kernel-Panic mehr.
jedoch muss ich, wie oben erwähnt, um von der SD-Karte booten zu können,
das ganze als "ro" starten, anstatt als "rw". ohne "ro" gibts
KernelPanic^3.
Das jetzige Problem ist die Debian Grundinstallation:
es fehlt ein funktionstüctiges "mount" für ein anständiges "mount -o
remount,rw /".
warning: can't open /etc/mtab: No such file or directory
mount: can't find / in /etc/fstab or /etc/mtab
./debootstrap --second-stage
murkst natürlich rum, da es nicht auf einen ReadOnly-Dateisystem agieren
möchte.
kann mir jemand helfen, das root-verzeichnis als rw zu remounten?
es existiert die datei "etc/fstab" Ich vermute die muss mit
entsprechendem Inhalt gefüllt werden. Zur Zeit ist die SD karte nicht
weiter partitioniert.
Oh man...
habe gerade in /etc/fstab eine magische zeile geschrieben:
"/dev/mmcblk0p1 / ext2 defaults 1 1"
Was auch immer das tut, es tut. sd-karte ist als rw geremounted und die
installation rudert grade heftigst auf der sd-karte rum :-O
meine güte. welch teufelszeug^^