Das Elektor-Forum schließt seine Pforten (siehe auch http://www.elektormagazine.de/forum). Ab Freitag, den 01. März, ist es nicht mehr möglich, sich im Forum einzuloggen. Alle Inhalte des Forums bleiben jedoch bis Ende März noch sichtbar. Am 01. April wird das Forum schließlich komplett geschlossen.

Elektor 11-2013 Entwickeln mit Embedded Linux

Postby ag » Sun Oct 20, 2013 12:00 am

Wer die vorgefertigte virtuelle Maschine vom Elektor verwendet, kann beim Versuch Eclipse aufzurufen, die unten gezeigte Fehlermeldung ("A Java Runtime Environment (JRE) or Java Development Kit (JDK) must be available in order to run Eclipse. No Java virtual machine was found after searching the following locations: /home/elector/eclipse/jre/bin/java java in your current PATH") bekommen. Wie mir der Autor mitteilte, kann dies mit folgende zusätzliche Kommando behoben werden:

sudo apt-get install openjdk-7-jre icedtea-7-plugin

Danach läßt sich Eclipse wie im Artikel beschrieben starten.

Viele Grüße,
Ag
Attachments
JavaFehler.jpg
Ag
ag
 
Posts: 533
Joined: Thu Jan 02, 2014 10:37 am

Postby ag » Sat Oct 26, 2013 12:00 am

Erfahrungsbericht Teil 2:

Wer, wie ich, Anfänger ist mit Eclipse, hat möglicherweise auch Probleme mit der im Artikel befindliche Anleitung. Es folgen Hinweise aus meiner Erfahung damit, die vielleich für Andere auch hilfreich sein könnten.

Nachdem ich Java auf der VirtualBox installierte und Eclipse erfolgreich starten konnte, bin ich über ein Paar weitere Stolpersteine gestolpert.

Als erstes, steht man vor der Wahl zwischen der Text im Artikel stehende "wählt anschließend Executable -> Hello World C++ " oder die dazu entsprechendes Bild 5 angezeigte Executable -> Empty Project - Empty Project ist die richtige Wahl.

Es folgt dann ein Fenster die im Artikel nicht erwähnt wird: "Select Configurations". Hier habe ich die vorbelegte Auswahl von Debug und Release unverändert belassen und einfach "Next" ausgewählt. Das war richtig.

Als es dann darum ging mit git ein Klon von gnublin-api zu erstellen, war meine Konsole noch durch Eclipse belegt. Anstatt eine neue Konsole zu öffnen (wäre besser gewesen), habe ich es befreit indem ich Eclipse beendete. Nachdem der Klon erstellt war und ich dann Eclipse wieder startete, hatte ich Schwierigkeiten den "Project Explorer" zu finden. Es kann über Menupunkt Window->Show View->Project Explorer eingeblendet werden.

Nun konnte ich die Datein gnublin.h und gnublin.cpp wie im Bild 7 gezeigt importieren und die im Listing 1 aufgeführte Programmzeilen in eine neue Quellcode-Datei erfassen. Leider habe ich beim übersetzen ("Hammer" betätigen) etliche Fehlermeldungen bekommen, die ich zunächst weder verstanden hat noch lösen konnte, z.B. "Method digitalWrite could not be resolved". Nach ein Paar fehlgeschlagene Lösungsvorschläge vom Autor, machte er mir schließlich den Vorschlag, eine Gnublin Live CD zu erstellen, wo alles schon fertig eingerichtet ist, inklusive Beispiel. Immer vom Live CD booten zu müssen war für mich keine zufriedenstellende Alternativ, weshalb ich die heruntergeladene ISO verwendete um ein neue VirtualBox Installation einzurichten. Nachdem die neue VB "Gnublin Live CD" fertig war, konnte ich durch vergleichen zwischen mein Projekt und dem darin enthaltene Beispiel "LedBlink" die Probleme nun folgendermaßen beheben:

1) Die Quellcode-Datei muss unbedingt eine .cpp Endung bekommen. Ich hatte dummerweise die Endung .c verwendet.

2) Listing 1 Enthält ein Syntaxfehler: int main ( statt int main( . Es darf also kein Leerzeichen zwischen "main" und die danachfolgende "(" geben - für geübte C++ Programmierer sicherlich leicht erkennbar, für uns noobs nicht ganz so offensichtlich (der Autor hat es schließlich auch nicht erkannt, der Elektor Editor offenbar auch nicht).

Nun kann ich ohne Fehler übersetzen und weitermachen.

Viele Grüße,
Ag
Ag
ag
 
Posts: 533
Joined: Thu Jan 02, 2014 10:37 am

Postby ag » Sat Nov 02, 2013 12:00 am

Liebe Mitstreiter,

Nun wollte ich die neue Entwicklungsumgebung für das Elektor Embedded Linux verwenden um weiterzukommen mit eine meine laufende Projekte: ich möchte ein ADE7754 verwenden, um Energiewerte aus eine bestehende Photovoltaik Anlage auszulesen. Ich habe die Treiber dafür gefunden in der Linux/arm 3.3.0 Kernel Configuration unter Device Drivers->Staging drivers->Industrial I/O support->Active energy metering IC. Daher erzeugte ich eine neue 3.3.0 Kernel Image und verwendete die gnublin-installer um diese eine SD Karte mit dem neue Debian Dateisystem zu installieren. Mit

make modules


und

elektor@elektor-VirtualBox:~/gnublin-develop-kernel/linux-3.3.0-lpc313x$ make INSTALL_MOD_PATH=/tmp modules_install


und

elektor@elektor-VirtualBox:/tmp$ ls
keyring-M8TD6K lib pulse-6jgaWBNtjhtn pulse-PKdhtXMmr18n SDCard ssh-RhaLrTgC1326
elektor@elektor-VirtualBox:/tmp$ sudo cp -R lib /media/Gnublin


habe ich die neue 3.3.0 Module erzeugt und auf die SD Karte übertragen.

Zu meine Freude, schien alles auf Anhieb geklappt zu haben. Der neue SD Karte mit 3.3.0 Kernel bootet auf dem Gnublin ohne Probleme. Leider reagiert gnublin auf

modprobe ade7754

mit "FATAL Module ade7754 not found" obwohl das Modul offenbar doch vorhanden ist:

Starting portmap daemon....
Cleaning up temporary files....
Setting sensors limits.
Setting kernel variables ...done.
INIT: Entering runlevel: 2
Using makefile-style concurrent boot in runlevel 2.
Starting portmap daemon...Already running..
Starting enhanced syslogd: rsyslogd.
Starting system message bus: dbus.
Starting OpenBSD Secure Shell server: sshd.

Debian GNU/Linux 6.0 gnublin ttyS0

gnublin login: root
Last login: Thu Jan 1 00:02:11 UTC 1970 on ttyS0
Linux gnublin 2.6.33-gd53073b #2 Fri Sep 6 19:30:12 CEST 2013 armv5tejl

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

(störende "Welcome to GNUBLIN Debian" Textgitter herausgeschnitten)





root@gnublin:~# find / -name asix*
/lib/modules/2.6.33-gb6eb63b-dirty/kernel/drivers/net/usb/asix.ko
/lib/modules/3.3.0/kernel/drivers/net/usb/asix.ko
/lib/modules/2.6.33-g47a5c90-dirty/kernel/drivers/net/usb/asix.ko
/lib/modules/2.6.33-gd53073b/kernel/drivers/net/usb/asix.ko
root@gnublin:~# find / -name ade7754*
/lib/modules/3.3.0/kernel/drivers/staging/iio/meter/ade7754.ko
root@gnublin:~# modprobe ade7754
FATAL: Module ade7754 not found.


Wenn ich mir dmesg ansehe, finde ich das offenbar noch immer der 2.6.33 Kernel geladen ist, z.B. beim asix Modul:

Pid: 0, comm: swapper
CPU: 0 Not tainted (2.6.33-gd53073b #2)
PC is at default_idle+0x2c/0x30
LR is at default_idle+0x20/0x30
pc : [ ] lr : [ ] psr: 60000013
sp : c0373fb8 ip : 600000d3 fp : 00000000
r10: 30020704 r9 : 41069265 r8 : 30020738
r7 : c0375be8 r6 : c0396444 r5 : c0375d48 r4 : c0372000
r3 : 60000013 r2 : 0005217f r1 : 0005317f r0 : 00000000
Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment kernel
Control: 0005317f Table: 30698000 DAC: 00000017
bus: 'usb': add driver asix
usbcore: registered new interface driver asix
BUG: soft lockup - CPU#0 stuck for 178s! [swapper:0]
Modules linked in: asix mii


Das kann ich mir nicht erklären, denn ich habe die 2.6.33 zImage durch die neue 3.3.0 zImage auf die SD Karte mit dem gnublin-installer ausgetauscht.

Kann mir eine sagen, was ich dabei übersehen habe?

Ich habe nochmals make clean, make menuconfig, make zImage, make modules, make INSTALL_MOD_PATH, kopieren zImage auf die SD-Karte, kopieren /tmp/lib auf die SD-Karte, alles wiederholt. Dabei werden keine Fehlermeldungen ausgegeben, und gnublin bootet DEFINITIV mit dem neu erstellten zImage. Warum meldet sich ein mit 3.3.0 Kernel Configuration erstellte zImage beim booten als 2.6.33???

root@gnublin:/# ls
bin etc lost+found opt sbin swapfile usr
boot home media proc setup_log.txt sys var
dev lib mnt root srv tmp zImage
root@gnublin:/# ls -lisa
total 67472
2 4 drwxr-xr-x 20 root root 4096 Jan 1 00:00 .
2 4 drwxr-xr-x 20 root root 4096 Jan 1 00:00 ..
27462 4 -rwxr-xr-x 1 1000 1000 68 Sep 29 2013 .directory
15809 4 drwxr-xr-x 2 root root 4096 Jan 1 00:04 bin
7910 4 drwxr-xr-x 2 root root 4096 Feb 18 2013 boot
112 0 drwxr-xr-x 6 root root 2580 Jan 1 00:01 dev
7914 4 drwxr-xr-x 67 root root 4096 Jan 1 00:00 etc
7915 4 drwxr-xr-x 2 root root 4096 Feb 18 2013 home
7911 4 drwxr-xr-x 9 root root 4096 Jan 1 00:38 lib
11 16 drwx------ 2 root root 16384 Sep 29 2013 lost+found
31618 4 drwxr-xr-x 2 root root 4096 Sep 29 2013 media
7916 4 drwxr-xr-x 2 root root 4096 Feb 18 2013 mnt
7908 4 drwxr-xr-x 2 root root 4096 Jan 1 00:00 opt
1 0 dr-xr-xr-x 37 root root 0 Jan 1 00:00 proc
7913 4 drwx------ 5 root root 4096 Jan 1 00:05 root
31617 4 drwxr-xr-x 2 root root 4096 Sep 29 2013 sbin
12 4 -rw-r--r-- 1 root root 40 Jan 1 00:01 setup_log.txt
7906 4 drwxr-xr-x 3 root root 4096 Jan 1 00:10 srv
13 65536 -rw-r--r-- 1 root root 67108864 Jan 1 00:00 swapfile
1 0 drwxr-xr-x 11 root root 0 Jan 1 00:00 sys
7905 4 drwxrwxrwt 2 root root 4096 Jan 1 00:00 tmp
7917 4 drwxr-xr-x 11 root root 4096 Jan 1 00:00 usr
7909 4 drwxr-xr-x 15 root root 4096 Jan 1 00:00 var
27478 1848 -rwxr-xr-x 1 root root 1891848 Nov 2 2013 zImage
root@gnublin:/# uname -r
2.6.33-gd53073b
root@gnublin:/#



Vielen Dank und viele Grüße
Ag
Attachments
11.1.png
Ag
ag
 
Posts: 533
Joined: Thu Jan 02, 2014 10:37 am

Postby ag » Sun Nov 03, 2013 12:00 am

Erfahrungbericht Teil 3

Nun, es hat mich eine ganze Wochenende gekostet, aber ich habe endlich die Ursache des Phänomens herausgefunden. Es lag am gnublin-installer.

Wenn man denkt, man könnte mit den Einstellungen: Bootloader-do not change, RootFS-do not change, und Kernel-use file (siehe Screenshot) eine eigene, z.B. Kernel Version 3.3.0, zImage-Datei auf die SD-Karte übertragen, irrt man sich! Anstatt die ausgewählte zImage Datei, wird eine 2.6.33 Version von gnublin.org geladen, zusammen mit den dazu passende 2.6.33 Modules Unterverzeichnis.

Also nicht dazu verwenden! Stattdessen, auf die alte harte Methode kopieren mit

sudo cp arch/arm/boot/zImage /media/Kernel

dann klappt es.

Sollte man vielleicht auch noch korrigieren!

Viele Grüße,
Ag
Attachments
02.png
Ag
ag
 
Posts: 533
Joined: Thu Jan 02, 2014 10:37 am

Postby sauterbe » Mon Nov 04, 2013 12:00 am

ah danke wir prüfen das umgehend.
sauterbe
 
Posts: 7
Joined: Thu Jan 02, 2014 10:43 am

Postby ag » Tue Nov 05, 2013 12:00 am

Wollte ein Backup von der SD-Karte mit gnublin-installer erstellen. Es ist mir nicht gelungen ("ERROR read in file" - siehe Screenshots)

Wollte Anleitung zur gnublin-installer finden. Es gibt eine Video für SD-Karte neu erstellen, aber ich fand nichts über das Backup.

Ist der gnublin-installer bezüglich Backup Funktionalität fehlerhaft, Version abhängig, limitiert, oder habe ich was falsches gemacht?

Vielen Dank und viele Grüße,
Ag
Attachments
35.png
36.png
Ag
ag
 
Posts: 533
Joined: Thu Jan 02, 2014 10:37 am

Postby ag » Sun Nov 10, 2013 12:00 am

Aller Anfang ist schwer!

nachdem ich endlich mein gnublin mit Kernel Version 3.3.0 (wegen erweiterte Treiber Support, insbesondere ade7754) am laufen bekommen habe, wollte ich mit Eclipse damit ganz einfach anfangen

/*
* Ade7754Demo.c
*
* Created on: Nov 10, 2013
* Author: elektor
*/
#include "ade7754.h"
int main(int argc, char **argv)
{
while(1){
;
}
}


Dazu habe ich ade7754.c und ade7754.h aus dem gleichen Verzeichnis importiert, die beim generieren der 3.3.0 zImage mit make menuconfig verwendet wurden. Beim kompilieren bekomme ich folgende Fehlermeldungen

DescriptionResourcePathLocationType
expected :', ',', ';', '}' or '__attribute__' before '____cacheline_aligned'ade7754.h/Ade7754Test/srcline 88C/C++ Problem
DescriptionResourcePathLocationType
field buf_lock' has incomplete typeade7754.h/Ade7754Test/srcline 87C/C++ Problem
DescriptionResourcePathLocationType
make: *** [src/Ade7754Demo.o] Error 1Ade7754Test C/C++ Problem
DescriptionResourcePathLocationType
Type u8' could not be resolvedade7754.h/Ade7754Test/srcline 89Semantic Error
DescriptionResourcePathLocationType
unknown type name u8'ade7754.h/Ade7754Test/srcline 88C/C++ Problem


Hier die angemeckerte Zeilen aus ade7754.h:


struct ade7754_state {
struct spi_device*us;
struct mutexbuf_lock;
u8tx[ADE7754_MAX_TX] ____cacheline_aligned;
u8rx[ADE7754_MAX_RX];
};


Was ich nicht verstehe: der Treiber hat sich doch ohne Fehlermeldung im Kernel statisch einbinden lassen...

Elektor GNUBLIN ELDK (Built by Poky 5.0) 5.0 gnublin ttyS0
http://www.gnublin.org

gnublin login: root
root@gnublin:~# uname -r
3.3.0+
root@gnublin:~# grep ade7754 /lib/modules/$(uname -r)/modules.builtin
kernel/drivers/staging/iio/meter/ade7754.ko
root@gnublin:~#


... und trotzdem wenn ade7754.h in Eclipse importiert ist, kennt es so eine grundliegende Typ wie u8 nicht:;

Kann mir eine hier helfen? Was muss noch importiert werden, um solche generische Typen für Eclipse erkennbar zu machen?

Vielen Dank und viele Grüße,
Ag
Attachments
09.3.png
39.1.png
Ag
ag
 
Posts: 533
Joined: Thu Jan 02, 2014 10:37 am

Postby ag » Mon Nov 11, 2013 12:00 am

Na gut! Ich habe bei kerneldox.com/kdox-linux/ das Tool "Linux Kernel Doxygen" gefunden, was mir auf sehr benutzerfreundliche Weise den Pfad zur "types.h" aufzeigt. Nach dem Import und Einbinden ...

/* * Ade7754Demo.c * *  Created on: Oct 27, 2013 *      Author: elektor */#include "types.h"#include "ade7754.h"int main(int argc, char **argv){while(1){;}}


... sind die u8 Typenfehler beseitigt Es bleibe nur noch den Syntaxfehler wegen "____cacheline_aligned" übrig:

DescriptionResourcePathLocationType
make: *** [src/Ade7754Demo.o] Error 1Ade7754Test C/C++ Problem
field buf_lock' has incomplete typeade7754.h/Ade7754Test/srcline 87C/C++ Problem
expected :', ',', ';', '}' or '__attribute__' before '____cacheline_aligned'ade7754.h/Ade7754Test/srcline 88C/C++ Problem


Hier hat Doxygen keine Hilfe geboten Es wäre meine Erachtens nicht richtig, Veränderungen am ade7754.h vorzunehmen. Ich denke, es muss eine andere, richiger Weg geben, den Syntaxfehler zu behandeln. Hat jemand eine Idee?

Vielen Dank und viele Grüße,
Ag
Ag
ag
 
Posts: 533
Joined: Thu Jan 02, 2014 10:37 am

Postby ag » Wed Nov 13, 2013 12:00 am

Ok, entschuldige dass ich ein blutiger Anfänger bin Aus pure Verzweifelung und mangels Ideen, habe ich einfach ein C++ Programm daraus gemacht. Das hat das Problem nicht gelöst, aber die C++ Meldungen waren ausführlicher und half mir doch noch in Doxygen einen Anhaltspunkt zur Problemlösung zu finden - cache.h:

Da aber cache.h in sich wiederum ein include auf asm/cache.h beinhaltet, führte diese zu ein neues Problem - ich kann im Programm nur einmal ein include auf ein cache.h deklarieren, und Umbennen hilft auch nicht:

 */* * ADE7754Test.cpp *  Created on: Nov 12, 2013 *      Author: elektor */#include "types.h"#include "kernel.h"#include "cache.h"#include "my_cache.h"#include "ade7754.h"int main(int argc, char **argv){while(1){;}}



DescriptionResourcePathLocationType
fatal error: asm/cache.h: No such file or directory /ADE7754_CPP/srcline 5C/C++ Problem
make: *** [src/ADE7754Test.o] Error 1ADE7754_CPP C/C++ Problem


Abermals am verzweifeln, habe ich cache.h nach cache_ag.h kopiert, import von cache.h in Eclipse durch cache_ag.h ersetzt, asm/cache.h aus dem entsprechenden anderem Verzeichnis importiert, und das Programm angepasst:

/* * ADE7754Test.cpp * *  Created on: Nov 12, 2013 *      Author: elektor */#include "types.h"#include "kernel.h"#include "cache.h"#include "cache_ag.h"#include "ade7754.h"int main(int argc, char **argv){while(1){;}}


Nutzt auch nichts - gleicher Fehler

DescriptionResourcePathLocationType
fatal error: asm/cache.h: No such file or directory /ADE7754_CPP/srcline 5C/C++ Problem
make: *** [src/ADE7754Test.o] Error 1ADE7754_CPP C/C++ Problem


Eclipse erlaubt nicht eine Umbennung eines importieres Headerfile mit eine "/" im Namen (siehe Screenshot)

Lasse ich asm/cache.h aus cache_ag.h raus:

/* * ADE7754Test.cpp * *  Created on: Nov 12, 2013 *      Author: elektor */#include "types.h"#include "kernel.h"/*#include "cache.h"*/#include "cache_ag.h"#include "ade7754.h"int main(int argc, char **argv){while(1){;}}


bekomme ich Fehler wegen die darin enthaltene,nun fehlende Deklaration für L1_CACHE_BYTES:

DescriptionResourcePathLocationType
L1_CACHE_BYTES' was not declared in this scopeade7754.h/ADE7754_CPP/srcline 88C/C++ Problem
requested alignment is not a constantade7754.h/ADE7754_CPP/srcline 88C/C++ Problem
field buf_lock' has incomplete typeade7754.h/ADE7754_CPP/srcline 87C/C++ Problem
make: *** [src/ADE7754Test.o] Error 1ADE7754_CPP C/C++ Problem


Ich fürche dass ich ohne Hilfe aus diesem Teufelskreis nicht heraus komme Kann mir jemand erklären, was ich hier falsche mache?

Vielen Dank und viele Grüße,
Ag
Attachments
25.png
Ag
ag
 
Posts: 533
Joined: Thu Jan 02, 2014 10:37 am


Return to Elektor-Mikrocontroller-Forum

Who is online

Users browsing this forum: No registered users and 1 guest