www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR32 NGW100 - Linux Setup


Autor: THaala (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 .-
  #iface eth0 inet dhcp
  auto eth0
  iface eth0 inet static
          address 10.1.246.30
          netmask 255.255.255.0
          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:
  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:
  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:
  "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:
  /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:
  /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:
  serverip=10.1.246.21
  tftpip=10.1.246.21
  tftpserver=10.1.246.21
  ipaddr=10.1.246.30
  ethact=macb0
  ethaddr=00:00:04:25:50:B3

  bootcmd=set ipaddr 10.1.246.30;tftp 0x10400000 uImage;bootm
  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:
00:00:04:25:1C:50 + seriennummer des Boards * 2 (+1 für MACB)
  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:
  #Defaults for tftpd-hpa
  RUN_DAEMON="yes"
  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:
  /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:
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:
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 -
  cd dev
  sudo mknod -m 666 null c 1 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:
  sudo chmod -R 0755 nfs
  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:
U-Boot 1.3.4-atmel.buildroot.1 (Feb  8 2009 - 15:09:28)



U-Boot code: 00000000 -> 00011108  data: 000179e8 -> 0004e300

CPU: 140 Mhz HSB: 70 MHz PBA: 35 MHz PBB: 70 MHz

malloc: Using memory from 0x11f71000 to 0x11fb1000

DMA: Using memory from 0x11f6d000 to 0x11f71000

Flash:  8 MB at address 0x00000000

DRAM Configuration:

Bank #0: 10000000 32 MB

In:    serial

Out:   serial

Err:   serial

Net:   macb0, macb1

Press SPACE to abort autoboot in 1 seconds

macb0: Starting autonegotiation...

macb0: Autonegotiation complete

macb0: link up, 100Mbps full-duplex (lpa: 0x45e1)

Using macb0 device

TFTP from server 10.1.246.21; our IP address is 10.1.246.30

Filename 'uImage'.

Load address: 0x10400000

Loading: #################################################################

         #####################

done

Bytes transferred = 1252234 (131b8a hex)

## Booting kernel from Legacy Image at 10400000 ...

   Image Name:   Linux-2.6.27.6.atmel.1

   Image Type:   AVR32 Linux Kernel Image (gzip compressed)

   Data Size:    1252170 Bytes =  1.2 MB

   Load Address: 10000000

   Entry Point:  90000000

   Verifying Checksum ... OK

   Uncompressing Kernel Image ... OK



Starting kernel at 90000000 (params at 11f71008)...



Linux version 2.6.27.6.atmel.1 (avr32@avr32-desktop) (gcc version 4.2.2-atmel.1.
1.3.buildroot.1) #1 Sat Feb 14 20:47:43 CET 2009

CPU: AT32AP700x chip revision C

CPU: AP7 [01] core revision 0 (AVR32B arch revision 1)

CPU: MMU configuration: Shared TLB

CPU: features: dsp simd ocd perfctr java

CPU: Running at 140.000 MHz

Physical memory:

  10000000-11ffffff

Reserved memory:

  10000000-1018180f: Kernel code

  10181810-102193e7: Kernel data

Exception vectors start at 90013000

CPU: Paging enabled

Node 0: start_pfn = 0x10000, low = 0x12000

Node 0: mem_map starts at 9021c000

Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 8128

Kernel command line: >root=/dev/nfs nfsroot=10.1.246.21:/home/avr32/nfs ip=10.1.
246.30::10.1.246.21:::eth0:off console=ttyS0

PID hash table entries: 128 (order: 7, 512 bytes)

avr32_comparator: irq 0, 140.000 MHz

console [ttyS0] enabled

Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)

Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)

Memory: 30328k/30328k available (1466k kernel code, 2440k reserved, 111k data, 7
6k init)

SLUB: Genslabs=10, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1

Calibrating delay using timer specific routine.. 281.84 BogoMIPS (lpj=563695)

Mount-cache hash table entries: 512

net_namespace: 756 bytes

smc smc.0: Atmel Static Memory Controller at 0xfff03400

NET: Registered protocol family 16

pdc pdc.0: Atmel Peripheral DMA Controller enabled

at32_eic at32_eic.0: External Interrupt Controller at 0xfff00100, IRQ 19

at32_eic at32_eic.0: Handling 4 external IRQs, starting with IRQ 64

AVR32 AP Power Management enabled

dw_dmac.0: DesignWare DMA Controller, 3 channels

NET: Registered protocol family 2

IP route cache hash table entries: 1024 (order: 0, 4096 bytes)

TCP established hash table entries: 1024 (order: 1, 8192 bytes)

TCP bind hash table entries: 1024 (order: 0, 4096 bytes)

TCP: Hash tables configured (established 1024 bind 1024)

TCP reno registered

NET: Registered protocol family 1

JFFS2 version 2.2. (NAND) © 2001-2006 Red Hat, Inc.

msgmni has been set to 59

io scheduler noop registered

io scheduler cfq registered (default)

atmel_usart.0: ttyS0 at MMIO 0xffe01000 (irq = 7) is a ATMEL_SERIAL

MACB_mii_bus: probed

eth0: Atmel MACB at 0xfff01800 irq 25 (00:00:04:25:50:b3)

eth0: attached PHY driver [Generic PHY] (mii_bus:phy_addr=0:01, irq=-1)

macb macb.1: invalid hw address, using random

MACB_mii_bus: probed

eth1: Atmel MACB at 0xfff01c00 irq 26 (f6:25:3b:89:2a:ad)

eth1: attached PHY driver [Generic PHY] (mii_bus:phy_addr=1:03, irq=-1)

physmap platform flash device: 00800000 at 00000000

physmap-flash.0: Found 1 x16 devices at 0x0 in 16-bit bank

 Amd/Fujitsu Extended Query Table at 0x0041

number of CFI chips: 1

cfi_cmdset_0002: Disabling erase-suspend-program due to code brokenness.

RedBoot partition parsing not available

Using physmap partition information

Creating 3 MTD partitions on "physmap-flash.0":

0x00000000-0x00020000 : "u-boot"

0x00020000-0x007f0000 : "root"

0x007f0000-0x00800000 : "env"

atmel_spi atmel_spi.0: Atmel SPI Controller at 0xffe00000 (irq 3)

atmel_spi atmel_spi.0: Using bounce buffer at 0x24000000 len 4096

mtd_dataflash spi0.0: AT45DB642x (8448 KBytes) pagesize 1056 bytes

atmel_usba_udc atmel_usba_udc.0: MMIO registers at 0xfff03000 mapped at fff03000


atmel_usba_udc atmel_usba_udc.0: FIFO at 0xff300000 mapped at ff300000

at32ap700x_rtc at32ap700x_rtc.0: rtc core: registered at32ap700x_rtc as rtc0

at32ap700x_rtc at32ap700x_rtc.0: Atmel RTC for AT32AP700x at fff00080 irq 21

at32_wdt at32_wdt.0: AT32 WDT at 0xfff000b0, timeout 2 sec (nowayout=0)

atmel_mci atmel_mci.0: Atmel MCI controller at 0xfff02400 irq 28, 1 slots

Registered led device: sys

Registered led device: a

Registered led device: b

TCP cubic registered

Initializing XFRM netlink socket

NET: Registered protocol family 10

IPv6 over IPv4 tunneling driver

NET: Registered protocol family 17

NET: Registered protocol family 15

RPC: Registered udp transport module.

RPC: Registered tcp transport module.

cpufreq: AT32AP CPU frequency driver

at32ap700x_rtc at32ap700x_rtc.0: setting system clock to 1970-01-01 00:00:00 UTC
 (0)

mmc0: new SD card at address 6527

mmcblk0: mmc0:6527 SD02G 1921024KiB

 mmcblk0: p1

IP-Config: Guessing netmask 255.0.0.0

IP-Config: Complete:

     device=eth0, addr=10.1.246.30, mask=255.0.0.0, gw=10.1.246.21,

     host=10.1.246.30, domain=, nis-domain=(none),

     bootserver=255.255.255.255, rootserver=10.1.246.21, rootpath=

Looking up port of RPC 100003/2 on 10.1.246.21

eth0: link up (100/Full)

Looking up port of RPC 100005/1 on 10.1.246.21

VFS: Mounted root (nfs filesystem).

Freeing init memory: 76K (90000000 - 90013000)


init started: BusyBox v1.13.1 (2009-02-14 19:44:10 CET)

Mounting virtual filesystems:

  /proc mounted

  /sys mounted

  /dev mounted

  /dev/pts directory made

  /dev/pts mounted

  /dev/shm directory made

  /config mounted

  /tmp mounted

  /var/run mounted

  /var/log mounted

Setting up mdev: done

Setting hostname: 'ngw.example.net'

Starting syslogd: done

Log messages to syslog: done

Starting klogd: done

Probing modules:

Starting portmap: done

Mounting local filesystems: done

Network interfaces: done

Starting dnsmasq: done

Enable NAT:

  IPv4 forwarding: done

  iptables postrouting: done

  iptables incoming trafic: done

  iptables outgoung trafic: done

Starting telnetd: done

Starting inetd: done

Starting httpd: done

Running ntpdate: 14 Feb 22:18:40 ntpdate[329]: step time server 131.234.137.24 o
ffset 1234653500.793538 sec

done

Mounting remote filesystems: done

Starting network time protocol daemon: ntpd.

Starting dropbear sshd: OK

Starting ProFTPD: done

Starting SMB services: done

Starting NMB services: done



NGW100 ready







BusyBox v1.13.1 (2009-02-14 19:44:10 CET) built-in shell (ash)

Enter 'help' for a list of built-in commands.



~ #
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

Autor: Peter Diener (pdiener) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: THaala (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?!
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:
 
HW-Setup:
Plug a serial cable into your host and the other end to the NGW100. 
Open the terminal view in AVR32 Studio by selecting Window>Show View>Other>Terminal>Terminal 
Click on the Settings icon and configure the terminal be selecting: 
Connection Type: Serial 
Port: (your serial port) 
Baud Rate: 115200 
Data Bits: 8 
Stop Bits: 1 
Parity: None 
Flow Control: None 
Timeout (sec): 5 
Connect an ethernet cable to LAN port on the NGW100. 
Now it's time to boot Linux. Power up your target or press the reset button on the board if power allready was on. 
Once the NGW100 is booted you will get output in the terminal view

Create an AVR32 Linux project:
Select (now using AVR32 Studio) File>New>Project Select AVR32 C Project or AVR32 C++ Project 
Name the project 'AVR32LinuxHelloWorld' 
Set the correct Target MCU (check your development board) 
Select project type AVR32 Linux Executable. 
If you are having problems click on the following Click to perform to open the new project dialog.

Add hello_world.c
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 
Write a simple hello world application with a main method calling 'printf()' 
Alternative: click on the following Click to perform to do this step automatically. 

Build:
Make sure that your project is saved (shortcut Ctrl + S) and build it by using the short cut Ctrl + B.

Configure launch configuration:
Select Run>Debug Configurations. Right click on C/C++ Remote Application and select New 
Name the new debug lanch AVR32 Linux debug launch 
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 
When you are back in the Debug Configurations main page again, make sure that:
'Connection' is set to you new connection.
'Project' matches your project name (for instance AVR32LinuxHelloWorld).
'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.
'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. 
In the Debug Configurations' Debugger tab change the following settings: 
-GDB debugger avr32-linux-gdb 
-GDB server settings, port number 1024 
Press Apply when finished.

Debug Application:
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. 
The next time you want to start this debug launch, you may click on the bug icon and directly select AVR32 Linux Debug Launch. 
Change to the debug perspective if asked. And use the standard step, run and debug functionality. 
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. 
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:
set solib-absolute-prefix /home/avr32/nfs
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.
....
FRAME_POINTER chip: 0x01f:0x1e82 rev 2
Modules linked in:<1>Oops: Critical exception, sig: 9 [#3585]
FRAME_POINTER chip: 0x01f:0x1e82 rev 2
Modules linked in:<1>Oops: Critical exception, sig: 9 [#3586]
...

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. Buildroot - Verzeichnis löschen. (Vorher das dl unterverzeichnis retten)
2. Im home - Verzeichnis tar xcfj download/buildroot-avr32-v2.3.0.tar.bz2 aufrufen. 
3. Das neu entstandende Verzeichnis buildroot-avr32-v2.3.0 in buildroot umbenennen 
4. Jetzt das dl verzeichnis wieder nach buildroot kopieren
5. cd buildroot
6. make atngw100_defconfig
7. make menuconfig (hier jetzt Anpassungen vornehmen)
8. make source
9. make

Weiß es jemand besser ?
Hilfe ??!

Danke im Voraus
-T

Autor: Peter Diener (pdiener) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe die folgende Anleitung zum Einbauen der weiteren Schnittstellen 
benutzt:

http://www.cibomahto.com/2007/11/enabling-extra-se...

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

Autor: anybody (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thilo Haala (thaala)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: lan2e1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ES (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

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

Gruß

ES

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.