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