Forum: Mikrocontroller und Digitale Elektronik Grasshopper Buildroot Probleme


von Dirk S. (fusebit)


Lesenswert?

Moin Leute,

ich bin Linux und Grasshopper Anfänger und habe ein kleines Problem.

Nachdem ich jetzt ein funktionierendes Ubuntu 8.04 habe und die 
erforderlichen Pakete installiert habe kann ich make ausführen. Dabei 
verwende ich Buildroot 2.3.0 mit dem Patch aus dem zugehörigen Thread.
Allerdings bricht make wie folgt ab:

Checking build system dependencies:
BUILDROOT_DL_DIR clean:        Ok
CC clean:          Ok
CXX clean:          Ok
CPP clean:          Ok
CFLAGS clean:          Ok
INCLUDES clean:          Ok
CXXFLAGS clean:          Ok
which installed:        Ok
sed works:          Ok (/bin/sed)
GNU make version '3.81':      Ok
C compiler '/usr/bin/gcc'
C compiler version '4.2.4':      Ok
C++ compiler '/usr/bin/g++'
C++ compiler version '4.2.4':      Ok
patch installed:        FALSE


You must install 'patch' on your build machine



Welchen patch muss ich denn hier installieren??

Vielen Dank

Dirk

von Marius W. (mw1987)


Lesenswert?

Du musst die Software "patch" installieren:
1
sudo apt-get install patch

Wenn du schon dabei bist, solltest du auch direkt alle anderen wichtigen 
Pakete prüfen, die fürs Buildroot installiert sein müssen (siehe 
Dokumentation).

MfG
Marius

von Dirk S. (fusebit)


Lesenswert?

Autsch - Das war ja sehr einfach ;-)

Jetzt klappt es, patch und gettest waren nicht auf der "HowTo-Liste".

Leider kann ich momentan die MPFR Libary nicht runterladen. Kann jemand 
die mpfr-2.3.0.tar.bz2 hier reinstellen?

Und reicht es wenn ich die Datei vor dem nächstem make in das 
buildroot/dl Verzeichnis stecke?


Vielen Dank

Dirk

von Marius W. (mw1987)


Lesenswert?

Jo, sollte reichen, wenn du die einfach ins dl-Verzeichnis packst.

Hier nen funktionierender DL-Link: 
https://gforge.inria.fr/frs/download.php/2678/mpfr-2.3.0.tar.bz2

MfG
Marius

von Dirk S. (fusebit)


Lesenswert?

Vielen Dank, das hat geholfen.

Jetzt ist er nach über einer Stunde gerödel ausgestiegen, weil ihm die 
termcap-Libary fehlt :-(

configure: error: no termcap library found
make[2]: *** [configure-gdb] Fehler 1


Wenn ich es richtig recherchiert habe sollte es zu beheben sein indem 
ich emacs installiere - mal sehen

Nö!

Ich habe zwar die termcap-1.3.1.tar.gz, aber wohin muss ich die 
entpacken?

Das wird wohl noch ein langer Weg bis ich das alles überblicke...

von Gerhard (Gast)


Lesenswert?

Wichtig ist, daß du nicht nur irgendwelche Bibliotheken installiert 
hast, sondern auch die dazugehörigen "development" - Pakete. Diese 
enthalten die Header-Dateien zu der Bibliothek und meistens auch eine 
statische Ausgabe der Bibliothek. Insbesondere die Header-Dateien 
brauchst du, um auf deinem System eigene Programme kompilieren zu 
können, die diese Bibliotheken nutzen. Die dev-Pakete sind meistens 
nicht von Haus aus installiert, da fertig kompilierte Programme diese 
nicht brauchen.

Meistens enden die Pakete mit -dev oder -devel.

von Dirk S. (fusebit)


Lesenswert?

Ok, wer lesen kann ist im Vorteil.

Wenn man die Datei entpackt kann man auch das Readme und die 
Installationsanleitung für die Bibliothek lesen und schon funktioniert 
es mit der Installation ;-)

Jetzt rödelt make wieder weiter ------- das dauert ja ewig!

von Dirk S. (fusebit)


Lesenswert?

Ich dokumentiere meinen Weg mal weiter, vielleicht hilft es ja 
irgendwann mal jemanden:

Jetzt fehlte noch dies:

http://zlib.net/


compr_lzo.c:29:23: Fehler: lzo/lzo1x.h: No such file or directory
compr_lzo.c: In Funktion »jffs2_lzo_cmpr«:
compr_lzo.c:54: Warnung: Implizite Deklaration der Funktion 
»lzo1x_999_compress«
compr_lzo.c:56: Fehler: »LZO_E_OK« nicht deklariert (erste Benutzung in 
dieser Funktion)
compr_lzo.c:56: Fehler: (Jeder nicht deklarierte Bezeichner wird nur 
einmal aufgeführt
compr_lzo.c:56: Fehler: für jede Funktion in der er auftritt.)
compr_lzo.c: In Funktion »jffs2_lzo_decompress«:
compr_lzo.c:74: Warnung: Implizite Deklaration der Funktion 
»lzo1x_decompress_safe«
compr_lzo.c:76: Fehler: »LZO_E_OK« nicht deklariert (erste Benutzung in 
dieser Funktion)
compr_lzo.c: In Funktion »jffs2_lzo_init«:
compr_lzo.c:95: Fehler: »LZO1X_999_MEM_COMPRESS« nicht deklariert (erste 
Benutzung in dieser Funktion)



Gibt es eigentlich irgendwo eine vollständige Liste der nötigen Pakete? 
Die Angaben im HowTo sind ja nicht wirklich vollständig.


Bis dann

Dirk

von Dirk S. (fusebit)


Lesenswert?

Es fehlte nicht die zlib, sondern:

http://www.oberhumer.com/opensource/lzo/download/

Allerdings gibt es jetzt wieder einen anderen Fehler:

collect2: ld gab 1 als Ende-Status zurück
make[1]: *** [mkfs.jffs2] Fehler 1


Damit kann ich bisher nichts anfangen, mal sehen wer schneller ist Ihr 
oder ich ;-)

von Sebastian A. (freddyk)


Lesenswert?

Hallo,

nach der Kubuntu-Installation (8.04) habe ich noch die folgenden Pakete 
nachinstalliert um alles korrekt übersetzen zu können:

build-essential
flex
bison
gettext
libtool
texinfo
autoconf
autoconf2.13
automake
libncurses-dev
zlib1g-dev
libacl1-dev
liblzo2-dev


Ich hoffe es hilft weiter.


Sebastian

von Dirk S. (fusebit)


Lesenswert?

Ich habe die Pakete kontrolliert, aber ich bekomme weiterhin einen 
Fehler. Hier mal eine ausführliche Ausgabe:

1
make[1]: Betrete Verzeichnis '/home/dirk/grasshopper/buildroot/toolchain_build_avr32/mtd_orig'
2
gcc  -o /home/dirk/grasshopper/buildroot/toolchain_build_avr32/mtd_orig/mkfs.jffs2 /home/dirk/grasshopper/buildroot/toolchain_build_avr32/mtd_orig/crc32.o /home/dirk/grasshopper/buildroot/toolchain_build_avr32/mtd_orig/compr_rtime.o /home/dirk/grasshopper/buildroot/toolchain_build_avr32/mtd_orig/mkfs.jffs2.o /home/dirk/grasshopper/buildroot/toolchain_build_avr32/mtd_orig/compr_zlib.o /home/dirk/grasshopper/buildroot/toolchain_build_avr32/mtd_orig/compr_lzo.o /home/dirk/grasshopper/buildroot/toolchain_build_avr32/mtd_orig/compr.o -lz -llzo2
3
gcc -I./include -O2 -Wall  -g -o mkfs.jffs2 mkfs.jffs2.o /home/dirk/grasshopper/buildroot/toolchain_build_avr32/mtd_orig/mkfs.jffs2
4
mkfs.jffs2.o: In function `crc32':
5
/home/dirk/grasshopper/buildroot/toolchain_build_avr32/mtd_orig/crc32.h:15: undefined reference to `crc32_table'
6
/home/dirk/grasshopper/buildroot/toolchain_build_avr32/mtd_orig/crc32.h:15: undefined reference to `crc32_table'
7
/home/dirk/grasshopper/buildroot/toolchain_build_avr32/mtd_orig/crc32.h:15: undefined reference to `crc32_table'
8
/home/dirk/grasshopper/buildroot/toolchain_build_avr32/mtd_orig/crc32.h:15: undefined reference to `crc32_table'
9
/home/dirk/grasshopper/buildroot/toolchain_build_avr32/mtd_orig/crc32.h:15: undefined reference to `crc32_table'
10
mkfs.jffs2.o:/home/dirk/grasshopper/buildroot/toolchain_build_avr32/mtd_orig/crc32.h:15: more undefined references to `crc32_table' follow
11
mkfs.jffs2.o: In function `write_regular_file':
12
/home/dirk/grasshopper/buildroot/toolchain_build_avr32/mtd_orig/mkfs.jffs2.c:845: undefined reference to `jffs2_compress'
13
mkfs.jffs2.o: In function `crc32':
14
/home/dirk/grasshopper/buildroot/toolchain_build_avr32/mtd_orig/crc32.h:15: undefined reference to `crc32_table'
15
/home/dirk/grasshopper/buildroot/toolchain_build_avr32/mtd_orig/crc32.h:15: undefined reference to `crc32_table'
16
/home/dirk/grasshopper/buildroot/toolchain_build_avr32/mtd_orig/crc32.h:15: undefined reference to `crc32_table'
17
/home/dirk/grasshopper/buildroot/toolchain_build_avr32/mtd_orig/crc32.h:15: undefined reference to `crc32_table'
18
/home/dirk/grasshopper/buildroot/toolchain_build_avr32/mtd_orig/crc32.h:15: undefined reference to `crc32_table'
19
mkfs.jffs2.o:/home/dirk/grasshopper/buildroot/toolchain_build_avr32/mtd_orig/crc32.h:15: more undefined references to `crc32_table' follow
20
mkfs.jffs2.o: In function `main':
21
/home/dirk/grasshopper/buildroot/toolchain_build_avr32/mtd_orig/mkfs.jffs2.c:1621: undefined reference to `jffs2_compressors_init'
22
/home/dirk/grasshopper/buildroot/toolchain_build_avr32/mtd_orig/mkfs.jffs2.c:1762: undefined reference to `jffs2_compression_check_set'
23
/home/dirk/grasshopper/buildroot/toolchain_build_avr32/mtd_orig/mkfs.jffs2.c:1749: undefined reference to `jffs2_disable_compressor_name'
24
mkfs.jffs2.o: In function `crc32':
25
/home/dirk/grasshopper/buildroot/toolchain_build_avr32/mtd_orig/crc32.h:15: undefined reference to `crc32_table'
26
/home/dirk/grasshopper/buildroot/toolchain_build_avr32/mtd_orig/crc32.h:15: undefined reference to `crc32_table'
27
mkfs.jffs2.o: In function `main':
28
/home/dirk/grasshopper/buildroot/toolchain_build_avr32/mtd_orig/mkfs.jffs2.c:1840: undefined reference to `jffs2_compression_check_get'
29
/home/dirk/grasshopper/buildroot/toolchain_build_avr32/mtd_orig/mkfs.jffs2.c:1844: undefined reference to `jffs2_compressors_exit'
30
/home/dirk/grasshopper/buildroot/toolchain_build_avr32/mtd_orig/mkfs.jffs2.c:1744: undefined reference to `jffs2_set_compression_mode_name'
31
/home/dirk/grasshopper/buildroot/toolchain_build_avr32/mtd_orig/mkfs.jffs2.c:1768: undefined reference to `jffs2_set_compressor_priority'
32
/home/dirk/grasshopper/buildroot/toolchain_build_avr32/mtd_orig/mkfs.jffs2.c:1759: undefined reference to `jffs2_list_compressors'
33
/home/dirk/grasshopper/buildroot/toolchain_build_avr32/mtd_orig/mkfs.jffs2.c:1754: undefined reference to `jffs2_enable_compressor_name'
34
/home/dirk/grasshopper/buildroot/toolchain_build_avr32/mtd_orig/mkfs.jffs2.c:1840: undefined reference to `jffs2_compression_check_errorcnt_get'
35
/home/dirk/grasshopper/buildroot/toolchain_build_avr32/mtd_orig/mkfs.jffs2.c:1841: undefined reference to `jffs2_compression_check_errorcnt_get'
36
/home/dirk/grasshopper/buildroot/toolchain_build_avr32/mtd_orig/mkfs.jffs2.c:1836: undefined reference to `jffs2_stats'
37
collect2: ld gab 1 als Ende-Status zurück
38
make[1]: *** [mkfs.jffs2] Fehler 1

von Marius W. (mw1987)


Lesenswert?

Die Liste der Pakete, die du für einen erfolgreichen Durchlauf vom 
buildroot brauchst, sollten in der Dokumentation vom buildroot drin 
stehen.

Bei www.atmel.no/buildroot gibts die Liste auf jeden Fall, aber derzeit 
siehts irgendwie danach aus, als wäre der Server down.

Wenn du alles installiert hast und es dennoch nicht klappt, lösch 
einfach mal das Buildroot-Verzeichnis (dl-Unterverzeichnis vorher 
sichern erspart erneuetes Downloaden). Bei mir hats unter Kubuntu 8.04 
auf jedenfall einwandfrei gelaufen.

MfG
Marius

von Dirk S. (fusebit)


Lesenswert?

Ja der norwegische Atmel Server ist seit einiger Zeit offline und auch 
die AVRfreaks-Seite funktioniert nicht mehr.

Wenn ich es richtig sehe entsteht das Betriebssystem im Ordner 
project_build_avr32/grasshopper/? Das werde ich mal löschen, wenn ich 
das ganze buildroot-Verzeichniss lösche kann ich ja auch kein make mehr 
ausführen.

von Dirk S. (fusebit)


Lesenswert?

Die Lösung lag auf dem Atmel.no Server, dank Google-Cache funktioniert 
es jetzt :-)
1
Undefined reference to `crc32_table'
2
3
The user experiences, when compiling mkfs.jffs2, that it fails with errors about undefined reference to crc32_table. The error message is something similar to:
4
5
mtd_orig/crc32.h:15: undefined reference to 'crc32_table'
6
mtd_orig/crc32.h:15: undefined reference to 'crc32_table'
7
mtd_orig/crc32.h:15: undefined reference to `crc32_table'
8
mtd_orig/crc32.h:15: undefined reference to `crc32_table'
9
mtd_orig/crc32.h:15: undefined reference to `crc32_table'
10
mkfs.jffs2.o: mtd_orig/crc32.h:15: more undefined references
11
              to `crc32_table' follow
12
mkfs.jffs2.o: In function `write_regular_file':
13
14
Solution is to delete the directory toolchain_build_avr32_nofpu/mtd_orig and type make to continue the build process.
15
16
If the user experiences the same problem again, contact the support line.

von Dirk S. (fusebit)


Lesenswert?

So weiter geht's:

NFS läuft und ich kann mir Dateien ins RAM kopieren, nur welche?

Im buildroot-Verzeichnis habe ich:

rootfs.avr32.jffs2-root
rootfs.avr32.ext2

Ich tippe ja auf die Erste, aber da es ja nur einen Versuch gibt das 
System neu zu flashen (ohne JTAG) sollte nun ja nichts schief gehen.

Wenn ich die Datei in /tmp habe dann mache ich mich zum Superuser und 
gebe noch:

mount -o remount,ro /
dd if=/tmp/DATEINAME of=/dev/mtdblock2 bs=65535

ein und dann sollte ich ein neues System haben, oder???


Vielen Dank

Dirk

von Michael B. (bubi)


Lesenswert?

Hallo

Was du vorhast ist "relativ" gefährlich.
Wenn du dich vertippst überschreibst du ev den Bootloader. Sehr 
ungünstig.
Schau dir lieber im Wiki an wie man über NFS bootet.
Du mountest dann dein "ext2" Datei in das NFS Verzeichniss und gibts im 
U-Boot die richtigen Befehle ein. (Auswendig weiß ich die jetzt nicht, 
findest du aber im Wiki nfs 0x11000000 severip:/nfs/boot/uImage)
Dann startet dein Kernel aus dem Ram und es kann nichts passieren.
Was du vorhast kannst du aber auch bequemer und sicherer direkt aus 
U-Boot heraus machen. Die "jffs2" Datei (ist das Joliet FLASH File 
System) in dein Flash schreiben (die korekkten Addressen findest du auch 
im Wiki) und damit starten. Ev müssen die bootcmds im U-Boot geändert 
werden.

PS: ext2 ist ein Dateisystem genauso wie jffs2 eines ist. Unterscheidet 
sich im Aufbau und in der Verwendung. Auch hier google.

Sorry für die recht spärliche Antwort, aber ich hoffe es zeigt dir 
erstmal den Weg.


Michael

von Dirk S. (fusebit)


Lesenswert?

Vielen Dank Michael,

das hilft mir weiter. Ich werde mir das U-Boot mal näher anschauen. Wenn 
ich über NFS boote, dann habe ich aber mein Betriebssystem nicht im 
Flash und müsste dann ja das gleiche machen wie beim booten aus dem 
Flash.

Wirklich sicherer ist dann ja nur wenn ich mit dem Unterseeboot mein 
Flash beschreibe. Werde ich morgen mal testen.

Welche Wiki meinst Du eigentlich? Ich habe keine zum Grasshopper oder 
zum NFS gefunden? Stehe ich mal wieder auf dem Schlauch wie beim Patch?


Bis morgen

Dirk

von Michael B. (bubi)


Lesenswert?

Hier,

http://www.mikrocontroller.net/articles/AVR32_Grasshopper
:) leider ned grad mehr Zeit
aber AVR-Freaks und das hier sind eigentlich sehr hilfreich NGW100 und 
Grasshopper sind von der "Methode" ident, musst nur mit den Adressen 
aufpassen.

von Dirk S. (fusebit)


Lesenswert?

So, hier noch eine Abschlussbemerkung:

Das booten über NFS mit U-Boot wie im Artikel beschrieben klappt 
einwandfrei.

Allerdings finde ich das es komplizierter beschrieben ist als es 
wirklich ist.

Meine Kurzfassung:

mount -o loop rootfs.avr32.ext2 /mnt auf dem Server durchführen
/mnt für NFS freigeben

Auf dem Grashüpfer den Bootvorgang abbrechen und folgendes machen:
set ipaddr xxx.xxx.xxx.xxx
set serverip xxx.xxx.xxx.yyy
nfs 11000000 xxx.xxx.xxx.yyy:/mnt/boot/uImage
bootm

und schon läuft es :-)

Vielen Dank an alle, jetzt folgen Tastatur und Display...

von Michael B. (bubi)


Lesenswert?

Genau ist richtig so:

mit root=nfs nfsroot=10.10.10.1:/nfs/root holst du dir halt noch dein 
komplettest Filesystem via NFS, so wie du es beschreibst bootest du nur 
den Kernel, neue Prorgramme die du mit buildroot einbaust erscheinen so 
nicht, sondern müssen trotzdem ins Flash geschrieben werden. Mountest du 
das RootFS aber direkt über NFS hast du Zugriff auf alle Datein vom PC 
und vom Grasshopper aus, ganz praktisch um mal eine Datei hin und her zu 
kopieren.

Michael

von Dirk S. (fusebit)


Lesenswert?

Moin Leute,

einmal muss ich noch :-) Du hast vollkommen recht Michael, die 
Startsequenz muss wie folgt aussehen:
1
set ipaddr 192.168.1.100
2
set serverip 192.168.1.101
3
setenv bootargs root=nfs nfsroot=192.168.1.101:/mnt ip=192.168.1.100:192.168.1.101::255.255.255.0::eth0:none
4
nfs 11000000 192.168.1.101:/mnt/boot/uImage
5
bootm

Sonst funktioniert es nicht richtig...

von Michael B. (bubi)


Lesenswert?

Genau,

Du kannst dir übrigens die bootargs speichern
mit saveenv(?) dann bootet er automatisch hoch bzw mit dem befehl 
"bootm", das andere kannst dir ja aufschreiben, für spätereinmal (und 
hier posten weil ich meine versehntlich überschrieben hab ohne 
aufzuschreiben :D)

Schöne Grüße
Michael

von Dirk S. (fusebit)


Lesenswert?

Moin Michael,

besser spät als nie, Du wolltest doch die Bootargs wissen:
1
ICnova> printenv
2
3
4
bootcmd=mtdparts default;chpart nor0,2;fsload /boot/uImage;bootm ${fileaddr}
5
6
bootdelay=3
7
8
baudrate=115200
9
10
ethact=macb0
11
12
ethaddr=00:1F:E5:00:00:FD
13
14
stdin=serial
15
16
stdout=serial
17
18
stderr=serial
19
20
bootargs=root=nfs nfsroot=192.168.1.101:/mnt ip=192.168.1.100:192.168.1.101::255.255.255.0::eth0:none
21
22
filesize=150226
23
24
fileaddr=11000000
25
26
ipaddr=192.168.1.100
27
28
serverip=192.168.1.101
29
30
31
32
Environment size: 365/65532 bytes

Grüße

Dirk

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.