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.
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
Ich denke zImage ist der gepackte Kernel und uImage der ungepackte. uImage und zImage unterscheiden sich kaum von der Größe.
Wobei der komprimierte Kernel sich selbst entpackt? Ich kann mich daran erinnern, mit "cp bzimage > /dev/fd0" einen Bootbaren Kernel bekommen zu haben ....
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 :-)
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.
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.
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.
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.
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)
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
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.
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#
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.
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.
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.
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))
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.
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>
:-) Nicht schön die Lösung , aber für den Labortisch geht das. Die PHYs laufen meistens auch ohne Initialisierung.
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.
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.