Ursache für 'Kein System'

Diskussionen um Bootloader, Kernel, Busybox
e46ti
Interessierter
Interessierter
Beiträge: 74
Registriert: Montag 14. Februar 2005, 10:10

Beitrag von e46ti »

@AlexW,

ich habe mit Deiner Einstellung zu diesem Thema kein Problem. Gut es ist zeitaufwendig, den Weg den Du schon gegangen bist nochmal zu gehen, aber das macht ja auch Spaß.
P.S.: Die Idee mit dem "sperren" der letzten Bytes des Sektorenendes hatte ich auch mal ;)
Dieser Aussage entnehme ich, daß Du diese Idee wieder verworfen hast. Was die squashfs sourcen angeht, ist dies auch sicherlich nicht so ganz einfach - zum Thema cramfs kann ich in diesem Zusammenhang nichts sagen -.

Die Variation der block_size bietet ja auch eine Möglichkeit das Problem zu umgehen. Nachteil ist halt der Verlust an compression bei der kleineren block_size. Mal schauen, vielleicht läßt sich ja die max block_size auf 131072 bytes erhöhen, hierbei sollte es dann falls möglich nicht zu dem Verlust kommen.

e46ti
petgun
Tuxboxer
Tuxboxer
Beiträge: 5001
Registriert: Montag 11. November 2002, 15:26

Beitrag von petgun »

Hi,
..nochmal sorry fuer eine dumme Frage: Warum schreibt hier keiner der Ahnungstraeger einen neuen Bootloader? Gibt's diese SuperBlocks, MagicWords, Geheimnisse, Imagecheck auch bei 'normalen' Linux Systemen?

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

Beitrag von DieMade »

Den Ansatz gab es schonmal, u-boot kann ja auch als first level Bootloader fungieren.

Allerdings möchte ich das Geschrei nicht hören, wenn hunderte User sich den BMon zerflashen und die Box danach ein Fall für den Service ist (so einträglich das ja auch wäre.....*g*).
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 »

Hi,

die Idee ist auch nicht schlecht :D

Nur schade das die flash Bausteine nicht gesockelt sind...

e46ti
mash4077
Tuxboxer
Tuxboxer
Beiträge: 4654
Registriert: Samstag 27. April 2002, 13:19

Beitrag von mash4077 »

Hi,

weiß man denn, wie die Hardware initalisiert werden muss, oder müsste man das erst noch loggen?

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

Beitrag von DieMade »

Meine hier schon *duck & wech*
There are 10 types of people in the world: those who know binary and those who don't
mash4077
Tuxboxer
Tuxboxer
Beiträge: 4654
Registriert: Samstag 27. April 2002, 13:19

Beitrag von mash4077 »

Man könnte sich jawohl mit u-boot zumindest die FLFS-Partition sparen, oder?

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

Beitrag von DieMade »

u-boot wäre dann der BMon, also braucht es auch kein flfs mehr, richtig.

Es fehlen wohl noch ein paar Init-Routinen, um aus u-boot einen vollwertigen BMon zu machen. Ich hab das auch nicht weiter verfolgt, es spricht IMHO zu viel dagegen und zu wenig dafür.
There are 10 types of people in the world: those who know binary and those who don't
mash4077
Tuxboxer
Tuxboxer
Beiträge: 4654
Registriert: Samstag 27. April 2002, 13:19

Beitrag von mash4077 »

Passt der u-boot überhaupt in die 128kb?

Dafür sprechen würde dann mindestens folgendes:

- Platzersparnis
- Kein "Kein System" bei korrektem Image
- Weniger Flashprobleme

Dagegen spricht (wie immer):

- Es muss jemand Zeit/Aufwand investieren, der sich damit auskennt ;-)

Gruß
mash
mogway
Semiprofi
Semiprofi
Beiträge: 1287
Registriert: Montag 30. Dezember 2002, 08:02

Beitrag von mogway »

alexW hat geschrieben:Das einzige was ich nicht will, ist dass meine Arbeit geklaut und unerlaubt veroeffentlicht wird.
Wie du ja selbst schon festgestellt hat, wurde ueber Nacht die Erkennung scheinbar um ein grosses Wissen erweitert. Da dies aber nicht durch eigene Forschung desjenigen, sondern durch Kopie aus meinem Quellcode geschah, ist das nicht erlaubt. Der Quellcode meines Programms steht unter (c) und ich habe keinem die Erlaubnis dazu gegeben ihn zu veroeffentlichen.
Nur einmal zur Klarstellung. Da ich den Quelltext von alexW nicht habe und auch nie gesehen habe, kann ich schlecht beurteilen, ob dieser mit meinem identisch ist. Es ist auch nicht über Nacht Wissen in mein Hirn geflossen. Richtig ist, dass ich von jemanden der damals eigenständig aber zeitgleich wie alexW dieses Problem analysiert hat, die Vorgehensweise des Bmons erklärt bekommen habe.

Mit diesen Ergebnissen hat derjenige damals auch eine eigene Lösung erstellt, welche soweit mir bekannt ist, in etwa den gleichen Kenntnisstand hatte wie das damalige von alexW. Im Zuge der damaligen Forschung wurde später auch gegenseitig Codezeilen ausgetauscht. Leider gibt es von dem ursprünglichen Code keine Kopie. Und da dieser mittlerweile stark verändert wurde, kann man dieses heute auch schlecht beweisen. Angeblich hat alexW an leicht veränderten Werten erkannt, dass die Vergleichsoperanten von Ihm stammen. Da ich den Code von alexW nicht kenne, kann ich dieses aber nicht beurteilen. Wenn dem aber so ist, dann ist es meiner Meinung nach nicht in Ordnung. Somit habe ich beschlossen, meinen Code aus dem CVS zu entfernen.
Dirch hat geschrieben:Und das du ein paar tage investiert hast um das rauszufinden is ja super. Ich denke hier haben sehr viele leute zeit investiert. Nur ganz wenige sind aber auf ihrere arbeit hocken geblieben wie eine eifersuechtige henne auf ihrem ei. Was haelt dich eigentlich davon ab das tool einzuchecken, ruhig unter deinem (c)?

Also wenn du dich so anstellst darfst du dich imho nicht wundern wenn ein anderer sich noch mal die arbeit macht (sehr schade um die zeitverschwendung) oder deine arbeit reversed und das dann allen zur verfuegung stellt.

Also welchen vorteil hast du denn dadurch das nicht public zu machen? :gruebel:

Wenn sich alle so anstellen wuerden dann gaebe es diese projekt gar nicht und DU waerst auch gar nicht in der lage gewesen dieses tool zu basteln. Also denk doch mal etwas weiter . . . .
full ACK

Gruß
mogway
rasc
Senior Member
Beiträge: 5071
Registriert: Dienstag 18. September 2001, 00:00

Beitrag von rasc »

wie hiess es im Channel doch so schoen? SCO-Tage...
essu
Tuxboxer
Tuxboxer
Beiträge: 2452
Registriert: Montag 21. Oktober 2002, 10:04

Beitrag von essu »

mogway hat geschrieben:[...]Leider gibt es von dem ursprünglichen Code keine Kopie. Und da dieser mittlerweile stark verändert wurde, kann man dieses heute auch schlecht beweisen. Angeblich hat alexW an leicht veränderten Werten erkannt, dass die Vergleichsoperanten von Ihm stammen. Da ich den Code von alexW nicht kenne, kann ich dieses aber nicht beurteilen. Wenn dem aber so ist, dann ist es meiner Meinung nach nicht in Ordnung. Somit habe ich beschlossen, meinen Code aus dem CVS zu entfernen.
[...]
Wer sein (c) nicht geltend macht (z.B. durch frühere Veröffentlichung) und auch nicht nachweisen kann, dass irgendwelcher Code von ihm stammt, sollte auf dieses (c) auch nicht bestehen, sonst könnte man ihn einfach nur für albern oder dumm halten.
Für mich gibts keinen Grund den Code nicht ins CVS zu stellen (natürlich unter GPL - wo sind wir denn hier).
Schon gelesen ???
ENIGMA-DOC
mws
Developer
Beiträge: 331
Registriert: Freitag 7. Februar 2003, 22:17

Beitrag von mws »

in einem projekt, wo manche trotz open source und gemeinsamkeit immer noch ihre eigenen vorteile ziehen wollen, leider ...

<meineMeinung>
diese seite von alexw kannte ich bis gestern auch noch nicht,
aber ein (c) an werten festzumachen, die man per

if ( byte[index] >= wert ...

auch durch analyse feststellen kann ( schliesslich stehen sie mehr oder weniger auch so im bmon )
halt ich für nen bischen idiotisch.

klar, alexw hat hier arbeit/zeit investiert, aber wenn ich mich recht erinnere hatte ich ihn genau zu der zeit mal im query und er fragte mich wie man was bestimmtes programmiert ... - hab ich jetzt eigentlich auch einen prozentualen (c) anteil?

ehrlich gesagt - mir scheissegal. ich baue keine images und brauche dieses tool nicht.
wenn alexw meint er muss der einzige sein, der ein image kompilieren kann, das 100% bootet, muss er das mal meinen.

nur finde ich das eigentlich schade, das dadurch - in meinen augen - sehr viel kaputt gemacht wird.

</meineMeinung>


gruss
mws


P.S.: ich werde mir demnächst mal überlegen, wem ich bevor ich ihm helfe, erst einmal ein NDA zuschicke.
cu
mws
e46ti
Interessierter
Interessierter
Beiträge: 74
Registriert: Montag 14. Februar 2005, 10:10

Beitrag von e46ti »

@all

die Experten hier werden dies ja schon längst wissen:

Code: Alles auswählen

Creating big endian 2.1 filesystem on squashfs2b.img, block size 65536.

Big endian filesystem, data block size 65536, compressed data, compressed metadata, compressed fragments
Filesystem size 6505.06 Kbytes (6.35 Mbytes)
	47.11% of uncompressed filesystem size (13808.71 Kbytes)
Inode table size 5165 bytes (5.04 Kbytes)
	33.99% of uncompressed inode table size (15195 bytes)
Directory table size 5079 bytes (4.96 Kbytes)
	62.36% of uncompressed directory table size (8145 bytes)
Number of duplicate files found 4
Number of inodes 677
Number of files 491
Number of fragments 83
Number of symbolic links  140
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 46
Number of uids 1
	root (0)
Number of gids 0

*** Checking for magic bytes at 128 KB sector ends ***
50 sectors must be checked...
0x1dffe9 | 8c a1 9f ad 1f be 94 bc 47 99 37 9e 6d e5 8d 0f 87 2d 45 5b 18 c3 ce -> bad magic in flash #1
*** If you flash this image these bytes cause 'no system' ***

Die squashfs sourcen lassen sich auch dazu bewegen, eine block_size= 131072 zu verarbeiten.

Code: Alles auswählen

Creating big endian 2.1 filesystem on squashfs2a.img, block size 131072.

Big endian filesystem, data block size 131072, compressed data, compressed metadata, compressed fragments
Filesystem size 6456.87 Kbytes (6.31 Mbytes)
	46.76% of uncompressed filesystem size (13808.34 Kbytes)
Inode table size 4823 bytes (4.71 Kbytes)
	32.54% of uncompressed inode table size (14823 bytes)
Directory table size 5072 bytes (4.95 Kbytes)
	62.27% of uncompressed directory table size (8145 bytes)
Number of duplicate files found 4
Number of inodes 677
Number of files 491
Number of fragments 65
Number of symbolic links  140
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 46
Number of uids 1
	root (0)
Number of gids 0

*** Checking for magic bytes at 128 KB sector ends ***
50 sectors must be checked...
*** No magic bytes found ***
Mit dieser block_size ist das squashfs dann sogar noch etwas kleiner als das Orginal :D

e46ti

PS: Natürlich kann der kernel auch solche images lesen :D
e46ti
Interessierter
Interessierter
Beiträge: 74
Registriert: Montag 14. Februar 2005, 10:10

Beitrag von e46ti »

@all,

ich habe ja den thread hier eröffnet, um zu erforschen woher dieser Fehler kommt und ob es Möglichkeiten gibt diesen zu vermeiden.

Anfänglich bin ich dabei von einem falschen Ansatz ausgegangen :oops:
Inzwischen haben sich aber doch andere Lösungsansätze ergeben, die dazu geeignet sind, den Fehler zu umgehen :D

Um dies jetzt richtig nutzen zu können, bedarf es einiger Änderungen an den vorhandenen sourcen. Die Idee ist ja, mit verschieden block_sizes zu arbeiten. Mit den folgenden Änderungen arbeitet mksquashsf standardmäßig mit einer block_size=131072 und führt am Ende einen magic bytes check durch:

Code: Alles auswählen

--- squashfs_fs.h.org	2005-03-03 10:34:52.000000000 +0100
+++ squashfs_fs.h	2005-03-01 13:12:21.000000000 +0100
@@ -33,10 +33,10 @@
 #define SQUASHFS_METADATA_LOG		13
 
 /* default size of data blocks */
-#define SQUASHFS_FILE_SIZE		65536
-#define SQUASHFS_FILE_LOG		16
+#define SQUASHFS_FILE_SIZE		131072
+#define SQUASHFS_FILE_LOG		17
 
-#define SQUASHFS_FILE_MAX_SIZE		65536
+#define SQUASHFS_FILE_MAX_SIZE		131072
 
 /* Max number of uids and gids */
 #define SQUASHFS_UIDS			256


--- mksquashfs.c.org	2005-03-03 10:34:51.000000000 +0100
+++ mksquashfs.c	2005-03-01 13:43:45.000000000 +0100
@@ -1509,7 +1509,7 @@
 {
 	int i;
 
-	for(i = 9; i <= 16; i++)
+	for(i = 9; i <= 17; i++)
 		if(block == (1 << i))
 			return i;
 	return 0;

@@ -2076,11 +2076,64 @@
 	}
 
 	printf("Number of gids %d\n", guid_count);
-
 	for(i = 0; i < guid_count; i++) {
 		struct group *group = getgrgid(guids[i]);
 		printf("\t%s (%d)\n", group == NULL ? "unknown" : group->gr_name, guids[i]);
 	}
+
+
+	int x, y, z;
+	unsigned char value[23];
+
+	printf("\n");
+	printf("*** Checking for magic bytes at 128 KB sector ends ***\n");
+
+	z = (int) (bytes / 131072);
+
+	printf("%d sectors must be checked...\n", z);
+
+
+	for(y = 1; y <= z; y++) {
+	
+	    x = (y * 131072) - 23;
+	    
+	    if(lseek(fd, x, SEEK_SET) == -1) {
+		perror("Lseek on destination failed");
+		EXIT_MKSQUASHFS();
+	    }
+	    if(read(fd, value, 23) == -1) {
+		perror("Read on destination failed");
+		EXIT_MKSQUASHFS();
+	    }
+
+	if (value[1] <= 0xFE && (value[21] >= 0xc0 && value[21] <=0xc4) && ((value[22] &0x0f) == 0x06 || (value[22] &0x0f) == 0x0e))
+			{
+			printf("0x%06x | %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x", x, value[0], value[1], value[2], value[3], value[4], value[5], value[6], value[7], value[8], value[9], value[10], value[11], value[12], value[13], value[14], value[15], value[16], value[17], value[18], value[19], value[20], value[21], value[22]);
+			printf(" -> bad magic in flash #1\n");
+			goto err;
+			}
+
+ 	if (value[0] <= 0xFE && (value[19] >= 0xc0 && value[19] <=0xc4) && ((value[20] &0x0f) == 0x06 || (value[20] &0x0f) == 0x0e))
+			{
+			printf("0x%06x | %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x", x, value[0], value[1], value[2], value[3], value[4], value[5], value[6], value[7], value[8], value[9], value[10], value[11], value[12], value[13], value[14], value[15], value[16], value[17], value[18], value[19], value[20], value[21], value[22]);
+			printf(" -> bad magic in flash #2\n");
+			goto err;
+			} 			
+
+ 	if (value[11] <= 0xFE && (value[21] >= 0xc0 && value[21] <=0xc4) && ((value[22] &0x0f) == 0x06 || (value[22] &0x0f) == 0x0e))
+			{
+			printf("0x%06x | %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x", x, value[0], value[1], value[2], value[3], value[4], value[5], value[6], value[7], value[8], value[9], value[10], value[11], value[12], value[13], value[14], value[15], value[16], value[17], value[18], value[19], value[20], value[21], value[22]);
+			printf(" -> bad magic\n");
+			goto err;
+			} 			 			
+	}
+	
+	printf("*** No magic bytes found ***\n");				
 	close(fd);
 	return 0;
+
+	err:
+	    printf("*** If you flash this image these bytes cause 'no system' ***\n");
+	    close(fd);
+	    return 0;
 }
Werden andere block_sizes als 65536 verwendet hat u-boot u.U. Schwierigkeiten mit fragment blocks. Auch hierfür gibt es eine Lösung :D

Code: Alles auswählen

--- squashfs.c.org	2005-03-03 10:48:19.000000000 +0100
+++ squashfs.c	2005-02-24 10:55:55.000000000 +0100
@@ -121,7 +121,7 @@
 	)
 {
 	unsigned short int c_byte;
-	int offset;
+	int offset, i;
 	unsigned char check_data;
 	short int compressed;
 	unsigned int length;
@@ -146,42 +146,44 @@
 	{
 		compressed = SQUASHFS_COMPRESSED_BLOCK(*bytecount);
 		length = SQUASHFS_COMPRESSED_SIZE_BLOCK(*bytecount);
-		offset = frag_size ? frag_offset : 0;
+		offset = 0;
 	}
 
 	/* handle compressed block */
 	if(compressed) 
 	{
-		unsigned char buffer[SQUASHFS_FILE_SIZE];
+		unsigned char buffer[sBlk->block_size];
 		/* if this is a fragment, we need a temporary decompression buffer */
-		unsigned char uncompressed_buffer[SQUASHFS_FILE_SIZE];
+		unsigned char uncompressed_buffer[sBlk->block_size];
 		int res;
-		long bytes = SQUASHFS_FILE_SIZE;
+		long bytes = sBlk->block_size;		
 
 		TRACE("compressed block @ 0x%x, compressed size %d\n", start, length);
+
 		read_bytes(info, start + offset, length, buffer);
 
 		squashfs_uncompress_init();
 		/* inflate the block (to temporary buffer if we only need a fragment) */
 		res = squashfs_uncompress_block(frag_size ? uncompressed_buffer : block, bytes, buffer, length);
+
 		TRACE("compressed block @ 0x%x, uncompressed size %d\n", start, res);
-		if(!res)
-		{
-			ERROR("zlib::uncompress failed\n");
-			squashfs_uncompress_exit();
-			return 0;
-		}
+
 		squashfs_uncompress_exit();
+		
+		if(!res)
+		    return 0;
+
 		/* if this is a fragment, copy only that part of the block */
 		if (frag_size)
 		{
-			memcpy(block, uncompressed_buffer, frag_size);
+			memcpy(block, uncompressed_buffer + frag_offset, frag_size);
 		}
 		/* advance buffer pointer if requested */
 		if(next && !frag_size)
 		{
 			*next = start + offset + length;
 		}
+	
 		return frag_size ? frag_size : res;
 	} 
 	/* handle uncompressed block */
@@ -394,6 +400,9 @@
 				case SQUASHFS_SYMLINK_TYPE:
 					/* resolve */
 					break;
+				case SQUASHFS_LDIR_TYPE:
+					/* resolve */
+					break;
 				default:
 					break;
 				}
@@ -411,21 +420,17 @@
 					int frag_bytes;
 					unsigned int *blocklist;
 					unsigned int bytes = 0;
-					int start;
+					
 					squashfs_reg_inode_header dirreg;
-
-					memcpy (&dirreg,blockbuffer + cur_offset,sizeof(dirreg));
+					memcpy (&dirreg,blockbuffer + cur_offset, sizeof(dirreg));
 					
 					blocks = dirreg.fragment == SQUASHFS_INVALID_BLK
 									? (dirreg.file_size + sBlk.block_size - 1) >> sBlk.block_log
 									: dirreg.file_size >> sBlk.block_log;
 					frag_bytes = dirreg.fragment == SQUASHFS_INVALID_BLK ? 0 : dirreg.file_size % sBlk.block_size;
-					start = dirreg.start_block;
-					
-					TRACE("regular file, size %d, blocks %d\n", dirreg.file_size, blocks);
-					TRACE("frag_bytes %d, start_block 0x%x\n", frag_bytes, start);
 
-					cur_offset += sizeof(dirreg);
+					TRACE("regular file, size %d, blocks %d, start_block 0x%x\n", dirreg.file_size, blocks, dirreg.start_block);
+					
 					blocklist=malloc (blocks*sizeof(unsigned int));
 					if (!blocklist)
 					{
@@ -433,6 +438,7 @@
 						free (blockbuffer);
 						return 0;
 					}
+					cur_offset += sizeof(dirreg);
 					memcpy (blocklist,blockbuffer+cur_offset,blocks*sizeof(unsigned int));
 					cur_ptr = dirreg.start_block;
 					for (i=0;i<blocks;i++)
@@ -442,10 +448,13 @@
 					}
 					if (frag_bytes)
 					{
-						squashfs_fragment_entry *frag_entry = frag_table + dirreg.fragment;
-						TRACE("%d bytes in fragment %d, offset %d\n", frag_bytes, dirreg.fragment, dirreg.offset);
+	    					squashfs_fragment_entry *frag_entry = frag_table + dirreg.fragment;
+						
+						TRACE("%d bytes in fragment %d, offset %d\n",
+						 frag_bytes, dirreg.fragment, dirreg.offset);
+
 						TRACE("fragment %d, start_block=0x%x, size=%d\n",
-							dirreg.fragment, frag_entry->start_block, SQUASHFS_COMPRESSED_SIZE_BLOCK(frag_entry->size));
+						 dirreg.fragment, frag_entry->start_block, SQUASHFS_COMPRESSED_SIZE_BLOCK(frag_entry->size));
 						bytes += read_block(info, frag_entry->start_block, NULL, (unsigned char*)(loadoffset+bytes), &sBlk, &(frag_entry->size), dirreg.offset, frag_bytes);
 					}
 					*size=bytes;
@@ -459,8 +468,15 @@
 					return 0;
 					break;
 				}
+				case SQUASHFS_LDIR_TYPE:
+				{
+					printf ("loading ldirs is not supported\n");
+					free (blockbuffer);
+					return 0;
+					break;
 				}
 			}
+			}
 			parsed=1;
 			break;
 		}


--- uncompress.c.org	2005-03-03 11:00:50.000000000 +0100
+++ uncompress.c	2005-02-23 16:32:03.000000000 +0100
@@ -42,7 +42,6 @@
 int squashfs_uncompress_block (void *dst, int dstlen, void *src, int srclen)
 {
 	int err;
-	inflateReset (&stream);
 
 	stream.next_in = src;
 	stream.avail_in = srclen;
@@ -50,11 +49,13 @@
 	stream.next_out = dst;
 	stream.avail_out = dstlen;
 
-	err = inflate (&stream, Z_FINISH);
-	if ((err==Z_OK)||(err==Z_STREAM_END))
-		return dstlen-stream.avail_out;
-	else
+	if (((err = inflate(&stream, Z_FINISH)) != Z_STREAM_END)||((err = inflateEnd(&stream)) != Z_OK))
+	    {
+		printf("SQUASHFS error: zlib returned unexspected result %d\n", err);
 		return 0;
+	    }		
+	else
+		return stream.total_out;
 }
 
 int squashfs_uncompress_init (void)
@@ -74,7 +75,7 @@
 
 	err = inflateInit (&stream);
 	if (err != Z_OK) {
-		printf ("Error: inflateInit() returned %d\n", err);
+		printf("SQUASHFS error: zlib returned returned unexspected result %d\n", err);
 		return -1;
 	}
 

Der kernel patch bleibt hiervon unberührt, da der Parameter block_size im image gespeichert wird und immer jeweils aktuell ausgelesen wird.

So viel Spaß beim Testen... :wink:

e46ti
kroki
Einsteiger
Einsteiger
Beiträge: 166
Registriert: Dienstag 22. Juni 2004, 22:12

Beitrag von kroki »

@e46ti

ich hab grad die Patches eingeplegt und bin am Compilieren.... testen kann ich erst heut Abend.

Kann der Kernel die Root-Partition mit der Block-Size 131072 ohne Änderungen mounten, oder benutzt du die Partition nur für den Kernel ??

Gruß Kroki
e46ti
Interessierter
Interessierter
Beiträge: 74
Registriert: Montag 14. Februar 2005, 10:10

Beitrag von e46ti »

Hallo Kroki,

soweit ich das verstanden habe kommt der kernel mit anderen block_sizes problemlos zurecht, derweil die immer aktuell vom jeweiligen squashfs eingelesen/gesetzt wird.

e46ti

PS: Das gilt auch für u-boot s. obigen patch... Wenn Du schon alles neu machst, denke auch an den -check_data patch für den kernel :D
kroki
Einsteiger
Einsteiger
Beiträge: 166
Registriert: Dienstag 22. Juni 2004, 22:12

Beitrag von kroki »

@e46ti

Wasn hat das eigentlich mit dem -check-data aufsich ??? Ich hab das noch nie benutzt.

Kannst du mir den Patch hierfür mal schicken ?

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

Beitrag von e46ti »

@kroki

schaust Du hier:

http://forum.tuxbox.org/forum/viewtopic.php?t=36282

Gute Frage, ich habe das bis dato auch nicht benutzt. Laut readme handelt es sich dabei um einen umfassenden Dateicheck??

e46ti
kroki
Einsteiger
Einsteiger
Beiträge: 166
Registriert: Dienstag 22. Juni 2004, 22:12

Beitrag von kroki »

@e64ti

Hab ich auch grad gefunden.........
Dann wollen wir mal den Kernel neu compiieren....

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

Beitrag von e46ti »

@Kroki,

ich hoffe jetzt nur, daß mir beim Erstellen der verschiedenen diff files kein Fehler unterlaufen ist. Sind ja doch einige Baustellen.... :wink:

e46ti
kroki
Einsteiger
Einsteiger
Beiträge: 166
Registriert: Dienstag 22. Juni 2004, 22:12

Beitrag von kroki »

@e46ti

Compilieren hat jedenfalls schon mal geklappt ....... :wink:

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

Beitrag von e46ti »

Hallo kroki,
kroki hat geschrieben:@e46ti

ich hab grad die Patches eingeplegt und bin am Compilieren.... testen kann ich erst heut Abend.

Kann der Kernel die Root-Partition mit der Block-Size 131072 ohne Änderungen mounten, oder benutzt du die Partition nur für den Kernel ??

Gruß Kroki
Du hattest recht, die squashfs_fs.h für den kernel muß auch angepaßt werden, es reicht aber den Wert für SQUASHFS_FILE_MAX_SIZE zu ändern.

Ich hatte die letzten Tests nur noch am PC gemacht und da ist es so, daß der PC kernel ohne Anpassung der squashfs_fs.h squashfs images mit der block_size=131072 mounted :gruebel:

Aber nun den, jetzt funktioniert es jedenfalls auch auf der box :D

-be -all-root -always-use-fragments -check_data

und wenn es dabei zu magic bytes kommt

-be -all-root -always-fragments -check_data -b 65536


e46ti :wink:
kroki
Einsteiger
Einsteiger
Beiträge: 166
Registriert: Dienstag 22. Juni 2004, 22:12

Beitrag von kroki »

@e46ti


..... und ich wollt dir grad ein Log posten ..... :wink:


EDIT:
So siehts auch gleich besser aus:
Creating 4 MTD partitions on "D-Box 2 flash memory":
0x00020000-0x00040000 : "K-Boot (flfs)"
0x00040000-0x006e0000 : "root (squashfs)"
0x006e0000-0x00800000 : "var (jffs2)"
0x00020000-0x00800000 : "Flash komplett"
Linux video capture interface: v1.00
mice: PS/2 mouse device common for all mice
NET4: Linux TCP/IP 1.0 for NET4.0
IP Protocols: ICMP, UDP, TCP
IP: routing cache hash table of 512 buckets, 4Kbytes
TCP: Hash tables configured (established 2048 bind 4096)
NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
VFS: Mounted root (squashfs filesystem) readonly. <----- :D
Kroki
kroki
Einsteiger
Einsteiger
Beiträge: 166
Registriert: Dienstag 22. Juni 2004, 22:12

Beitrag von kroki »

@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