Forum: Compiler & IDEs bootbarer Linuxkernel ohne Bootloader für ARM9


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


Lesenswert?

Ich will eine Linuxkernel mit RAM-Disk bauen, der in den Flash kommt und 
von Adresse 0x00000000 losläuft.
Der Bootloader startet normalerweise den Kernel und übergibt die 
Bootoptionen. Die Bootoptionen lassen sich beim Kompilieren im Kernel 
festlegen.
Es müsste doch möglich sein, uImage auf Adresse Ox0000000 zu schreiben 
und zu starten. Das habe ich probiert und das geht nicht. Vermutlich ist 
bei uImage noch ein Header im Vorspann.
Keine genaue Ahnung was hier schiefläuft. Ich weiss durch die 
Komfiguration des JTAG-Debuggers wass alles initialisiert werden muss. 
Für den Versuch hatte ich auch die wichtigen Register für die korrekten 
PLL-einstellungen und zur Erkennung des externen Speichers gesetzt.

Ich habe versucht das U-Boot zu nutzen, doch damit habe ich Probleme.
U-Boot läuft bei mir nicht vollständig, weil ich als Netzwerk phy den 
KS7821 habe und dafür gibt es keine Portierung für das aktuelle U-Boot.
Ich kann mit dem Debugger alles in den FLASH schreiben und brauchen 
somit die ganzen Funktionen von U-BOOT nicht. Momentan verliere ich mehr 
Zeit bei der Erfoschung des U-bootes und die fehlt mir für meine eigene 
Anwendung.
Deshalb wollte ich weg von der eierlegenden Wollmilchsau.
Konkret habe ich den AT91SAM9260.

von Mark .. (mork)


Lesenswert?

Kenn mich zwar nicht besonders aus, aber uImage ist ein komprimierter 
Kernel, der vom Bootloader erstmal dekomprimiert wird, bevor er 
losfäuft. Bu brauchst aber einen unkomprimierten Kernel, der sofort 
ausgeführt werden kann.

MfG Mark

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


Lesenswert?

Ich denke zImage ist der gepackte Kernel und uImage der ungepackte.
uImage und zImage unterscheiden sich kaum von der Größe.

von Gast (Gast)


Lesenswert?

Wobei der komprimierte Kernel sich selbst entpackt?

Ich kann mich daran erinnern, mit "cp bzimage > /dev/fd0" einen 
Bootbaren Kernel bekommen zu haben ....

von Claude S. (claudeschwarz)


Lesenswert?

Uiuiu so einfach wird das leider nicht.

Da fallen mir so Stichworte wie MMU , Zustand der Caches, IO Remap , 
ATAG, Die Machine Type Infos in Register R0 bis R2 ,
CPU Modus des ARMs, UARTs, etc .... ein.

Desweiteren wird der Kernel nie einfach so ab 0x00000000 starten weil 
die ersten 16kB des RAMs für die ATAGs reserviert sind die normalerweise 
der Bootloader anlegt und deren Adresse er dem Kernel übergibt.

Wo bekommt dein SAM9260 eigentlich seinen Ur-Bootloader (Nach dem Atmel 
Rom Boot , vor dem U-Boot in der Reihenfolge) her?
Vielleicht kannst Du ja diesen so erweitern das alles für den Kernel 
gesetzt ist?

Läuft dein KS7821(?) nicht mit dem Generic Phy Treiber?

Ob uImage oder zImage ist erstmal egal, das zImage bringt seinen eigenen 
Decompressor mit.

Schau Dir mal /linux-bla.bla.bla/init/main.c an, dann hast Du in etwa 
eine Vorstellung was der Kernel erwartet. Das Grundsetup für deine CPU 
mit einem JTAG zu machen halte ich für grenzwertig masochistisch :-)

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


Lesenswert?

Der generic Phy-Treiber läuft bei Linux und nicht beim U-boot zumindest 
habe ich den nicht gefunden.

Es gibt auch ein weitverbreitetes Board SAM9-L9260 von Olimex mit dieser 
Phy auf dem auch das U-Boot laufen soll, ich habe jedoch nicht den 
Quellcode gefunden, bzw. die Konfiguration zum Neukompilieren für mein 
Board.

Stimmt die Sprung-Vektoren für die Ereignisse sind da vorne.


Eigentlich sollte ich nur die Applikation verbessern und nun muss ich in 
das Linux tiefer eintauchen als ich wollte.

Ich habe ein U-boot und ein Linux-kernel die ich mit meinem 
JTAG-Dabugger in den RAM laden kann und dan starte ich das U-Boot und 
mit der seriellen Eingage des U-boots den Kernel. Mich interessiert nur 
der Kernel und das er startet. Das ist die einzige Funktion, das Booten 
anzuschieben. Ich dachte viellicht gibt es eine Möglichkeit den Kernel 
so zu kompilieren, dass er ohne Bootloader direkt losmaschiert.

von Claude S. (claudeschwarz)


Lesenswert?

Hab noch was gefunden :
http://www.simtec.co.uk/products/SWLINUX/files/booting_article.pdf

Kennst Du diesen Thread? :
http://www.mail-archive.com/u-boot-users@lists.sourceforge.net/msg04095.html

Der nimmt den Davicom Phy Treiber und setzt nur die Phy Adresse um. Bis 
zu einem gewissen Punkt sind die meisten PHYs gleich. Deswegen gibt es 
auch so etwas wie "Generic Phy" Treiber. Das der MAC des 9260 inzwischen 
macb im Uboot heißt sollte kein Problem sein , nimm einfach das aktuelle 
Davicom File aus deinem Uboot Source und passe es bezüglich der Phy 
Adresse + Init an.
Ich denke das wird Funktionieren.

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


Lesenswert?

U-Boot 2008.10-00098-gf2091f5-dirty (Jan 16 2009 - 00:04:16)

DRAM:  64 MB
Flash: 16 MB
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
Net:   macb0
macb0: No PHY present




Genau, die Anpassung der Phy habe ich nicht hinbekommen.

von Claude S. (claudeschwarz)


Lesenswert?

Und die Adresse des PHYs passt? Sind die Pins 3,4,5,6 und 25 des PHYs 
beschaltet? Die IDs aus den Registern 0x2 und 0x3 des PHYs im Treiber 
eingetragen? Unter Linux (Da geht er ja anscheinend)kann man das mit den 
mmi-tools auslesen.

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


Lesenswert?

Hallo Claude,

die Pins sind laut Schaltplan beschaltet.

Für das Linux baue ich gerade eine Ramdisk. das ich mit initrd booten 
kann.

ssc ssc.0: Atmel SSC device at 0xc4828000 (irq 14)
Fixed MDIO Bus: probed
MACB_mii_bus: probed
eth0: Atmel MACB at 0xfffc4000 irq 21 (04:25:fe:ed:00:18)
eth0: attached PHY driver [Generic PHY] (mii_bus:phy_addr=ffffffff:01, 
irq=-1)
Driver 'sd' needs updating - please use bus_type methods
usbmon: debugfs is not available
ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
at91_ohci at91_ohci: AT91 OHCI
at91_ohci at91_ohci: new USB bus registered, assigned bus number 1
at91_ohci at91_ohci: irq 20, io mem 0x00500000
usb usb1: configuration #1 chosen from 1 choice
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 2 ports detected
Initializing USB Mass Storage driver...
usbcore: registered new interface driver usb-storage
USB Mass Storage support registered.
udc: at91_udc version 3 May 2006
mice: PS/2 mouse device common for all mice
rtc-at91sam9 at91_rtt.0: rtc core: registered at91_rtt as rtc0
rtc-at91sam9 at91_rtt.0: rtc0: SET TIME!
i2c /dev entries driver
i2c-gpio i2c-gpio: using pins 55 (SDA) and 56 (SCL)
TCP cubic registered
NET: Registered protocol family 17
rtc-at91sam9 at91_rtt.0: hctosys: unable to read the hardware clock
RAMDISK: Couldn't find valid RAM disk image starting at 0.
List of all partitions:
No filesystem could mount root, tried:  ext2 cramfs
Kernel panic - not syncing: VFS: Unable to mount root fs on 
unknown-block(1,0)

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


Lesenswert?

In meinem Configfile für das U-Boot habe ich folgendes stehen.

/* Ethernet */
#define CONFIG_MACB      1
#define CONFIG_RMII      1
#define CONFIG_NET_MULTI    1
#define CONFIG_NET_RETRY_COUNT    20
#define CONFIG_RESET_PHY_R    1

von Claude S. (claudeschwarz)


Lesenswert?

Der PHY ist auch mit RMII und nicht mir MII angeschlossen? Beim Olimex 
Board ist der PHY mit MII. Das würde dann #undef CONFIG_RMII lauten.

Ich gehe jetzt mal vom aktuellen Uboot aus (GIT): Was hast Du denn in 
deiner board_blabla_dein_board.c macb_eth_initialize() für eine PHY 
Addresse drin?
Leider kenne ich deinen Schaltplan nicht , aber wenn die oben genannten 
Pins des PHYs unbeschaltet sind sollte das lauten :
1
macb_eth_initialize(0, (void *)AT91SAM9260_BASE_EMAC, 0x01);

Das 0x01 ist die Addresse..

Vielleicht wäre es hilfreich wenn Du den Schaltplan Ausschnitt mit dem 
PHY Posten würdest.

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


Lesenswert?

Ich verwende das U-Boot 2008.10-00098-
Heruntergeladen habe ich mir diese Version von www.ronetix.at.

Für ronetix habe ich mich sehr interessiert im Vorfeld. Jetzt habe ich 
eine board mit dem AT91SAM9260 und  dem KSZ8721BLI auf dem Tisch.





macb_eth_initialize(0, (void *)AT91SAM9260_BASE_EMAC, 0x01);


Die Adresse war bei mir Ox00, die habe ich auf 0x01 geändert und auch 
#undef CONFIG_RMII  eingefüht.

Den Schaltplan darf ich nicht posten auch auszugsweise, weil die Rechte 
noch ungeklärt sind.

Ich kann die Beschaltung verbal beschreiben.

PIN PHY Bus

1 MDIO
2 MDC
3 MII RXD3
4 MII RXD2
5 MII RXD1
6 MII RXD0

9 MII RXDV
10 MII RX CLK
11 MII RXER
14 MII TXer
15 MII TXCLK
16 MII TXEN

17 MII TXD0
18 MII TXD1
19 MII TXD2
20 MII TXD3

21 mit Widerstand 1k auf GND
22 mit Widerstand 1k auf GND

26 LNK
27 SPD
28 offen
29 offen
30 3,3V
34 offen
37 mit Widerstand 6,49k auf GND
46 25MHZ
45 offen
48 Reset#

von Claude S. (claudeschwarz)


Lesenswert?

Hallo René,

/OT
ich kann dein Leid gut verstehen , mal kurz ne Anwendung optimieren und 
dann Tagelang in den Tiefen des Systems rumwühlen . Genau aus diesem 
Grund bin ich gestern auch wieder vor dem Uboot Source gehockt, bei mir 
ging der USB Host nicht :-)
OT/

Hast du im Uboot die mii tools aktiviert ? Ist mir erst gestern 
aufgefallen das Uboot da was mitbringt. Mit "mii info" kann man sich den 
PHY anzeigen lassen, "mii read x y" (x = register , y=adresse) den PHY 
auslesen. Wird in deiner board_xx.c der MDIO/MII Port des PHYs vor der 
PHY Initalisierung auf Pullup o.ä. geschalten? Da gibt es anscheinend 
öfter Probleme wenn keine HW Pullups am PHY sind:
http://www.mail-archive.com/u-boot-users@lists.sourceforge.net/msg01992.html

Jedenfalls , wenn das "mii info" geht den Wert von OUI in deinen PHY 
Treiber reinhacken.

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


Lesenswert?

Was ich bei U-Boot vermisse ist, eine vernünftige Oberfläche zum 
Konfigurieren.

make xconfig

wie bei Linux. So findet man immer mal etwas neues womit man sich soch 
lange die Arbeit erleichtern hätte können.

Und die Define sind so gefährlich, wenn ein define fehlt, dann kann 
unter Umständen ein ganzer Teil unwirksamsein ohne das man es bemerkt. 
Ohne Warnung beim Kompilieren.

Die mii Tools kenne ich nicht. Das klingt sehr interessant.

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


Lesenswert?

Hallo Claude,

ich habe die mii tools nicht gefunden. Den Befehl mii info habe ich 
nicht.
In welcher U-boot Version hast du das gefunden?

Auf der Homepaage von DENX habe ich auch keine Hinweise von den mmi 
Tools gefunden.

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


Lesenswert?

Ich habe in den Datei config comands all.h

Dien Befehl   CFG_CMD_MII  gefunden. Da bekome ich noch kein 
zusätzlichen Befehl mii in meinem Eingabeprompt.

#define CONFIG_COMMANDS          \
      ((CONFIG_CMD_DFL    | \
        CFG_CMD_NET      | \
        CFG_CMD_MII      | \
        CFG_CMD_DIAG      | \
        CFG_CMD_PING      | \
        CFG_CMD_ENV      | \
        CFG_CMD_ASKENV    | \
        CFG_CMD_USB      | \
        CFG_CMD_FLASH      | \
        CFG_CMD_JFFS2     | \
        CFG_CMD_AUTOSCRIPT    | \
        CFG_CMD_DHCP      | \
        CFG_CMD_FAT )      & \
      ~(CFG_CMD_IMLS      | \
        CFG_CMD_FPGA      | \
        CFG_CMD_MISC      | \
        CFG_CMD_LOADS))

von Claude S. (claudeschwarz)


Lesenswert?

Habe es hier in einem U-Boot 1.3.3
1
U-Boot 1.3.3 (Jan 29 2009 - 16:58:06)
2
3
CT3 (c) 2009 iPLON GmbH
4
5
Clock settings:
6
CPU   : 210 MHz
7
Master: 105 MHz
8
PLL A : 210 MHz
9
PLL B : 96 MHz
10
USB   : 48 MHz
11
12
I2C:   ready
13
DRAM:  32 MB
14
NAND:  32 MiB
15
WDC:   disabled
16
In:    serial
17
Out:   serial
18
Err:   serial
19
Net:   macb0
20
macb0: link down (status: 0x7849)
21
Press SPACE to abort autoboot in 1 seconds
22
CT3 # mii info
23
PHY 0x01: OUI = 0x039C, Model = 0x23, Rev = 0x07, 100baseT, FDX

PHY Treiber nutze ich eigentlich keinen , sondern nur den macb Treiber 
der mit jedem PHY spricht der als PHYSID1 nicht 0xffff hat.
Das wäre noch eine idee , kommentiere doch mal im macb.c den Teil mit
1
if (phy_id == 0xffff) {
2
......
3
.....
aus.

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


Lesenswert?

Na das ist der Hammer,
und das funktioniert sogar. Da stellt sich U-boot mehr als ein Bein.

U-Boot 2008.10-00098-gf2091f5-dirty (Jan 30 2009 - 10:18:21)

DRAM:  64 MB
Flash: 16 MB
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
Net:   macb0
macb0: link up, 100Mbps full-duplex (lpa: 0xffff)
IPCam> tftp 0x22080000 uImage
macb0: link up, 100Mbps full-duplex (lpa: 0xffff)
Using macb0 device
TFTP from server 192.168.30.254; our IP address is 192.168.30.11
Filename 'uImage'.
Load address: 0x22080000
Loading: ####T 
#############################################################
         ############
done
Bytes transferred = 1125456 (112c50 hex)
IPCam>

von Claude S. (claudeschwarz)


Lesenswert?

:-)
Nicht schön die Lösung , aber für den Labortisch geht das.
Die PHYs laufen meistens auch ohne Initialisierung.

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


Lesenswert?

Ich habe mir das Datenblatt von der Phy angeschaut und mit meinem 
Schaltplan verglichen, es ist ein Pullup von 4,7k an MDIO.

Du meinst, für die Serie sollte der Hardwerker nochmal ran.

von Claude S. (claudeschwarz)


Lesenswert?

Hmm schwer zu sagen , vorallem was hält dein Hardwerker davon wenn Du 
sagst: "So ein Typ im Internet meint da gehört was geändert!" ?? ;-)

Ein Review des Schaltplans kann aber bestimmt nicht schaden , vielleicht 
ist der Fehler auch an einer ganz anderen Ecke (Resets,Timming,Ripple 
o.Ä. auf VCC,Software,PEBKAC / OSI Layer 8,......) zu suchen.

von andrej (Gast)


Lesenswert?

Ich möchte gerne einen Linux Kernel auf einem AVR32 mit 1MB SRAM direkt 
aus dem Flash laufen lassen. Mein Eindruck ist, dass Ihr das selbe 
Problem habt. Ist es überhapt möglich den Kernel direkt auszuführen? Hat 
jemand erfolg damit gehabt?

Gruss

Andrej

von hullubullu Seitz (Gast)


Lesenswert?

Hallo, woher habt ihr die i2c unterstützung?
Ich benutze eine at91sam9260  und finde im uboot keinen i2c treiber.

danke

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.