Forum: PC Hard- und Software Mini 2440 Kernel startet nicht + Displaytiming


von Emil (Gast)


Lesenswert?

Hi Leute,
ich habe ein Problem mit meinem Mini2440 256M version.

mal ne frage voren weg:
Habe ein X35 (3,5" Display) klappt das auch mit dem timing vom T35?
Da ich bis jetzt auf keiner Seite irgendwelche Infos gefunden habe, 
welche Einstellung ich bei der enviroment variable "mini2440" sonst 
nehmen soll.

Hauptproblem:
Der Kernel startet nicht.
Als Bootloader wird U-boot verwendet.
Auszug:
1
U-Boot 1.3.2-mini2440 (Feb 24 2010 - 13:04:49)
2
3
I2C:   ready
4
DRAM:  64 MB
5
Flash:  2 MB
6
NAND:  256 MiB
7
Found Environment offset in OOB..
8
USB:   S3C2410 USB Deviced
9
In:    serial
10
Out:   serial
11
Err:   serial
12
MAC: 08:08:11:18:12:27
13
Hit any key to stop autoboot:  0 
14
15
Loading from NAND 256MiB 3,3V 8-bit, offset 0x60000
16
   Image Name:   Ubuntu Kernel
17
   Created:      2011-01-10  20:33:54 UTC
18
   Image Type:   ARM Linux Kernel Image (uncompressed)
19
   Data Size:    3699900 Bytes =  3.5 MB
20
   Load Address: 80008000
21
   Entry Point:  80008000
22
## Booting kernel from Legacy Image at 32000000 ...
23
   Image Name:   Ubuntu Kernel
24
   Created:      2011-01-10  20:33:54 UTC
25
   Image Type:   ARM Linux Kernel Image (uncompressed)
26
   Data Size:    3699900 Bytes =  3.5 MB
27
   Load Address: 80008000
28
   Entry Point:  80008000
29
   Verifying Checksum ... OK
30
   Loading Kernel Image ... OK
31
OK
32
33
Starting kernel ...

Verwendet wurde der neuste kernel von www.kernel.org
Cross-Toolchain ist von Codesourcery.

Makefile Einstellungen:
1
ARCH    ?= arm
2
CROSS_COMPILE  ?= /home/emil/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-eabi-

Vorgehensweise:
1
make mini2440_defconfig
2
make uImage

das uImage wurde über eine Speicherkarte in den mini2440 geschrieben:
1
mini2440 # nand erase kernel #Löscht kernel
2
mini2440 # mmcinit #initialisiert die Speicherkarte
3
mini2440 # fatload mmc 0:1 0x31000000 uImage #Läd das Image in den Ram
4
mini2440 # nand write 0x31000000 kernel #Läd das Image in den nand flash

die umgebungsvariablen sind:
1
MINI2440 # printenv
2
bootargs=root=/dev/mtdblock3 rootfstype=jffs2 console=ttySAC0,115200
3
bootdelay=3
4
baudrate=115200
5
ethaddr=08:08:11:18:12:27
6
ipaddr=10.0.0.111
7
serverip=10.0.0.4
8
netmask=255.255.255.0
9
usbtty=cdc_acm
10
mtdparts=mtdparts=mini2440-nand:256k@0(u-boot),128k(env),5m(kernel),-(root)
11
bootargs_base=console=ttySAC0,115200 noinitrd
12
bootargs_init=init=/sbin/init
13
root_nand=root=/dev/mtdblock3 rootfstype=jffs2
14
root_mmc=root=/dev/mmcblk0p2 rootdelay=2
15
root_nfs=/mnt/nfs
16
set_root_nfs=setenv root_nfs root=/dev/nfs rw nfsroot=${serverip}:${root_nfs}
17
ifconfig_static=run setenv ifconfig ip=${ipaddr}:${serverip}::${netmask}:mini2440:eth0
18
ifconfig_dhcp=run setenv ifconfig ip=dhcp
19
ifconfig=ip=dhcp
20
set_bootargs_mmc=setenv bootargs ${bootargs_base} ${bootargs_init} ${mini2440} ${root_mmc}
21
set_bootargs_nand=setenv bootargs ${bootargs_base} ${bootargs_init} ${mini2440} ${root_nand}
22
set_bootargs_nfs=run set_root_nfs; setenv bootargs ${bootargs_base} ${bootargs_init} ${mini2440} ${root_nfs} ${ifconfig}
23
mtdids=nand0=mini2440-nand
24
filesize=25A0000
25
bootcmd=nboot.e kernel ; bootm
26
mini2440=3tb
27
partition=nand0,0
28
mtddevnum=0
29
mtddevname=u-boot
30
31
Environment size: 1119/131068 bytes

Warum startet der Kernel nicht? Falls Angaben fehlen bitte bescheid 
geben.
Grüße
Emil

von Alex (Gast)


Lesenswert?

du zitierst uboot mit:
## Booting kernel from Legacy Image at 32000000 ...

schreibst aber:
mini2440 # nand write 0x31000000 kernel #Läd das Image in den nand flash

ist das so korrekt, als laie meine ich müsste doch dann der kernel ab 
0x32000000 geschrieben werden?

von Emil (Gast)


Lesenswert?

Danke dafür,

wie ich das verstanden habe heißt das, dass er den Kernel von 0x60000 
läd und im Ram auf der adresse 0x32000000 bootet, was ja noch 
ausreichend luft nach oben lässt zum booten.

Grüße

von Markus G. (ghost91)


Lesenswert?

Die Variable mini2400, wenn ich mich richtig erinnere, konfiguriert den 
Bildschirm und Touchscreen.
In deinem Fall mit 3,5 Zoll Bildschierm wäre der richtige Wert 0tb

von Imon (Gast)


Lesenswert?

nach denn was deine Paar Zeilen uboot anzeigen scheint es so als würde 
dein Kernelimage nicht gehen. Normalerweise müste nach den

Emil schrieb:
> ## Booting kernel from Legacy Image at 32000000 ...
>    Image Name:   Ubuntu Kernel
>    Created:      2011-01-10  20:33:54 UTC
>    Image Type:   ARM Linux Kernel Image (uncompressed)
>    Data Size:    3699900 Bytes =  3.5 MB
>    Load Address: 80008000
>    Entry Point:  80008000
>    Verifying Checksum ... OK
>    Loading Kernel Image ... OK
> OK
>
> Starting kernel ...

so was wie: uncompressed done Kommen. wenn das schon nicht der fall ist 
scheint was beim erzeugen des Kernel im Argen zu liegen. der Uboot 
scheint das Image zu erkennen und seine headers zu finden sonst würde er 
es nicht versuchen zu Starten. Wie Erzeugst du das Kernelimage.

benutzt du da irgendwelche uboot tools oder gibst du das beim make des 
linux Kernel an. Ich tippe fast ersteres.

versuche mal deinen Kernel mit folgenden Aufruf zu bauen
1
 make ARCH=arm CROSS_COMPILE=/home/emil/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-eabi- -j9 uImage

Vielleicht will der dann.
deine Compiler halte ich übrigens auch nicht für die Beste Wahl, besser 
wäre einer welcher ungefähr so heist
1
arm-linux-eabi-

denn mit der Kompiler welchen du nutz ist laut Namens Convention 
eigentlich eher für bare metal Programmierung gedacht, beim Kernel kann 
das noch gut gehen aber Spätesten beim User-space sorgt das für 
Kopfschmerzen.

Ausserdem solltest du solange du keinen Funktionieren Kernel hast auf 
das Flash deiners Mini 2440 verzichten und deinen Kernel Via tftp auf 
das Board bringen und direckt starten.

Ich habe mir auf meinen Linux host hierzu den atftp installiert und in 
dessen verzeichnis einen link auf das uImage das in deinen kernel 
sourcen liegt erzeugt.

ln -s <linux-src>/arch/arm/boot/uImage uImage

dann kannst du nach dem du einen Kernel Compilert hast denn recht 
Schmerzfrei testen.

Einfach deinen uboot mit serverip und ipaddr ausstatten und dann via

tftp 0x31000000 uImage; bootm

deinen aktuellen Stand testen. Spart eine menge Zeit weil das ganze 
kopieren und Flashen Flach fällt bis du einen Stand hast der Bootet.

von Emil (Gast)


Lesenswert?

Markus Gräb schrieb:
> Die Variable mini2400, wenn ich mich richtig erinnere, konfiguriert den
> Bildschirm und Touchscreen.
> In deinem Fall mit 3,5 Zoll Bildschierm wäre der richtige Wert 0tb

nein, da ich das X35 display benutze, das ist ein neueres. 0tb ist noch 
für das alte.

@Imon
habe das uImage mit make uImage erzeugt. Wofür steht dein -j9 bei make?
Habe den kernel jetzt auf verschiedene arten kompiliert. Einmal mit 
arm-none-eabi- und einmal mit arm-linux-eabi- jeweils direkt als uImage 
und nochmal als zImage, welches ich dann mit mkimage in ein uImage 
umgewandelt habe. Also habe ich hier jetzt insgesammt 4u und 2 zImages 
hier rumfliegen...

Das verrückte ist: Die zImages funktioniert einwandfrei mit vivi. Es ist 
nur das uImage, dass nicht funktioniert.

Das KernelImage starte ich jetzt direkt von einer Speicherkarte.

Kennst du vlt. noch irgendeinen guten alternativen bootloader zu u-boot, 
der zImages startet?

Danke

von Imon (Gast)


Lesenswert?

Emil schrieb:

> @Imon
> habe das uImage mit make uImage erzeugt. Wofür steht dein -j9 bei make?
 -j9 sagt nutze 9 Instanzen von make um da nicht ewig zu warten  man 
sagt pi mal daumen 3 Instanzen Pro Kern den der Host hat bei mir sind es 
halt 3.

hast du wirklich nur make uImage gesagt?  wenn ja würde mich 
interessieren wie Dein host aussieht, abeitest du in einer ARM VM oder 
so ?  Ich dachte immer wenn man make beim Kernel aufruft ohne ARCH=xxx 
nimmt der Kernel automatisch an, das es sich um X86 handelt.

was sagt denn
1
file vmlinux
im Kernel source tree

> Habe den kernel jetzt auf verschiedene arten kompiliert. Einmal mit
> arm-none-eabi- und einmal mit arm-linux-eabi-

Ich würde arm-linux-eabi nehmen das sollte tun.

> jeweils direkt als uImage
> und nochmal als zImage, welches ich dann mit mkimage in ein uImage
> umgewandelt habe. Also habe ich hier jetzt insgesammt 4u und 2 zImages
> hier rumfliegen...
>
> Das verrückte ist: Die zImages funktioniert einwandfrei mit vivi.

was ist vivi ?

> Es ist
> nur das uImage, dass nicht funktioniert.
>
> Das KernelImage starte ich jetzt direkt von einer Speicherkarte.
>
> Kennst du vlt. noch irgendeinen guten alternativen bootloader zu u-boot,
> der zImages startet?

du kannst mit uboot auch das zImage direkt starten indem du denn Kernel 
die Commandline mit ein kompilierst das zImage in den Speicher lädst und 
mit go <addr> anspringst, als versuch vielleicht erst mal nicht schlecht
aber nicht als dauerhafte Lösung.

als alternativer Bootloader fällt mir noch redboot ein allerdings, würde 
ich dir dirngend abraten vom uboot weg zu gehen, denn ersten ist der 
uboot IMHO der bootloader welcher an weitesten verbreitet ist in der 
Embedded Linux welt. Zweites würdest du dich mit einen wesel sehr 
isoliert aufstellen und könnstest im zweifel auf wenig Hilfe hoffen und 
zu guter Letzt wenn das austauschen des uboot Schief geht warum auch 
immer kann es schwer werden wieder was zum laufen zu bringen.

Außerdem denke ich weiterhin nicht das du ein Problem mit dein uboot 
hast.
ich tippe nach wie vor eher auf ein Fehlerhaftes Kernel Image.

hast du dort was angepasst oder geändert ? und hast du mal versucht ein 
Kernel mit default Config zu laden ?

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.