From c38283c4869eaa426735e08186218815cab2cf9e Mon Sep 17 00:00:00 2001
From: florian <florian@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Date: Fri, 30 Mar 2007 21:51:48 +0000
Subject: airlink generation fix, thanks st9_

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@6764 3c298f89-4303-0410-b956-a3cf2f4a3e73
---
 tools/firmware-utils/src/airlink.c | 20 +++++++++-----------
 1 file changed, 9 insertions(+), 11 deletions(-)

(limited to 'tools/firmware-utils/src')

diff --git a/tools/firmware-utils/src/airlink.c b/tools/firmware-utils/src/airlink.c
index 9b1016da7..226f7507b 100644
--- a/tools/firmware-utils/src/airlink.c
+++ b/tools/firmware-utils/src/airlink.c
@@ -100,7 +100,7 @@ u32 header[] = {
 	0x00000000, 0x00000005, 0x00000000, 0x00000000
 };
 
-static int JFFS2 = 0;
+static int JFFS2 = 0x20;
 
 int generate_image(char *kname, char *fsname, char *fname, int EHDR)
 {
@@ -108,7 +108,6 @@ int generate_image(char *kname, char *fsname, char *fname, int EHDR)
 	u32 lenk, lens;
 	uchar *bk, *bs;
 	int fkd, ffd, fsd;
-	int pad = 0x1f;
 	fkd = open(kname, O_RDONLY);
 	ffd = creat(fname, 0x644);
 	if ((fkd < 0) || (ffd < 0))
@@ -135,12 +134,10 @@ int generate_image(char *kname, char *fsname, char *fname, int EHDR)
 	else
 		write(ffd, header + 2, 0x20);
 	write(ffd, bk, lenk);
-	if (fsname && JFFS2)
-		pad = 0xffff;
 	printf("Padding header+kernel - 0x%x +  0x%x = 0x%x\n",
-	       lenk + 0x20, ((lenk + 0x20) | pad) + 1 - lenk - 0x20,
-	       ((lenk + 0x20) | pad) + 1);
-	for (i = 0; i < ((lenk + 0x20) | pad) + 1 - lenk - 0x20; i++)
+	       lenk, ((lenk - 1 + JFFS2) / JFFS2) * JFFS2 - lenk,
+	       ((lenk - 1 + JFFS2) / JFFS2) * JFFS2);
+	for (i = 0; i < ((lenk - 1 + JFFS2) / JFFS2) * JFFS2 - lenk; i++)
 		write(ffd, header, 1);
 	if (fsname) {
 		write(ffd, bs, lens);
@@ -169,13 +166,13 @@ void usage(char *prog)
 	printf("Usage: %s [-b 0/1] image_filename \n", prog);
 	printf("       update checksums for firmware file\n");
 	printf
-	    ("Usage: %s [-b 0/1] [-j] [-e] kernel filesystem image_filename \n",
+	    ("Usage: %s [-b 0/1] [-j erasesize_in_kibytes] [-e] kernel filesystem image_filename \n",
 	     prog);
 	printf("       generate firmware file and update checksums\n");
 	printf("--------------------------------------------------\n");
 	printf("       -e - generate header for web upload\n");
-	printf("       -j - generate header for jffs2 filesystem\n");
 	printf("       -b 0/1 - clear/update bootloader checksum\n");
+	printf("       -j erasesize_in_kibytes - generate header for jffs2 filesystem\n");
 }
 
 int main(int argc, char **argv)
@@ -187,7 +184,7 @@ int main(int argc, char **argv)
 	extern char *optarg;
 	extern int optind, optopt;
 
-	while ((c = getopt(argc, argv, "b:e:j")) != -1) {
+	while ((c = getopt(argc, argv, "b:ej:")) != -1) {
 		switch (c) {
 		case 'b':
 			if (optarg[0] == '1')
@@ -197,7 +194,8 @@ int main(int argc, char **argv)
 			EHDR = 1;
 			break;
 		case 'j':
-			JFFS2 = 1;
+			sscanf(optarg, "%i", &JFFS2);
+			JFFS2 *= 1024;
 			break;
 		case '?':
 			fprintf(stderr, "\nError: unknown arg %c\n\n\n",
-- 
cgit v1.2.3