Forum: Mikrocontroller und Digitale Elektronik Start-Hilfe zu buildroot für AT91RM9200 auch hier?


von Ulrich P. (uprinz)


Lesenswert?

Hallo zusammen!

Ich möchte gerne ein vorhandenes Controller-Board mit einem AT91RM9200, 
8MB FLASH und 16MB RAM für andere Dinge zweckentfremden. Das Ding lehnt 
sich zu einem guten Teil an das alte AT91RM9200DK an, hat aber keinen 
Dataflash, sondern Parallel-FLASH.
Das darauf laufende Linux 2.4 wurde whkl mit ELDK erstellt, aber mit 
letzterem komme ich irgendwie nicht gut zurecht. Alle Doku dazu bezieht 
sich halt mehr auf MIPS und Kollegen.
OpenEmbedded und Angström werden hauptsächlich für Systeme mit Grafik 
verwendet.
Also back to basics und buildroot scheint mein Favourit. Leider ist auf 
www.at91.com sehr wenig los und der einzige wirkliche Helfer bislang 
lebt in der USA. Ich kann also heute posten und habe mit etwas Glück 
morgen eine Antwort...

Folgende Aufgabe soll gelöst werden ( mein persönliches Ziel)
Unter Ausnutzung des vorhandenen u-boot 1.1.5 oder 1.1.3 einen Kernel 
via TFTP booten, der mind. dem Stand 2.6.24 entspricht.
Ursprünglich wollte ich gleich den latest-greatest verwenden ( 2.6.27.7) 
da ich mich dabei wohl in recht viele Dinge einarbeiten muss. Also 
gleich das aktuelle lernen. Allerdings scheint der 2.6.24 sehr viel 
ausgereifter, weil vieles danach umgestellt wurde. Also Sollte mit 
2.6.24 etwas zügiger ein Erfolgserlebnis zu erreichen sein.

Es gilt, ein rootfs zu erzeugen, dass im FLASH liegt und das online 
schreiben erlaubt. Also kein RAMFS für die normalen Dateien. Logs und 
alles andere sollten in einem RAMFS liegen.

Später soll eine/zwei Platte(n) ( IDE-Port ist vorhanden) angeschlossen 
werden und das Dings als HTTP, SMB und SVN-Server genutzt werden.

Ich bekomme aktuell verschiedene Kernel gebacken, der TFTP Boot kommt 
aber trotz richtiger Image Identifizierung nur bis 'Booting Linux.'

Als Besonderheit habe ich noch folgendes:
- DBGU steht nicht zur Verfügung, Console und Early Debug Messages 
müssen über TTYS0,96008N1, was ich auch so in den builds vorgegeben 
habe.
- Mit dem aktuellen buildroot kann ich kein JFFS mehr erzeugen, da ihm 
eine acl.h fehlt. Diese hat mit den POSIX Berechtigungen zu tun, aber 
wenn ich diese im kernel aktiviere, dann nützt das auch nix. Das gilt 
aber nur für Kernel 2.6.27.7.
- Ich habe kein JTAG, wenn jemand weiß, wie ich mit dem OpenOCD-USB 
Dongle den AT91RM9200, resp. sein angeschlossenes Flash neu 
programmiere, dann immer her mit der Info, das wäre klasse um einen 
u-boot-1.3.x mit Patch für meine Hardware drauf zu flashen. Sonst habe 
ich leider nur einen Versuch...

Öh, ja, es muss Kernel 2.6 sein, da ich dort Treiberentwicklung machen 
möchte, und daher fange ich nicht mehr mit dem ollen Kram an. Es hängt 
aber kein Projekt dran, sondern persönlicher Ehrgeiz und der Wille zu 
lernen und zu experimentieren.

So, es darf gepostet werden.

Gruß, Ulrich

von Ulrich P. (uprinz)


Lesenswert?

Ok, das wohl zu allgemein...

Ich habe inzwischen für mein Board eine eigene board.c angelegt und alle 
Besonderheiten wie Schnittstellen, Flash, LEDs und so weiter dort 
angelegt und initialisiert.

Leider geht es nicht weiter als is dort:
1
=> boot
2
TFTP from server 10.201.49.43; our IP address is 10.201.49.129
3
Filename 'at91rm9200df-linux-2.6.27.7.gz'.
4
Load address: 0x20800000
5
Loading: #################################################################
6
         #################################################################
7
         #################################################################
8
         #################################################################
9
         #################################################################
10
         #################################################################
11
         #################################################################
12
         ##########################################################
13
done
14
Bytes transferred = 2624500 (280bf4 hex)
15
## Booting image at 20800000 ...
16
   Image Name:   Linux-2.6.27.7
17
   Created:      2008-12-10  11:20:42 UTC
18
   Image Type:   ARM Linux Kernel Image (uncompressed)
19
   Data Size:    2624436 Bytes =  2.5 MB
20
   Load Address: 20008000
21
   Entry Point:  20008000
22
   Verifying Checksum ... OK
23
OK
24
25
Starting kernel ...
26
27
Uncompressing Linux......................................................................
28
................................................................... done, booting the kernel.

Ich habe auch angegeben, die LEDs per default auf ON zu initialisieren 
und, um ganz sicher zu gehen, die LEDs abwechselnd auf Active_Low und 
Active_High gesetzt. Ich weiß aber nicht, wann diese Initialisierung 
durchgeführt wird. Die LEDs an meinem Board bleiben jedenfalls komplett 
aus.

Hilfe... :(

Gruß, Ulrich

von Jörn K. (joern)


Lesenswert?

Spontan würde ich sagen, dass die Konsole nicht (richtig) initialisiert 
ist, denn normalerweise kommen nach der Meldung "booting the kernel" 
Nachrichten vom Bootprozess.

Sollte etwa so aussehen (unterer Bereich der Seite)
http://www.joernonline.de/dw/doku.php?id=projects:sam9_eval:1_sam9eval

Ich schau heute Abend in meiner Buildroot Konfiguration nach.

Viel Erfolg
Jörn

von Ulrich P. (uprinz)


Angehängte Dateien:

Lesenswert?

Hallo Jörn!

Ich habe inzwischen eine eigene Board-Datei gemacht, bei der ich die 
physikalischen UARTs so vertausche, dass der USART0 im ARM dem ttys0 
entspricht, der DBGU dem ttyS4, dazwischen die anderen verfügbaren 
USARTs 1..3.

Was mir aber aufgefallen ist, ist das meine Initialisierung scheinbar 
völlig an dem Kernel vorüber geht. Der Code wird compiliert und er 
meckert auch Fehler darin an. Aber er wird bei der Initialsierung nicht 
aufgerufen.

Beim Kernel-Build erhalte ich Warnungen, dass _init Funktionen 
definiert, aber nicht zuegordnet werden können. Das ist mir bisher nicht 
aufgefallen, weil es nur Warnungen sind, die nicht zum Abbruch führen. 
Und ein > log 2>&1 habe ich noch nicht gemacht.
Ich nehme an, dass es durch die großen Umstellungen von 2.6.24 -> 2.6.27 
im Kernel zu einem Problem kommt. Ich habe leider keine bereits auf 
2.6.27 umgebaute Referenz gefunden.
Das YL9200er Board ist relativ spät dazu gekommen, daher habe ich mich 
in weiten Teilen bei desem bedient. Aber vermutlich ist es immer noch 
nicht aktuell genug für einen erfolgreichen 2.6.27er Build.
Da ich aber gerade neu einsteige in das Thema, wollte ich mich auf das 
vorbereiten, was mich erwartet, nicht auf das, was mal war.

Ich zippe mal mein board.c, villeicht hilfts.

Ulrich

von Jörn K. (joern)


Lesenswert?

Gibst du dem Kernel die Konsole als Parameter mit? Lass dir mal von 
UBoot die bootargs ausgeben und schau nach ob etwas von der Konsole drin 
steht:

-->.... console=ttyS0,115200n8 ....

von Ulrich P. (uprinz)


Lesenswert?

Jep, daran habe ich schon gedacht. Ich übergebe
 console=ttyS0,$(baudrate)
im u-boot und auch als Kernelparameter irgendwo im make linux26-config

Wie gesagt, ich habe das auch entsprechend der ATMEL Idee bei der 
Initialisierung so gedreht, dass der DBGU hinten ansteht und USART0 auch 
ttyS0 ist.

Es wird vermutlich nicht daran liegen, sondern schon vorher schief 
gehen, denn die LEDs leuchten nicht.

von Jörn K. (joern)


Angehängte Dateien:

Lesenswert?

So. Ich hab hab grad mal meine Kernelconfig offen.

Unter "System Type"-> "Atmel AT91 System-on-Chip" -> Select a UART for 
early kernel messages (DBGU) --> DBGU ausgewählt

Das war die einzige Einstellung, die ich zum Thema UART gefunden habe, 
ab gesehen von dem Kernelparameter

Im Anhang noch meine Boarddatei.

von Jörn K. (joern)


Lesenswert?

Noch eine Idee: Übergibst du die MachID an den Kernel?

von Ulrich P. (uprinz)


Lesenswert?

Hi!

Mit der MachID bin ich noch nicht ganz durch. Ich hatte die manuell 
eingetragen. Scheint aber, als würde die noch anderweitig auftauchen und 
da fehlt sie, z.B. in der head-at91rm9200.S. Darin gibt es einige 
Assembler Fetzen...
1
#include <asm/mach-types.h>
2
3
    .section  ".start", "ax"
4
5
    @ Atmel AT91RM9200-DK : 262
6
    mov  r3,  #(MACH_TYPE_AT91RM9200DK & 0xff)
7
    orr  r3, r3, #(MACH_TYPE_AT91RM9200DK & 0xff00)
8
    cmp  r7, r3
9
    beq  99f

Ich vermute, da gibt es ein Script oder einen Leitfaden, wo und wie man 
das machen muss. Ich neu, ich raten...

Mir ist auch aufgefallen, dass ATMEL immer die MT48er RAMs einsetzt, ich 
habe aber IS42S16400B drauf. Könnte also noch ein Problem mit dem SDRAM 
Controller sein.

Ist das eigentlich richtig, dass der alte 2.4.x Kernel vom u-boot als 
komprimiert erkannt wird, dann ausgepackt und gestartet wird:
1
U-Boot 1.1.3 (Jul  4 2005 - 14:13:57)
2
U-Boot code: 20F00000 -> 20F1A880  BSS: -> 20F1EE60 RAM Configuration: Bank #0: 
3
20000000 16 MB Board: CMC-PU2 (Rittal GmbH) Flash:  8 MB 
4
In:    serial Out:   serial Err:   serial 
5
Hit any key to stop autoboot:  0 no DHCP ## Booting image at 10030000 ... Image Name:   ARM Linux-2.4.27
6
   Created:      2006-01-30  12:41:09 UTC
7
   Image Type:   ARM Linux Kernel Image (gzip compressed)
8
   Data Size:    716596 Bytes = 699.8 kB
9
   Load Address: 20008000
10
   Entry Point:  20008000
11
   Verifying Checksum ... OK
12
   Uncompressing Kernel Image ... OK
13
Starting kernel ...
14
Linux version 2.4.27-vrs1 (mkr@tq-sewsrv-4) (gcc version 3.3.3 (DENX ELDK 3.1. 13.3.3-9)) #42 Mon Jan 30 13:37:49 CET 2006

während der 2.6.x als unkomprimiert erkannt wird und sich dann nach dem 
Start selber auspackt?:
1
Bytes transferred = 1121896 (111e68 hex)
2
## Booting image at 20800000 ...
3
   Image Name:   Linux-2.6.24.7
4
   Created:      2008-12-10  20:59:00 UTC
5
   Image Type:   ARM Linux Kernel Image (uncompressed)
6
   Data Size:    1121832 Bytes =  1.1 MB
7
   Load Address: 20008000
8
   Entry Point:  20008000
9
   Verifying Checksum ... OK
10
OK
11
12
Starting kernel ...
13
14
Uncompressing Linux...............................................................
15
........... done, booting the kernel.

Und wie kann man im Buildroot nur den Kernel neu kompilieren... Das geht 
bei einem 2.6.24er irgendwie anders als bei einem 2.6.27er...

von Jörn K. (joern)


Lesenswert?

> Mit der MachID bin ich noch nicht ganz durch. Ich hatte die manuell
> eingetragen. Scheint aber, als würde die noch anderweitig auftauchen und
> da fehlt sie, z.B. in der head-at91rm9200.S. Darin gibt es einige
> Assembler Fetzen...
>
1
#include <asm/mach-types.h>
2
> 
3
>     .section  ".start", "ax"
4
> 
5
>     @ Atmel AT91RM9200-DK : 262
6
>     mov  r3,  #(MACH_TYPE_AT91RM9200DK & 0xff)
7
>     orr  r3, r3, #(MACH_TYPE_AT91RM9200DK & 0xff00)
8
>     cmp  r7, r3
9
>     beq  99f
10
>
>
> Ich vermute, da gibt es ein Script oder einen Leitfaden, wo und wie man
> das machen muss. Ich neu, ich raten...

Ich glaube bei der MachID liegt der Hund begraben.Hol dir am besten eine 
hier: http://www.arm.linux.org.uk/developer/machines/?action=new

Schau dir mal in der Kerneldoku (/Documentation/arm/) die Datei booting 
an.

> Mir ist auch aufgefallen, dass ATMEL immer die MT48er RAMs einsetzt, ich
> habe aber IS42S16400B drauf. Könnte also noch ein Problem mit dem SDRAM
> Controller sein.

Auf meinem Board sind Qimonda Chips drauf. Mit denen tuts.

> Ist das eigentlich richtig, dass der alte 2.4.x Kernel vom u-boot als
> komprimiert erkannt wird, dann ausgepackt und gestartet wird:
>
1
U-Boot 1.1.3 (Jul  4 2005 - 14:13:57)
2
> U-Boot code: 20F00000 -> 20F1A880  BSS: -> 20F1EE60 RAM Configuration:
3
> Bank #0:
4
> 20000000 16 MB Board: CMC-PU2 (Rittal GmbH) Flash:  8 MB
5
> In:    serial Out:   serial Err:   serial
6
> Hit any key to stop autoboot:  0 no DHCP ## Booting image at 10030000
7
> ... Image Name:   ARM Linux-2.4.27
8
>    Created:      2006-01-30  12:41:09 UTC
9
>    Image Type:   ARM Linux Kernel Image (gzip compressed)
10
>    Data Size:    716596 Bytes = 699.8 kB
11
>    Load Address: 20008000
12
>    Entry Point:  20008000
13
>    Verifying Checksum ... OK
14
>    Uncompressing Kernel Image ... OK
15
> Starting kernel ...
16
> Linux version 2.4.27-vrs1 (mkr@tq-sewsrv-4) (gcc version 3.3.3 (DENX
17
> ELDK 3.1. 13.3.3-9)) #42 Mon Jan 30 13:37:49 CET 2006
>
> während der 2.6.x als unkomprimiert erkannt wird und sich dann nach dem
> Start selber auspackt?:
>
1
Bytes transferred = 1121896 (111e68 hex)
2
> ## Booting image at 20800000 ...
3
>    Image Name:   Linux-2.6.24.7
4
>    Created:      2008-12-10  20:59:00 UTC
5
>    Image Type:   ARM Linux Kernel Image (uncompressed)
6
>    Data Size:    1121832 Bytes =  1.1 MB
7
>    Load Address: 20008000
8
>    Entry Point:  20008000
9
>    Verifying Checksum ... OK
10
> OK
11
> 
12
> Starting kernel ...
13
> 
14
> Uncompressing
15
> Linux...............................................................
16
> ........... done, booting the kernel.
17
>

Kann ich keine Aussage darüber treffen. Ich habe erst mit einem 2.6.X 
Kernel angefangen und noch keinen 2.4.Xer benutzt.

> Und wie kann man im Buildroot nur den Kernel neu kompilieren... Das geht
> bei einem 2.6.24er irgendwie anders als bei einem 2.6.27er...

Ich habe meinen Kernel in einem Projekt und benutzt aus der Buildroot 
die zusammengebaute Toolchain.

von Ulrich P. (uprinz)


Lesenswert?

Ok, dann warte ich jetzt mal darauf, dass arm.linux.org mir ein Login 
schickt. Muss aber auch mal mit denen sprechen, die den alten Kernel 
gebaut haben. Während die Modifikationen für das u-boot sauber zurück an 
DLUG geflossen sind, wurde das beim Kernel etwas verpennt. Das würde ich 
gerne ändern.
Ups... Die MachID gibt es tatsächlich schon:
1
cmc_pu2      MACH_CMC_PU2    CMC_PU2      600
Jetzt muss ich meine Sachen wohl nur noch diesem MACH_TYPE zuordnen...

von Ulrich P. (uprinz)


Lesenswert?

Scheint, als hätte ich es noch nicht ganz geschafft...
1
Bytes transferred = 1136404 (115714 hex)
2
## Booting image at 20800000 ...
3
   Image Name:   Linux-2.6.24.7
4
   Created:      2008-12-10  23:01:28 UTC
5
   Image Type:   ARM Linux Kernel Image (uncompressed)
6
   Data Size:    1136340 Bytes =  1.1 MB
7
   Load Address: 20008000
8
   Entry Point:  20008000
9
   Verifying Checksum ... OK
10
OK
11
12
Starting kernel ...
13
14
Uncompressing Linux......................................
15
..................................... done, booting the kernel.

von Ulrich P. (uprinz)


Lesenswert?

Das gleiche Ergebnis diesmal mit dem 2.6.27.7 und dem Boardfile, dass 
ich hier eingestellt hatte. Nur die MACH_TYPE wurde geändert auf 
CMC_PU2, so wie sie aufgeführt wurde.
1
## Booting image at 20800000 ...
2
   Image Name:   Linux-2.6.27.7
3
   Created:      2008-12-10  23:29:35 UTC
4
   Image Type:   ARM Linux Kernel Image (uncompressed)
5
   Data Size:    1677548 Bytes =  1.6 MB
6
   Load Address: 20008000
7
   Entry Point:  20008000
8
   Verifying Checksum ... OK
9
OK
10
11
Starting kernel ...
12
13
Uncompressing Linux...................................................
14
......................................................... done, booting the kernel.

Aber danke schon mal, ich bin sicher, dass ich jetzt schon ein Stück 
weiter bin, auch wenn man es nicht sieht. Habe wieder was gelernt!

Gruß und gute Nacht, morgen mache ich weiter :)

von Ulrich P. (uprinz)


Lesenswert?

Einen hab ich noch :)
1
  CC      arch/arm/kernel/module.o
2
  CC      arch/arm/kernel/io.o
3
  LD      arch/arm/kernel/built-in.o
4
WARNING: arch/arm/kernel/built-in.o(.text+0x26a4): Section mismatch in reference from the function cpu_init() to the function .init.text:dump_cpu_info()
5
The function cpu_init() references
6
the function __init dump_cpu_info().
7
This is often because cpu_init lacks a __init 
8
annotation or the annotation of dump_cpu_info is wrong.
und noch einer
1
Wirft mir der Build aus. Da klemmt doch was in der init...
2
  CC      arch/arm/mach-at91/leds.o
3
  LD      arch/arm/mach-at91/built-in.o
4
WARNING: arch/arm/mach-at91/built-in.o(.data+0x21e4): Section mismatch in reference from the variable cmcpu_flash_data to the (unknown reference) .init.data:(unknown)
5
The variable cmcpu_flash_data references
6
the (unknown reference) __initdata (unknown)
7
If the reference is valid then annotate the
8
variable with __init* (see linux/init.h) or name the variable:
9
*driver, *_template, *_timer, *_sht, *_ops, *_probe, *_probe_one, 
10
*_console,
Das hat vielleicht was mit der init für das NOR Flash zu tun?
1
  LD      drivers/mtd/devices/built-in.o
2
  CC      drivers/mtd/maps/physmap.o
3
drivers/mtd/maps/physmap.c:264:2: warning: #warning using PHYSMAP compat code
4
  LD      drivers/mtd/maps/built-in.o
Die ersten beiden tauchen dann bei
1
  AR      lib/lib.a
2
  LD      vmlinux.o
3
  MODPOST vmlinux.o
4
WARNING: vmlinux.o(.text+0x2b84): Section mismatch in reference from the function cpu_init() to the function .init.text:dump_cpu_info()
5
...
6
WARNING: vmlinux.o(.data+0x34c8): Section mismatch in reference from the variable cmcpu_flash_data to the (unknown reference) .init.data:(unknown)
7
The variable cmcpu_flash_data references
8
the (unknown reference) __initdata (unknown)
9
If the reference is valid then annotate the
10
variable with __init* (see linux/init.h) or name the variable:
11
*driver, *_template, *_timer, *_sht, *_ops, *_probe, *_probe_one, *_console, 
12
13
  GEN     .version
 wieder auf...
Wenigstens kann ich mit den letzteren beiden schon mal was anfangen, da 
steht ja was dabei, denke ich...

von Ulrich P. (uprinz)


Lesenswert?

Kann es sein, dass das u-boot 1.1.3 / 1.1.5 noch keine MACH-ID an den zu 
startenden Kernel meldet? Laut Doku ist das erst ab einem gewissen 
Zeitpunkt Mandatory.

von Ulrich P. (uprinz)


Lesenswert?

Kleines Update:
ES GEHT!
Die Lösung brachte ein Kontakt zu den Entwicklern des 2.4er Kernels und 
der dezente Hinweis, dass der u-boot in der Version wohl noch einen 
anderen ARCH_TYPE weitergibt. Ich habe das jetzt nicht verstanden, weil 
ich dachte, dass der ARCH_TYPE die CPU und der MACH_TYPE das Board 
definiert, aber nach auskommentieren des MACH_TYPE CMC_PU2 600 und dem 
Austausch der AT91RM9200 251 gegen CMC_PU2 251 bootet das Teilchen und 
fährt auch meine board.c ab, denn ich initalisiere darin die LEDs in 
einem bestimmten Muster, und das liegt nun an.

Also bitte klärt mich mal auf, was da mit MACH und ARCH bei mir 
durcheinander ist.

Ich versuche jetzt mal das Flash zu strukturieren und ein 
Root-Filesystem hin zu bekommen.
1
Uncompressing Linux......................................................................
2
.......................................... done, booting the kernel.
3
Linux version 2.6.27.7 (de13798@de13798-laptop) (gcc version 4.2.4) #23 Thu Dec 11 21:08:25 CET 2008
4
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177
5
Machine: Rittal CMC PU2
6
Memory policy: ECC disabled, Data cache writeback
7
Clocks: CPU 179 MHz, master 59 MHz, main 18.432 MHz
8
CPU0: D VIVT write-back cache
9
CPU0: I cache: 16384 bytes, associativity 64, 32 byte lines, 8 sets
10
CPU0: D cache: 16384 bytes, associativity 64, 32 byte lines, 8 sets
11
Built 1 zonelists in Zone order, mobility grouping off.  Total pages: 4064
12
Kernel command line: root=/dev/nfs rw nfsroot=192.168.10.116: ethaddr=00:d0:93:1c:3c:65 ip=192.168.10.22:192.168.10.116::
13
  :CMC-TC-PU2::off console=ttyS0,9600 mtdparts=cmc_pu2:128k(uboot)ro,64k(environment),768k(linux),4096k(root),-
14
AT91: 96 gpio irqs in 3 banks
15
...
Danke an alle, die noch grübeln und Jörn, der auch geschrieben hat :)

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

Ich habe noch einen Kommentar zu Openocd.

Ich benutze einen AT91SAM9260 das ist nicht ganz das gleiche.

Vielleicht hilft dir dieser Trick:
Ich lade mit openocd mit dem Debugger uboot in dem RAM an die Adresse 
0x20000000 und starte U-Boot im Ram und lade mit dem RAM gestartem 
U-boot das gleiche U-boot.bin nach und schreibe das nachgeladene U-boot 
in den Flash.

von Ulrich P. (uprinz)


Lesenswert?

Das U_Boot hat sich im Grunde erst einmal erledigt. Ich hatte halt das 
Problem, dass ich nicht wusste, warum mein Kernel nun so garnix macht. 
Dann bekam ich den Tip von demjenigen, der das Uboot für unser Teil 
geändert hat. Es war nicht die erwartete ARM CPU ID im Uboot. Nachdem 
ich das wusste, und den Kernel entsprechend geändert hatte, 
funktionierte der Kernel nahezu sofort.

Aber ich werde da noch einmmal drauf zurück kommen. Momentan liegt das 
alles aus zeigründen etwas auf Eis. Der Kernel bootet durch, aber das 
lokale und in buidlroot erzeugte FileSystem wird nicht akzeptiert. Wenn 
ich per NFS das FS aus dem ELDK anspreche, funktioniert alles.

Ich komm noch mal drauf zurück.

Gruß, und Danke
Ulrich

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

U-boot intialisiert den Flash nicht. Zumindest ist das in der 
Standardeinstellung für den AT91SAM9260 so.
Du musst im Static memory controller dein Flash anmelden.

von Ulrich P. (uprinz)


Lesenswert?

Ich habe eine eigene Board.c geschrieben für mein Modul und die Flash 
Sektionen werdem einwandfrei erkannt. Es werden auch die Dateien in den 
Sektionen erkannt und gelesen. Es ist vielmehr ein Problem, dass 
Buildroot die libc gegen einen anderen Kernel linkt, als den, den man 
angibt. Jedenfalls kann ich im buildroot output immer wider was von 
einem Kernel 2.6.8 lesen, dabei nutze ich den Kernel 2.6.28.

Das ganze Spiel endet damit, dass der Kernel einen Panik macht, weil der 
consolen Prozess stirbt. Ist schon alles ein paar Tage her, daher hatte 
ich das alles nicht mehr griffbereit.

Das uBoot selbst muss die CPU schon soweit initialisieren, dass es den 
Flash lesen kann. Und das tut es auch. Aber beim Schreiben ist das bei 
uns genutzte uBoot seeeehhhrr langsam. Das lässt auf ein größeres 
Optimierngspotential schließen. Je länger ein Update-Prozess dauert, 
desto größer die Gefahr, dass etwas schief geht. Und 10min für 3.5MB 
sind viel zu viel.
Aber zuerst muss mal das Dateisystem, repektive die libc funktionieren. 
Dann kommt der nächste Schritt. Und ein Kabel für JTAG auf Basis 
openocd-usb ist auch schon in der Mache. Aber alles aktuell auf 
kleinerer Flamme.

Ich bleib drann und melde hin und wieder den Status. Wer aber schon was 
weiß oder einen Tip hat, immer her damit ich lese hier regelmäßig und 
habe den Thread auch im abo.

Gruß, Ulrich

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

Ich habe gerade versucht auf meinen externen Flash mit openocd den 
hinteren Speicherbereich zu beschreiben.

Im Configfile den Arbeitsspeicher openocd zur Verfügung stellen.

$_TARGETNAME configure -work-area-virt 0 -work-area-phys 0x20000000 
-work-area-size 0x010000000 -work-area-backup 1


Schreibschutz entfernen

flash protect 0 off

löschen
flash erase_sector 0 64 127

flash write bank 0 xa.bin 0x00800000

fängt an und bricht zumindest mit einer Fehlermeldung ab. Ich kann noch 
nicht nachvollziehen wieviel geschrieben worden ist.

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

10800350: 480f5594 00000403 08250855 d1f485db    .U.H....U.%.....
10800360: 41ed7465 00000000 00000000 55900000    et.A...........U
10800370: 5590480f 5590480f 0000480f ffff0000    .H.U.H.U.H......
10800380: ffffffff ffffffff ffffffff ffffffff    ................
10800390: ffffffff ffffffff ffffffff ffffffff    ................
108003a0: ffffffff ffffffff ffffffff ffffffff    ................
108003b0: ffffffff ffffffff ffffffff ffffffff    ................


es wurde bis 0x37f geschrieben.

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.