AVR32 NGW100 - Linux Setup

Gast #1147767
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
Persönliche Seite #1147954
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
Gast #1148068
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
Persönliche Seite #1148079
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
Gast #1148109
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.
#1148126
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
Gast #1230263
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren