Forum: Mikrocontroller und Digitale Elektronik AVR32 NGW100 - Linux Setup


von THaala (Gast)


Lesenswert?

Hallo NGW100 - Fans,

ich weiß nicht so Recht ob ich mich als Fan des NGw100 bezeichnen soll - 
aber die HW finde ich gut und ein lauffähiges Linux incl. 
Entwicklungsumgebung findet man nicht so oft für Lau. Allerdings scheint 
die Linux - Entwicklung für die AVR-Freaks Gemeinde eher ungewohnt zu 
sein - nachdem ich ein paar mal Posts eingstellt habe stelle ich fest 
das dieses Forum für Linux - Probleme eher ungeignet ist. Zudem sind die 
relevanten Informationen heftig zerfleddert im Internet unterwegs.... 
man findet mal hier mal da eine wichtige Zeile oder Problemlösung.

Mein Ziel:
Ich möchte gerne auf einer günstigen Default - Plattform mit maximal 
einer einfachen Erweiterungsplatine ein HDLC -> UDP Gateway aufbauen. 
Ist nicht ganz so einfach, da HDLC unter Linux nicht so richtig 
eingepflegt ist und normalerweise Spezial-HW verlangt, da oft 
synchronbetrieb mit zusätzlichen V24 - Taktsignalen plus Bit-Stuffing 
usw.... ich will euch nicht langweilen.

Was soll das hier:
Ich habe in den letzten Wochen intensiv versucht die Cross 
Entwicklungsumbgebung aufzubauen und bin nun endlich so weit, das ich 
per Network - Boot (ohne weiteres flashen der on board Speicher) 
entwickeln kann. Das Setup dazu möchte ich hier veröffentlichen (evtl 
hilft es ja jemand..)

Was erhoffe ich mir:
Ganz einfach - vielleicht muss ich nicht immer jedes auftretende Problem 
in meiner Kammer lösen.

Als erstes habe ich mal das NGW 100 amit dem eth1 - Anschluss (Eth-Port 
in der Mitte des Boards) mit DHCP angeschlossen.
Achtung zuerst muss das NGW100 gebootet sein erst dann kann ein Windows 
- System per DHCP eine Addresse erhalten (oder eben den Eth-Schnüffel 
zeihen und wieder stecken).

Ist eine Addresse bezogen worden kann man auf www.example.net mit dem 
HTTP - Krempel spielen. Mittels telnet auf 10.0.0.1 oder über die 
serielle Schnittstelle mit 115200 Baud kann man nun erst mal die
Netzwerk - Geschichten auf seine Bedürfnisse anpassen. Mir ist es lieber 
ein paar festgelegte Adressen zu vergeben statt andauernd mit 
symbolischen Namen zu hantieren. Ist einfach nur eine Fehlerquelle 
weniger.

Also hier das ToDo für eine Fixe IP - Adresse. In Datei 
/etc/network/Interfaces die Zeilen .-
1
  #iface eth0 inet dhcp
2
  auto eth0
3
  iface eth0 inet static
4
          address 10.1.246.30
5
          netmask 255.255.255.0
6
          gateway 10.1.246.1
einsetzen
Dabei ist 10.1.246.30 die Adresse des NGW100 (auf ETH0)
Das Default Gateway zum Internet ist 10.1.246.1

Die Datei /etc/hosts sollte jetzt noch den eigenen Namen verpasst 
bekommen:
1
  10.1.246.30    ngw.example.net ngw100
am besten auch gleich unter windows die Dateien 
WINDOWS\SYSTEM32\DRIVERS\ETC\HOSTS und LMHOSTS
genauso anpassen. Jetzt noch den link /etc/resolv.conf löschen und 
stettdessen eine Datei resolv.conf einfügen mit dem Inhalt:
1
  nameserver 10.1.246.1
Das ist die Addresse meiner Fritzbox und damit auch der DNS - Proxy zum 
auflösen von symbolischen Namen.

Und da wir gerade dabei sind im Verzeichnis /etc herumzuwursteln stellen 
wir doch auch noch den FTP Server so ein dass er keine Probleme mit dem 
AVR32 Studio 2.1 macht. Man setze Die Zeile:
1
  "RootLogin on"
ein. Dies Erlaubt auch dem root user ein FTP connect. Übrigens wenn man 
schon mal selbst "geflasht hat" sprich -> es ist nicht mehr die Original 
Konfiguration drin - scheint das Passwort von roota auf root zu 
wechseln.

Über die Datei /etc/exports erlaube ich außerdem den Zugriff mittels nfs 
über die Zeile:
1
  /nfs 10.1.246.0/255.255.255.0(rw,sync,no_root_squash)
Zum Schluß habe ich noch eine 2GB - SD Karte con Sandisk eingesteckt. 
Diese mounte ich per default beim Aufstarten
zum Mountpoint /mnt/sdcard mit Hilfe der zusätzlichen Zeile in 
/etc/fstab:
1
  /dev/mmcblk0p1  /mnt/sdcard  ext2    defaults  0  0
Will man Remote debuggen empfielt es sich das default Home Verzeichnis 
auf dem NGW100 /home/avr32 noch mit chmod 0755 so zu beeinflussen, das 
keine Rechteproblematiken auftreten können.

Nun Zum U-Boot:
Ich habe die neueste Version geflasht:
  U-Boot 1.3.4-atmel.buildroot.1 (Feb  8 2009 - 15:09:28)

weiterhin sind folgende SETS erforderlich:
1
  serverip=10.1.246.21
2
  tftpip=10.1.246.21
3
  tftpserver=10.1.246.21
4
  ipaddr=10.1.246.30
5
  ethact=macb0
6
  ethaddr=00:00:04:25:50:B3
7
8
  bootcmd=set ipaddr 10.1.246.30;tftp 0x10400000 uImage;bootm
9
  bootargs=>root=/dev/nfs nfsroot=10.1.246.21:/home/avr32/nfs ip=10.1.246.30::10.1.246.21:::eth0:off console=ttyS0
Ich versuche zu Erklären was ich kann! Die "serverip" ist mein 
Entwicklungs-Rechner. (Natürlich ist das nicht die wahre Adresse sondern 
die Adresse der Ubuntu - VMware! Auf diesem arbeitet ein Tftp - Deamon, 
der das booten der uImage - Datei erlaubt. "Tftpip", "tftpserver" ist 
für den TFTP - Client wichtig.  Die "ipaddr" ist die IP Adresse des 
NGW100.
"ethact" ist die Beschreibung des ETH - Ports der zum Booten benutzt 
werden soll. "ethaddr" ist die MAC addresse dieses ETH - Ports. Die 
Mac-Addresse ergibt sich aus der Formel:
1
00:00:04:25:1C:50 + seriennummer des Boards * 2 (+1 für MACB)
2
  Bei Mir: 6205 * 2 = 13410 -> 0x3462 + 1C50 = 50B2 + 1 = 50:B3 (alles klar ?)
"bootcmd" setzt Informationen für U-Boot wo denn das Image zu finden ist 
und wohin es intern geladen wird. Achtung: Die Zeile für bootargs ist 
für einen SET - Befehl zu lang. Daher benutzt bitte askenv bootargs, 
(achtet auf das ">" - Zeichen - es ist kein Tippfehler) dann die Zeile 
eintippen. Ich kann diese Zeile nicht komplett interpretieren.

So jetzt muß noch das Entwicklungssystem angepasst werden.
Ich habe versucht das ganze unter Windows zu machen weil ich eigentlich 
nicht einsehe das die Entwicklungsumgebung auch auf Linux stattfinden 
soll. Das habe ich aber nach einigen Mühen aufgegeben. Das ist eine 
einzige Katastrophe. Daher habe ich die BSP - Ubuntu VmWare zum laufen 
gebracht und folgende Modifikationen vorgenommen:

1. Fixe IP Adresse: zu Ändern über System->Administration->Network
Hier fixen DNS eintragen 10.1.246.1 und die static address 
10.1.246.21/255.255.255.0 default-gw 10.1.246.1 eingeben.

Als TFTP Deamon wird der tftpd-hpa genutzt. Ich kann mich nicht mehr 
entsinnen ob der schon drauf war oder nicht. Wenn nicht ... die Ubuntu - 
Hilfe zum installieren benutzen. Man sollte diesen Deamon dann finden 
unter System->Administration->Services (ebenso wie der 
nfs-kernel-server)

Das init - File liegt in /etc/default/tftpd-hpa hier solte stehen:
1
  #Defaults for tftpd-hpa
2
  RUN_DAEMON="yes"
3
  OPTIONS="-l -s /home/avr32/tftpboot"
Dann legt auch bitte den zu bootenden uImage da in das Verzeichnis 
/home/avr32/tftpboot!!!!!

Jetzt NFS einrichten! In /etc/exports folgende Zeile ändern/ergänzen:
1
  /home/avr32/nfs 10.0.0.0/255.0.0.0(rw,sync,no_root_squash)
und auch noch dem ngw100 einen symbolischen namen verpassen - 
/etc/hosts:
1
10.1.246.30 ngw100

Es sollte jetzt ein Verzeichnis /home/avr32/nfs angelegt werden unter 
dem das komplette Root des Host-Systems eingerichtet ist. Dazu am besten 
das aktuelle Buildroot von atmel.no herunterladen. Dann den 
rootfs.avr32.tar.bz2 auspacken. Am besten ind das Verzeichnis nfs 
wechseln und folgende zeile aufrufen:
1
tar xvfj ../download/rootfs.arv32.tar.bz2
In /home/avr32/download liegt mein Buildroot - Download...
Jetzt ist das Filesystem da, alldings gab es Fehler beim entpacken.
Es fehlen zwei Datein im dev - Verzeichnis. Die müssen nun zu Fuß 
angelegt werden. Also mit -
1
  cd dev
2
  sudo mknod -m 666 null c 1 3
3
  sudo mknod -m 666 console c 5 1
Kommandos die fehlenden Dateien erzeugen.
Am besten ihr kopiert jetzt noch das uImage aus boot in 
../tftpboot/uImage (man könnte ja auch das tftp - Verzeichnis gleich auf 
/home/avr32/nfs/boot zeigen lassen) ich trau mich nur nicht im moment 
Änderungen vorzunehmen. Zum Schluss solltet Ihr Rechteproblematiken 
auschließen indem Ihr die Verzeichnisse allen zugänglich macht mittels:
1
  sudo chmod -R 0755 nfs
2
  sudo chmod -R 0755 tftpboot

Wenn Ihr jetzt die VMware mal neu startet sollten alle Dienste laufen 
und einem Reboot des NGW100 steht nichts mehr entgegen. Ihr solltet 
natürlich eure IP nummern verwenden.

Hier mein output der console:
1
U-Boot 1.3.4-atmel.buildroot.1 (Feb  8 2009 - 15:09:28)
2
3
4
5
U-Boot code: 00000000 -> 00011108  data: 000179e8 -> 0004e300
6
7
CPU: 140 Mhz HSB: 70 MHz PBA: 35 MHz PBB: 70 MHz
8
9
malloc: Using memory from 0x11f71000 to 0x11fb1000
10
11
DMA: Using memory from 0x11f6d000 to 0x11f71000
12
13
Flash:  8 MB at address 0x00000000
14
15
DRAM Configuration:
16
17
Bank #0: 10000000 32 MB
18
19
In:    serial
20
21
Out:   serial
22
23
Err:   serial
24
25
Net:   macb0, macb1
26
27
Press SPACE to abort autoboot in 1 seconds
28
29
macb0: Starting autonegotiation...
30
31
macb0: Autonegotiation complete
32
33
macb0: link up, 100Mbps full-duplex (lpa: 0x45e1)
34
35
Using macb0 device
36
37
TFTP from server 10.1.246.21; our IP address is 10.1.246.30
38
39
Filename 'uImage'.
40
41
Load address: 0x10400000
42
43
Loading: #################################################################
44
45
         #####################
46
47
done
48
49
Bytes transferred = 1252234 (131b8a hex)
50
51
## Booting kernel from Legacy Image at 10400000 ...
52
53
   Image Name:   Linux-2.6.27.6.atmel.1
54
55
   Image Type:   AVR32 Linux Kernel Image (gzip compressed)
56
57
   Data Size:    1252170 Bytes =  1.2 MB
58
59
   Load Address: 10000000
60
61
   Entry Point:  90000000
62
63
   Verifying Checksum ... OK
64
65
   Uncompressing Kernel Image ... OK
66
67
68
69
Starting kernel at 90000000 (params at 11f71008)...
70
71
72
73
Linux version 2.6.27.6.atmel.1 (avr32@avr32-desktop) (gcc version 4.2.2-atmel.1.
74
1.3.buildroot.1) #1 Sat Feb 14 20:47:43 CET 2009
75
76
CPU: AT32AP700x chip revision C
77
78
CPU: AP7 [01] core revision 0 (AVR32B arch revision 1)
79
80
CPU: MMU configuration: Shared TLB
81
82
CPU: features: dsp simd ocd perfctr java
83
84
CPU: Running at 140.000 MHz
85
86
Physical memory:
87
88
  10000000-11ffffff
89
90
Reserved memory:
91
92
  10000000-1018180f: Kernel code
93
94
  10181810-102193e7: Kernel data
95
96
Exception vectors start at 90013000
97
98
CPU: Paging enabled
99
100
Node 0: start_pfn = 0x10000, low = 0x12000
101
102
Node 0: mem_map starts at 9021c000
103
104
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 8128
105
106
Kernel command line: >root=/dev/nfs nfsroot=10.1.246.21:/home/avr32/nfs ip=10.1.
107
246.30::10.1.246.21:::eth0:off console=ttyS0
108
109
PID hash table entries: 128 (order: 7, 512 bytes)
110
111
avr32_comparator: irq 0, 140.000 MHz
112
113
console [ttyS0] enabled
114
115
Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)
116
117
Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)
118
119
Memory: 30328k/30328k available (1466k kernel code, 2440k reserved, 111k data, 7
120
6k init)
121
122
SLUB: Genslabs=10, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
123
124
Calibrating delay using timer specific routine.. 281.84 BogoMIPS (lpj=563695)
125
126
Mount-cache hash table entries: 512
127
128
net_namespace: 756 bytes
129
130
smc smc.0: Atmel Static Memory Controller at 0xfff03400
131
132
NET: Registered protocol family 16
133
134
pdc pdc.0: Atmel Peripheral DMA Controller enabled
135
136
at32_eic at32_eic.0: External Interrupt Controller at 0xfff00100, IRQ 19
137
138
at32_eic at32_eic.0: Handling 4 external IRQs, starting with IRQ 64
139
140
AVR32 AP Power Management enabled
141
142
dw_dmac.0: DesignWare DMA Controller, 3 channels
143
144
NET: Registered protocol family 2
145
146
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
147
148
TCP established hash table entries: 1024 (order: 1, 8192 bytes)
149
150
TCP bind hash table entries: 1024 (order: 0, 4096 bytes)
151
152
TCP: Hash tables configured (established 1024 bind 1024)
153
154
TCP reno registered
155
156
NET: Registered protocol family 1
157
158
JFFS2 version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
159
160
msgmni has been set to 59
161
162
io scheduler noop registered
163
164
io scheduler cfq registered (default)
165
166
atmel_usart.0: ttyS0 at MMIO 0xffe01000 (irq = 7) is a ATMEL_SERIAL
167
168
MACB_mii_bus: probed
169
170
eth0: Atmel MACB at 0xfff01800 irq 25 (00:00:04:25:50:b3)
171
172
eth0: attached PHY driver [Generic PHY] (mii_bus:phy_addr=0:01, irq=-1)
173
174
macb macb.1: invalid hw address, using random
175
176
MACB_mii_bus: probed
177
178
eth1: Atmel MACB at 0xfff01c00 irq 26 (f6:25:3b:89:2a:ad)
179
180
eth1: attached PHY driver [Generic PHY] (mii_bus:phy_addr=1:03, irq=-1)
181
182
physmap platform flash device: 00800000 at 00000000
183
184
physmap-flash.0: Found 1 x16 devices at 0x0 in 16-bit bank
185
186
 Amd/Fujitsu Extended Query Table at 0x0041
187
188
number of CFI chips: 1
189
190
cfi_cmdset_0002: Disabling erase-suspend-program due to code brokenness.
191
192
RedBoot partition parsing not available
193
194
Using physmap partition information
195
196
Creating 3 MTD partitions on "physmap-flash.0":
197
198
0x00000000-0x00020000 : "u-boot"
199
200
0x00020000-0x007f0000 : "root"
201
202
0x007f0000-0x00800000 : "env"
203
204
atmel_spi atmel_spi.0: Atmel SPI Controller at 0xffe00000 (irq 3)
205
206
atmel_spi atmel_spi.0: Using bounce buffer at 0x24000000 len 4096
207
208
mtd_dataflash spi0.0: AT45DB642x (8448 KBytes) pagesize 1056 bytes
209
210
atmel_usba_udc atmel_usba_udc.0: MMIO registers at 0xfff03000 mapped at fff03000
211
212
213
atmel_usba_udc atmel_usba_udc.0: FIFO at 0xff300000 mapped at ff300000
214
215
at32ap700x_rtc at32ap700x_rtc.0: rtc core: registered at32ap700x_rtc as rtc0
216
217
at32ap700x_rtc at32ap700x_rtc.0: Atmel RTC for AT32AP700x at fff00080 irq 21
218
219
at32_wdt at32_wdt.0: AT32 WDT at 0xfff000b0, timeout 2 sec (nowayout=0)
220
221
atmel_mci atmel_mci.0: Atmel MCI controller at 0xfff02400 irq 28, 1 slots
222
223
Registered led device: sys
224
225
Registered led device: a
226
227
Registered led device: b
228
229
TCP cubic registered
230
231
Initializing XFRM netlink socket
232
233
NET: Registered protocol family 10
234
235
IPv6 over IPv4 tunneling driver
236
237
NET: Registered protocol family 17
238
239
NET: Registered protocol family 15
240
241
RPC: Registered udp transport module.
242
243
RPC: Registered tcp transport module.
244
245
cpufreq: AT32AP CPU frequency driver
246
247
at32ap700x_rtc at32ap700x_rtc.0: setting system clock to 1970-01-01 00:00:00 UTC
248
 (0)
249
250
mmc0: new SD card at address 6527
251
252
mmcblk0: mmc0:6527 SD02G 1921024KiB
253
254
 mmcblk0: p1
255
256
IP-Config: Guessing netmask 255.0.0.0
257
258
IP-Config: Complete:
259
260
     device=eth0, addr=10.1.246.30, mask=255.0.0.0, gw=10.1.246.21,
261
262
     host=10.1.246.30, domain=, nis-domain=(none),
263
264
     bootserver=255.255.255.255, rootserver=10.1.246.21, rootpath=
265
266
Looking up port of RPC 100003/2 on 10.1.246.21
267
268
eth0: link up (100/Full)
269
270
Looking up port of RPC 100005/1 on 10.1.246.21
271
272
VFS: Mounted root (nfs filesystem).
273
274
Freeing init memory: 76K (90000000 - 90013000)
275
276
277
init started: BusyBox v1.13.1 (2009-02-14 19:44:10 CET)
278
279
Mounting virtual filesystems:
280
281
  /proc mounted
282
283
  /sys mounted
284
285
  /dev mounted
286
287
  /dev/pts directory made
288
289
  /dev/pts mounted
290
291
  /dev/shm directory made
292
293
  /config mounted
294
295
  /tmp mounted
296
297
  /var/run mounted
298
299
  /var/log mounted
300
301
Setting up mdev: done
302
303
Setting hostname: 'ngw.example.net'
304
305
Starting syslogd: done
306
307
Log messages to syslog: done
308
309
Starting klogd: done
310
311
Probing modules:
312
313
Starting portmap: done
314
315
Mounting local filesystems: done
316
317
Network interfaces: done
318
319
Starting dnsmasq: done
320
321
Enable NAT:
322
323
  IPv4 forwarding: done
324
325
  iptables postrouting: done
326
327
  iptables incoming trafic: done
328
329
  iptables outgoung trafic: done
330
331
Starting telnetd: done
332
333
Starting inetd: done
334
335
Starting httpd: done
336
337
Running ntpdate: 14 Feb 22:18:40 ntpdate[329]: step time server 131.234.137.24 o
338
ffset 1234653500.793538 sec
339
340
done
341
342
Mounting remote filesystems: done
343
344
Starting network time protocol daemon: ntpd.
345
346
Starting dropbear sshd: OK
347
348
Starting ProFTPD: done
349
350
Starting SMB services: done
351
352
Starting NMB services: done
353
354
355
356
NGW100 ready
357
358
359
360
361
362
363
364
BusyBox v1.13.1 (2009-02-14 19:44:10 CET) built-in shell (ash)
365
366
Enter 'help' for a list of built-in commands.
367
368
369
370
~ #
Für heute Abend reicht es mir - den Remote Setup für ein Hello - World 
stelle ich morgen ein. Dann kommen auch meine Fragen......
THaala

von Peter D. (pdiener) Benutzerseite


Lesenswert?

Diese Informationen sind sehr hilfreich, wenn man häufig Änderungen am 
Kernel vornehmen möchte. Vielen Dank an dieser Stelle.

Ich bin gerade dabei, eine Anwendung für ein ngw100 zu schreiben. Das 
wird ein Gebäudeautomationssystem. Das Programm verwendet 3 serielle 
Schnittstellen, führt aufwändige Berechnungen von 
Visualisierungsgrafiken durch und muss trotzdem innerhalb von wenigen 
Millisekunden auf die seriellen Schnittstellen reagieren. Nun habe ich 
noch nicht herausgefunden, wie man interruptgesteuerte Empfangsroutinen 
für serielle Schnittstellen unter Linux schreibt.

Das wesentliche Problem ist das Erkennen der Paketgrenzen von der 
Datenübertragung am EIB (Europäischer Installationsbus), dabei ist eine 
Pause von etwa 40ms im Datenstrom der seriellen Schnittstelle zu 
detektieren. Ich bin nur noch nicht sicher, wie das zusammen mit den 
ganzen Puffern in Linux umzusetzen ist, dass die Pause wirklich sicher 
erkannt wird.

Grüße,

Peter

von THaala (Gast)


Lesenswert?

Peter - danke für deinen Post, offensichtlich bist du schon weiter als 
ich. Das hört sich aber so an als wenn du im Kernel herumpfuschen mußt. 
Die typsische serielle Schnittstelle(ttySx) läuft komplett über den 
"character - orientierten" - Treiber des Kernels. Da wirst Du wohl Hand 
anlegen müssen wenn du "schnell" reagieren mußt.

Ich möchte auch noch ein oder zwei weitere standard - serielle 
Schnittstellen dazunehmen + einer V24. Könntest Du mal posten was zu tun 
ist um die weiteren Schnittstellen im Linux bekannt zu machen ?


Jetzt erst mal weiter hier im Tutorial ?!
1
Habe im ersten Post wohl die Konfigurations - Datei für FTP zu nennen. Es ist /etc/proftpd.conf.
Wie angedroht der zweite Teil meines Setups für ein Hello World - Remote 
Debugging auf dem NGW100. Sobald man das AVR32 Studio 2.1 startet und 
den Willkommen - Kram weg hat öffnet man am besten mal Help->Cheat sheet 
und selektiert hier "AVR32 Studio"->"AVR32 Linux development"

Ich pinne die Hilfe nochmal hier hin:
1
 
2
HW-Setup:
3
Plug a serial cable into your host and the other end to the NGW100. 
4
Open the terminal view in AVR32 Studio by selecting Window>Show View>Other>Terminal>Terminal 
5
Click on the Settings icon and configure the terminal be selecting: 
6
Connection Type: Serial 
7
Port: (your serial port) 
8
Baud Rate: 115200 
9
Data Bits: 8 
10
Stop Bits: 1 
11
Parity: None 
12
Flow Control: None 
13
Timeout (sec): 5 
14
Connect an ethernet cable to LAN port on the NGW100. 
15
Now it's time to boot Linux. Power up your target or press the reset button on the board if power allready was on. 
16
Once the NGW100 is booted you will get output in the terminal view
17
18
Create an AVR32 Linux project:
19
Select (now using AVR32 Studio) File>New>Project Select AVR32 C Project or AVR32 C++ Project 
20
Name the project 'AVR32LinuxHelloWorld' 
21
Set the correct Target MCU (check your development board) 
22
Select project type AVR32 Linux Executable. 
23
If you are having problems click on the following Click to perform to open the new project dialog.
24
25
Add hello_world.c
26
Open the Package Explorer view and right click on the AVR32LinuxHelloWorld project and select New>Source File. Name the new source file hello_world.c 
27
Write a simple hello world application with a main method calling 'printf()' 
28
Alternative: click on the following Click to perform to do this step automatically. 
29
30
Build:
31
Make sure that your project is saved (shortcut Ctrl + S) and build it by using the short cut Ctrl + B.
32
33
Configure launch configuration:
34
Select Run>Debug Configurations. Right click on C/C++ Remote Application and select New 
35
Name the new debug lanch AVR32 Linux debug launch 
36
Add a new connection by clicking on New. Use system type AVR32 Linux and click Next. Use the IP address of the AP7 development board. Setting the 'Connection name' and 'Description' is optional. Then click Finish 
37
When you are back in the Debug Configurations main page again, make sure that:
38
'Connection' is set to you new connection.
39
'Project' matches your project name (for instance AVR32LinuxHelloWorld).
40
'C/C++ Application' is Debug/AVR32LinuxHelloWorld.elf if your are using the Hello World example. If not look for an elf-file in the Debug folder.
41
'Remote Absolute File Path for C/C++ Application' is: /home/avr32/AVR32LinuxHelloWorld.elf. If you are not using the Hello World example, use /home/avr32/ followed by your .elf-file. 
42
In the Debug Configurations' Debugger tab change the following settings: 
43
-GDB debugger avr32-linux-gdb 
44
-GDB server settings, port number 1024 
45
Press Apply when finished.
46
47
Debug Application:
48
Select Run>Debug Configurations.. choose AVR32 Linux Debug Launch and click on Debug. The debug launch will then start and you will be asked for user name and password. Use avr32 as username, and avr32! as password. Save the password and you will not have to enter this again. 
49
The next time you want to start this debug launch, you may click on the bug icon and directly select AVR32 Linux Debug Launch. 
50
Change to the debug perspective if asked. And use the standard step, run and debug functionality. 
51
If you are running the Hello World example; notice that the "Hello World" output can be seen in the console view. If you are having trouble with this: open the console view Window>Show View>Other>General>Console. Then click on the "Display Selected Console" icon located in the top rigt of the view, and select "AVR32LinuxHelloWorld Debug [C/C++ Remote Application] Remote Shell". Then click on the "Pin Console" icon to lock the console. 
52
The debug session can be ended by clicking on the terminate icon (look for small red square).

Damit die Libs gefunden werden setze ich noch ein .gdbinit - File auf.
Es soll im NGW100 im debug verzeichnis liegen (Also 
/home/avr32/.gdbinit). Bei mir mit folgendem Inhalt:
1
set solib-absolute-prefix /home/avr32/nfs
2
set remotetimout 60

damit findet der (lokale gdb) die Libraries des Zielsystems in lokalen 
Verzeichnissen.

So das wars.. Funktioniert alles wie beschrieben. Leider bekomme ich 
nach einigen "Step over" keine Rückmeldung mehr und der Console - Output 
kommt gar nicht mehr zur Ruhe.
1
....
2
FRAME_POINTER chip: 0x01f:0x1e82 rev 2
3
Modules linked in:<1>Oops: Critical exception, sig: 9 [#3585]
4
FRAME_POINTER chip: 0x01f:0x1e82 rev 2
5
Modules linked in:<1>Oops: Critical exception, sig: 9 [#3586]
6
...

Wenn ich im Internet suche bin ich alleine auf weiter Flur mit diesem 
Problem. So viel ist klar: der Teil "FRAME_POINTER chip: 0x01f:0x1e82 
rev 2" taucht obligatorisch bei Kernel Panic auf.
Was mich wundert ist, dass der Library - Name nicht genannt wird. 
Stattdessen bekomme ich "<1>Oops blabla"

Also meine Fragen:

1. Hat noch jemand dieses Problem oder sogar eine Erklärung/Lösung ?

2. Weiß jemand wie man in diesem Studio bzw. über Environment - 
Variablen das AVR32 Studio 2.1 so einstellt, dass alle bin/include/lib - 
Pfade so eingestellt sind das Sie auf /home/avr32/buildroot stehen 
anstatt auf /home/avr32/buildroot-avr.2.2.0-stk1005 blabla ? Den path 
konnte ich schon umstellen über /etc/profile....

3. Kennt jemand die ENV - Variable die ich setzen kann um das dl - 
Verzeichnis nicht im (default) buildroot - Verzeichnis zu belassen.
(es kommt mir versehentlich schon mal beim Löschen von buildroot 
abhanden. Dann muss der gesamte Source - Krempel wieder aus dem Internet 
geladen werden... dann tuns wieder einige Links nicht usw....)

4. Ich habe versucht das Buildroot 2.3.0 einzubringen. Das funktioniert 
auch im Großen und Ganzen. Allerdings scheinen immer nur die make 
atngw100_defconfig - Konfiguration zu gelingen. Die make - Umgebung 
scheint noch sehr instabil zu sein und sobald ich versuche über make 
menuconfig nachträglich Dinge zu ändern - in diesem Fall "Build 
options->build packages with debugging symbols" bekomme ich ein Kernel 
das nicht startet oder der make bricht ab bei Dingen wie iptables-1.1.4 
oder so was.
Weiß jemand was man den "Gefahrlos" in Menuconfig ändern darf und was 
besser nicht ? Offensichtlich empfiehlt es sich sobald ein Build nicht 
"in einem Rutsch" durchgelaufen ist das komplette Environment neu 
aufzusetzen! Ich mache dann immer folgendes:
1
1. Buildroot - Verzeichnis löschen. (Vorher das dl unterverzeichnis retten)
2
2. Im home - Verzeichnis tar xcfj download/buildroot-avr32-v2.3.0.tar.bz2 aufrufen. 
3
3. Das neu entstandende Verzeichnis buildroot-avr32-v2.3.0 in buildroot umbenennen 
4
4. Jetzt das dl verzeichnis wieder nach buildroot kopieren
5
5. cd buildroot
6
6. make atngw100_defconfig
7
7. make menuconfig (hier jetzt Anpassungen vornehmen)
8
8. make source
9
9. make

Weiß es jemand besser ?
Hilfe ??!

Danke im Voraus
-T

von Peter D. (pdiener) Benutzerseite


Lesenswert?

Ich habe die folgende Anleitung zum Einbauen der weiteren Schnittstellen 
benutzt:

http://www.cibomahto.com/2007/11/enabling-extra-serial-ports-for-the-ngw100/

Es muss doch irgendeine Lösung geben, um vom user space aus die 
Interrupts der seriellen Schnittstelle zu nutzen, das ist doch unter 
Windows auch üblich.

Ein neues Kernelmodul möchte ich dafür nicht schreiben.

Peter

von anybody (Gast)


Lesenswert?

Selbst wenn du "Interrupts im Userspace" verarbeiten könntest, wie
kannst du die sicher sein das dein Userspace Programm rechtzeitig
an die Reihe kommt um die Pause sicher zu detektieren ?
Egal ob Windows oder Linux.

von Thilo H. (thaala)


Lesenswert?

Hallo Peter,

ich denke soviel ist mal klar: Auf der einen Seite möchtest Du die 
Vorteile von Linux nutzen indem Du die eine serielle Schnittstelle 
typisch ansprichst mit Open, read usw. Das bedeutet aber doch auch, das 
die Interrupt - Treiber durch Linux - belegt werden. Will sagen - Du 
hast keine Chance am Kernel vorbei eine eigene ISR zu implementieren. Du 
mußt im Kernel deinen eigenen (modifizierten) Character - Treiber 
implementieren. Wenn Du außerdem die Parametrierung der seriellen 
Schnittstelle ebenfalls modifizieren möchtest geht das Ganze ja noch 
weiter.....

Was anderes wäre es wenn Du eine komplett eigene HW (ob jetzt im 
Prozessor oder extern) über einen Interrupt anschliessen würdest, den 
Linux nicht belegt. Aber dann würden andere Probleme auf dich lauern 
(wie Du schon sagtest: Puffer - Synchronisation usw.)! Nein ich sehe da 
keine Chance für dich (übrigens natürlich auch für mich... allerdings 
ist HDLC im WAN - Treiber beheimatet und nicht im char - Treiber) ohne 
Kernel - Unterstützung auf Interrupgesteuerte HW zuzugreifen.

Gruß
-T

von lan2e1 (Gast)


Lesenswert?

Hi,

ist es das was Du brauchst ?

EIB Linux Kernel Driver
http://www.auto.tuwien.ac.at/~mkoegler/index.php/eibdriver

Und:
linux != windows
windoof ist nun mal fuer single looser.

Aber wenn Du Dir mal die Muehe machst dir 'nen Treiber  fuer Linux 
anzusehen, wirst Du feststellen, dass das einfacher als man denkt ist.
Man braucht kein bloedsinniges DDK und kann fast wie unter DOS auf die 
Hardware zugreifen wenn man will. Kompliziert wird's erst wenn man
einen Treiber schreiben will der in die Hardware-Abstraktions-Schicht 
reinpasst. Das ist ja aber nicht immer noetig.

Mfg
lan2e1

von ES (Gast)


Lesenswert?

Hallo,

bei mir hat geholfen, erst make atngw100-base_defconfig laufen zu lassen 
und dann erst atngw100_defconfig!

Gruß

ES

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.