Ursache für 'Kein System'

Diskussionen um Bootloader, Kernel, Busybox
JtG-Riker
Image-Team
Beiträge: 1015
Registriert: Freitag 7. Februar 2003, 18:37

Beitrag von JtG-Riker »

kroki hat geschrieben:@all

Also ich hab jetzt alles mit bestem Wissen getestet :

Die Fehler-Erkennung mit checkImage hat bis jetzt immer einwandfrei funtioniert. Ich habe bis jetzt kein Image mehr geflascht was nicht funktioniert.
Die Änderungen im Squashfs/U-Boot für die anderen Blockgrößen und den -check_data Bug funktionieren auch ohne Prob es.

Jetzt die Frage an die Dev es : Übernimmt ihr die Patche ins cvs ??

Gruß Kroki
Da man ja nun testen kann ob das Image okay ist sollte man die SquashFS Sachen so belassen wie sie sind, sonst gibts da nachher auch wieder Probleme und es gibt auch so schon genug Konfigurationen.


Riker
e46ti
Interessierter
Interessierter
Beiträge: 74
Registriert: Montag 14. Februar 2005, 10:10

Beitrag von e46ti »

OK, es ist offensichtlich alles gesagt.

Ich schlage deshalb vor, hier an dieser Stelle den thread zu schließen.

e46ti
DieMade
Oberlamer, Administrator & Supernanny
Beiträge: 10532
Registriert: Samstag 13. Juli 2002, 10:49

Beitrag von DieMade »

Geschlossen wird ein Thread nur unter gewissen Bedingungen :)

Du "klingst" leicht angesäuert, was mich zu diesem Kommentar veranlasst hat.

JtG-Riker hat es eigentlich schon auf den Punkt gebracht, jede Änderung am Kernel oder sonstigen Tools muß auch gepflegt werden bei Releasewechseln. Das ist jetzt schon ein erheblicher Aufwand, den man auch in meinen Augen nicht "unnötig" weiter erhöhen sollte.

Deine Forschung hat zu wertvollen Erkentnissen in Bezug auf die Bootproblematik geführt, woraus dann checkImage entstanden ist, welches als eigenständige Applikation sicher auch einfacher zu "warten" sein wird als ein großer Rundumschlag bei Kernel, Tools und Co. :)
There are 10 types of people in the world: those who know binary and those who don't
e46ti
Interessierter
Interessierter
Beiträge: 74
Registriert: Montag 14. Februar 2005, 10:10

Beitrag von e46ti »

Hat sich vielleicht so angehört, bin ich aber nicht... :D

Es steht ja weiter oben wie es geht und lesen bzw. die suche Funktion hat ja auch noch niemandem geschadet.

Aber den Fehler mit den fragment_ blocks in den u-boot squashfs sourcen sollte doch mal korrigiert werden. Da muß ja nichts gepflegt werden --> Fehler korrigieren und fertig.

e46ti
derget
Contributor
Beiträge: 1608
Registriert: Samstag 28. Juli 2001, 00:00

Beitrag von derget »

Moin

So ich hab gerade durch zufall mal ins cvs gekukt und da was feines gefunden, was mich schliesslich hierher brachte.

Und da alexw sich ja auch schon zu Wort gemeldet hat wollte ich hier auch noch was klarstellen.

Mein Wissen und meine Rescherschen über das "kein system" Problem waren absolut nicht unpublic, sie waren nur noch so sehr unreif das ich das Programm dazu damals nicht ins cvs eingecheckt hatte, und das dann auch mangels Zeit und Interteresse nicht weiter verfolgt habe.

Mir hätte halt mal wer ne Mail schicken sollen, dem hätte ich die Infos gerne zur verfügung gestellt.

Aber das Meistste habt ihr wohl jetzt schon selber rausgefunden.

Trotzdem hier nun meine Erkenntnisse.
Mein Programm (war auch nur crap) hab ich gerade gesucht und nicht mehr gefunden :( aber aus meinen Chatlogs und meinem Gedächnis kann ich das meiste rekapitulieren.

1.
Bei den ganzen betrachtungen muss man zwischen 1x und 2x Boxen unterscheiden, das liegt dadran das br das Flash bei 2x anders aufteilt als wir und zwar besser :)

bei 2x haben wir zwei 4 Mb grosse Flashes mit je 16 bit daten breite in den Boxen.
diese werden in hardware zu einem virtuellen Flash zusammengefürt das dann 8Mb gross ist und 32 bit daten breite hat und so liegen die Flashes auch für die cpu im 32 bit mode vor

das ganze sorgt aber dafür das ein tolles feature von 2x Anordnungen wieder rückgängig gemacht wird.
Nähmlich das feature das die beiden 4 Mb Flashes aus 64kb grossen errase Regionen bestehen.

Durch die 32 bit Ansteuerung und die dadurch "interlaced" angeordneten Daten wird die erase size auf 128k erhöht.

Das Hardware mässige verschalten der beiden Flashes seitens Nokia
wird aber nur vom Bootloader benutzt, weil der ja für die cpu accesseble sein muss und weil die cpu im 32 bit daten mode arbeitet ...

Br macht ab da dann aber das "interlacen" wieder rückgänging und benutzt beide flash bausteine linerar hintereinadergeschaltet für ihr flfs
was den vorteil hat das die erasesize nur 64kb beträgt (wobei dafür unnötig offt bytes geswappet werden müssen vom br kernel)

Hierzu mal ein "Bild" das ich vor Jahren gezeichnet habe :)

============ =============
= Flash I == == Flash II =
============ =============
= AA BB == == CC DD = 0x0 - 0x10000Bootloader
= EE FF == == GG HH =
============ =============
= AA BB == == GG HH = 0x10000 - 0x400000FLFS
= CC DD == == II JJ =
= EE FF == == KK LL =
============ =============

hmpf irgentwie sucks meine AscII art hier. Besser sieht man es auf
http://noernet.de/flfs.data

So unter linux benutzen wir diesen üblen Trick nicht, wir sprechen das Flash über den ganzen bereich im 32 bit Modus an und schreiben interlaced in beide Flashes.

Das muss man im Kopf haben weil der Bootloader bei 2x im Flash nach den Magics im 16 bit modus sucht und das bei 2x auch noch im 64k schritten und nicht wie auf 1x in 128k schritten.

Das ist aber halb so wild wenn man mal verstanden hat wie das funktioniert.

Deshalb die nächsten Sachen nur für 1x varianten, 2x is nur eine Abwandlung davon ...

2.
das flfs besteht aus 63 Sectoren ah 128k auf 1x
aus 126 sectoren ah 64k auf 2x

Wie die Sectoren im Flash verteilt sind muss keiner logischen Reihenfolge unterliegen, d.h. wo der erste Sector liegt ist egal und wo die anderen Sectoren liegen ist auch egal, d.h. 2 muss nicht hinter 3 liegen etc ...

vom Bootloader wird das gesamte flfs nach der Anfangsmagic vom ersten Sector gescannt diese lautet "0xf0, 0xa4, 0x03, 0x01"

d.h. diese Magic darf an keinem Sector anfang stehen (also bei 2xi NIE
alle 64kb und bei 1xi NIE alle 128kb)

3.
so nur nicht der Anfang sondern auch das Ende der Sectoren wird vom Bl
untersucht.
Das Ende ist nähmlich der Schlüssel um zu erkennen um welchen Sector es sich handelt

Da spielt der erste Sector wieder eine besondere Rolle bei ihm steht am Ende 0xFF, 0xFF, 0xC3, 0xFE

Dieses darf so nur bei dem Sector stehen der am Anfang das "0xf0, 0xa4, 0x03, 0x01" hat

so und nun sind wir da wo ich vor 1 Jahr aufgehört habe :)

4.
noch ein paar nicht ausprobierte Theorien zu dem Sector Ende
die Sectoren sind durchgezählt was durch die 4 letzten bytes am ende dargestellt wird

Sector 1 btw hm ich seh grad es ist eigentlich Sector 0 :)
ist da ja besonders mit 0xFF, 0xFF, 0xC3, 0xFE

das wichtige ist da das 0xFE
alle anderen haben 0xFF

in welchem sector man ist erkennt man an dem 2ten byte
0xFF ==> sector 0
0xFE ==> sector 1
0xFD ==> sector 2
etc ...
siehe auch mkfls.c
sector_63 hat 0xFF, 0xc0, 0xC3, 0xFF
0xc0 = 255 - 63

Jetzt ist die frage wie pingelig der Bootloader da ist

das wollte ich eigentlich mal reverse assemblen aber dazu binn ich noch nicht gekommen :)

meine Theorie währe das sobalt der Bootloader einen sector 2x mal findet
dann ist er der meinung das da was kaput ist :)

z.b. wenn er 2x 0xFF, 0xFA, 0xC3, 0xFF
oder 2x 0xFF, 0xDD, 0xC3, 0xFF
oder 2x 0xFF, 0xCF, 0xC3, 0xFF
etc ...
am ende der Sectoren findet.

Wobei es auch gut sein könnte das er die Bytes die sich eh nicht ändern bei dem Check sogar ignoriert.


So soweit mal die Infos von mir

macht da mal fleissig weiter

derget
Hollo
Einsteiger
Einsteiger
Beiträge: 226
Registriert: Mittwoch 22. August 2001, 00:00

Beitrag von Hollo »

Mal nach oben geholt, gibt es da schon eine einfache Lösung "bad magic bytes" zu verhindern ?

mfg Hollo
Nokia 2xA bmon 1.0 Kabel Avia 500
Sagem 1xI bmon 1.3 Kabel Avia 600L
eule
Erleuchteter
Erleuchteter
Beiträge: 585
Registriert: Mittwoch 10. Oktober 2001, 00:00

Beitrag von eule »

Auch mal wieder nach oben geholt.

Wie kann ich bei newmake die UBoot-Partition nach hinten setzen, wenn ich ein Squashfs-Image erstellen möchte? Ich kann zwar die Größe definieren, aber nicht die Lage der Partitionen?
hannebamb(el)
Foren-Moderator
Beiträge: 297
Registriert: Montag 11. Oktober 2004, 14:51

Beitrag von hannebamb(el) »

hmm, über den offset parameter könntest du das nach hinten verlagern
static struct mtd_partition my_partitions[] = {
{
name: "user (2048K)",
size: 0x200000,
offset: 0x0
}
};
Den Offset solltest du hinten halt wieder abziehen
Barf
Developer
Beiträge: 1475
Registriert: Dienstag 4. Februar 2003, 22:02

Beitrag von Barf »

eule hat geschrieben:Wie kann ich bei newmake die UBoot-Partition nach hinten setzen, wenn ich ein Squashfs-Image erstellen möchte?
Not supported. Ich sehe nicht ein, warum dies sinnvoll sein soll.
MarcM
Foren-Moderator
Beiträge: 1119
Registriert: Sonntag 9. Juni 2002, 13:28

Beitrag von MarcM »

Gibts mittlerweile irgendwas Userfreundliches, was die bad Magics verhindert ?

Ich wollt gerade ein squashFS-Image bauen....lösche ich alle Neutrino-Sprachen bis auf deutsch & englisch kommt
make[1]: Leaving directory `/tuxbox/head/apps/tuxbox/tools/camd'
powerpc-tuxbox-linux-gnu-strip --remove-section=.comment --remove-section=.note /tuxbox/cdkflash/var-neutrino/bin/camd2
[ -x /tuxbox/customscripts/var-neutrino-local.sh ] && /tuxbox/customscripts/var-neutrino-local.sh /tuxbox/cdkflash /tuxbox/head/cdk || true
/tuxbox/cdk/bin/mkfs.jffs2 -b -e 131072 -p -r /tuxbox/cdkflash/var-neutrino -o /tuxbox/cdkflash/var-neutrino.jffs2
/tuxbox/head/hostapps/flash/flashmanage.pl -i /tuxbox/cdkflash/neutrino-squashfs.img2x -o build \
--rootsize=0x660000 \
--part ppcboot=/tuxbox/cdkflash/squashfs.flfs2x \
--part root=/tuxbox/cdkflash/root-neutrino.squashfs \
--part var=/tuxbox/cdkflash/var-neutrino.jffs2
/tuxbox/cdk/bin/checkImage /tuxbox/cdkflash/neutrino-squashfs.img2x || mv /tuxbox/cdkflash/neutrino-squashfs.img2x /tuxbox/cdkflash/neutrino-squashfs.img2x_bad
check 'neutrino-squashfs.img2x' for bad magic bytes.
!!! If you flash this image these bytes cause 'no system' !!!
[ -x /tuxbox/customscripts/neutrino-squashfs.img2x-local.sh ] && /tuxbox/customscripts/neutrino-squashfs.img2x-local.sh /tuxbox/cdkflash /tuxbox/head/cdk || true
marc@Notebook:/tuxbox$
lass ich sie drin gehts...das kanns doch nicht sein...

Marc
e46ti
Interessierter
Interessierter
Beiträge: 74
Registriert: Montag 14. Februar 2005, 10:10

Einfachere Lösung

Beitrag von e46ti »

:gruebel: :gruebel: :gruebel:

e46ti
mohousch
Einsteiger
Einsteiger
Beiträge: 362
Registriert: Mittwoch 14. Dezember 2005, 03:25

Beitrag von mohousch »

wie man das verhindert? mein Wissens nach gibt es bis jetzt nichts oder muss man AlexW fragen:)

Tipp:man kann die byte versetzen in dem man z.B in einer Datei was unötiges löscht (z.B die Datei .version) oder halt reduce libs nochmal aufrufen.
zonie
Interessierter
Interessierter
Beiträge: 26
Registriert: Donnerstag 1. März 2007, 02:19

ein paar infos zum BMon1.0

Beitrag von zonie »

Hallo,

ich hab mich in den letzten Tagen ein wenig mit den Eingeweiden meines BMon1.0 rumgequält. Ich selbst hab eine Nokia dbox2 mit 2xAMD Flash.
Als ich vor ein paar Tagen ein selbst erstelltes Image flashen wollte, bekam ich schon die Ansage, dass es wahrscheinlich nicht funktionieren wird - und: genauso kam es mit folgender Fehlermeldung.

Code: Alles auswählen

Flash superblock not ok: Invalid argument
Und dem berühmten 'kein System' auf dem Display.

Dachte mir 'das kann doch nicht wahr sein' und fing an zu suchen.
Bei meinen Nachforschungen bin ich auf Folgendes gestossen.

derget (bissl weiter oben) hat ja schon aufgezeigt, wie der bmon sich den Flash-Speicher beim Suchen eines bootbaren Blocks anschaut.

Für meine dbox sieht das Ende eines Blockes ja ungefähr so aus:
(links der Baustein für die Bits 0-15, rechts der für 16-31; PPC ist ja big endian; jeder Buchstabe entspricht hier 2Byte/ein Halbwort)

Code: Alles auswählen

0x1FFE4:  A | B
0x1FFE8:  C | D
0x1FFEC:  E | F
0x1FFF0:  G | H
0x1FFF4:  I | J
0x1FFF8:  K | L
0x1FFFC:  M | N
Der bmon fängt hinter dem ersten (seinem) Block der Reihe nach an, das Ende jedes einzelnen Blockes zu untersuchen. Damit er diesen als würdig ansieht, müssen folgende Bedingungen erfüllt sein:

Code: Alles auswählen

1. M 'AND' 0xFC00 == 0xC000
2. I 'XOR' K == 0xFFFF
3. I < 0x3E (für 2x Flash; für 1x Flash vermutlich 0x7E)
4. M[29:31] == b110 (die letzen 3 Bits müssen 6 ergeben)
5. MN != 0x0000FFFF
Sind alle Bedingungen erfüllt, so wird dieser Block fürs Booten 'in Erwägung gezogen'.
Warum nicht der erste gefundene Block verwendet wird liegt daran, dass
der BMon wirklich jeden Block untersucht und nur den zuletzt gefundenen nachher auswählt.

Mit dieser Strategie hat man sich aber ein Problem eingehandelt.
Gibt es zufällig hinter dem eigentlichen 'Boot-Block' einen weiteren Block der den (in meinen Augen eher sehr schwachen Anforderungen) genügt, so wird dieser ausgewählt und wenn dann etwas schiefgeht, streikt die box.

Dieser Umstand kann nun die Ursache dafür sein, dass es manchmal eben nicht funktioniert und eben immer genau dann läuft, wenn der 'Boot-Block' der allerletzte ist.

Barf hatte ein paar Zeilen weiter oben bemerkt, dass es keinen Grund gibt ein Verlegen der Boot-Partition zu unterstützen.
Vielleicht ja doch? ... ;)
dietmarw
Contributor
Beiträge: 1833
Registriert: Mittwoch 10. April 2002, 15:39

Beitrag von dietmarw »

hmmm.. n versuch wärs wert..
zonie
Interessierter
Interessierter
Beiträge: 26
Registriert: Donnerstag 1. März 2007, 02:19

Re: ein paar infos zum BMon1.0

Beitrag von zonie »

Code: Alles auswählen

1. M 'AND' 0xFC00 == 0xC000
2. I 'XOR' K == 0xFFFF
3. I < 0x3E (für 2x Flash; für 1x Flash vermutlich 0x7E)
4. M[29:31] == b110 (die letzen 3 Bits müssen 6 ergeben)
5. MN != 0x0000FFFF
korrekt muss es heissen:

Code: Alles auswählen

5. AC != 0x0000FFFF
[code]
zonie
Interessierter
Interessierter
Beiträge: 26
Registriert: Donnerstag 1. März 2007, 02:19

Re: ein paar infos zum BMon1.0

Beitrag von zonie »

zonie hat geschrieben:

Code: Alles auswählen

0x1FFE4:  A | B
0x1FFE8:  C | D
0x1FFEC:  E | F
0x1FFF0:  G | H
0x1FFF4:  I | J
0x1FFF8:  K | L
0x1FFFC:  M | N
...

Code: Alles auswählen

1. M 'AND' 0xFC00 == 0xC000
2. I 'XOR' K == 0xFFFF
3. I < 0x3E (für 2x Flash; für 1x Flash vermutlich 0x7E)
4. M[29:31] == b110 (die letzen 3 Bits müssen 6 ergeben)
5. AC != 0x0000FFFF
Ohje. Es ist ja sogar noch schlimmer als ich bisher angenommen habe. Die 5 Bedingungen, die ich angab, sind nur eine Variante.

Es treffen nämlich folgende zu:

Code: Alles auswählen

1. M 'AND' 0xFC00 == 0xC000
2. M[29:31] == b110 (die letzen 3 Bits müssen 6 ergeben)
3. AC != 0x0000FFFF
Und dieser Fall tritt nämlich alle Nase lang auf. Ich hab in meinem Image gleich noch 2 zusätzliche Blöcke, die diesen Bedingungen genügen und beide kommen hinter dem u-boot Block.

Just for info: mein Original-Betanova-Image hat den 'Bootblock' (flfs) ab Adresse 0xc0000 (incl. BMon) im Flash stehen. Scheint also keine allzugroße Sünde zu sein, wenn der 'u-boot' nicht direkt hinterm BMon steht?!

Im Original Betanova-Image hat auch jeder Block des relevanten Flashs am Ende eine bestimmte Signatur:

C3 FF

ausser dem Bootblock, denn der hat

C3 FE

Das Problem rührt nun wahrscheinlich daher, dass der BMon den gesamten Flash als flfs-formatiert ansieht, dies aber hier nur für unseren 2nd-Stage-Bootloader-Block zutrifft.

Was ist denn alles nötig, um den 2nd-Stage-Bootloader zu verschieben?
kroki
Einsteiger
Einsteiger
Beiträge: 166
Registriert: Dienstag 22. Juni 2004, 22:12

Beitrag von kroki »

Hi,

es muss der Kernel angepasst werden, U-Boot und flashmanage.pl.

Und im Neutrino das Update, von enigma hab ich keine Ahnung :lol: .

Kroki
zonie
Interessierter
Interessierter
Beiträge: 26
Registriert: Donnerstag 1. März 2007, 02:19

Beitrag von zonie »

kroki hat geschrieben:Hi,

es muss der Kernel angepasst werden, U-Boot und flashmanage.pl.

Und im Neutrino das Update, von enigma hab ich keine Ahnung :lol: .

Kroki
Nur noch mal zum Rekapitulieren:

flashmanage.pl:
Damit die Partitionen auch tatsächlich da landen, wo sie vom u-boot erwartet werden

u-boot:
Da reicht doch das anpassen des CFG_FS_PART(0|1)_OFFSET.

kernel: an welcher stelle?

neutrino:
spaeter ;)

Übrigens hab ich hier ein Yadi und da ist der u-boot schon in sektor 63.
Hat da schon jemand dran gebastelt?
kroki
Einsteiger
Einsteiger
Beiträge: 166
Registriert: Dienstag 22. Juni 2004, 22:12

Beitrag von kroki »

Kernel -> linux/drivers/mtd/maps/dbox2-flash.c


PS: Wenn du den Thread von Anfang an gelesen hast, sollte dir aufgefallen sein, daß das Problem auch auftritt, wenn der Bootloader hinten liegt!


Kroki