From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from rcmenter.iserver.net ([192.41.35.12]) by pentafluge.infradead.org with esmtp (Exim 3.22 #1 (Red Hat Linux)) id 15CRpx-00047a-00 for ; Tue, 19 Jun 2001 21:10:57 +0100 Message-ID: <3B2FB3D2.44047FCF@asu.edu> Date: Tue, 19 Jun 2001 13:19:30 -0700 From: Russ Dill MIME-Version: 1.0 To: bootldr@handhelds.org, linux-mtd@lists.infradead.org Subject: cramfs/jffs2 bootloader code Content-Type: multipart/mixed; boundary="------------F11C754912457CDA6D89F01C" Sender: linux-mtd-admin@lists.infradead.org Errors-To: linux-mtd-admin@lists.infradead.org List-Help: List-Post: List-Subscribe: , List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: This is a multi-part message in MIME format. --------------F11C754912457CDA6D89F01C Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit OK, the cramfs/jffs2 bootloader code is finally more or less complete. These modules allow a bootloader to load a kernel from multiple sources (ie cramfs, jffs, straight from flash etc). It always load the file "/linux" right now. Currently included are modules for cramfs, jffs2 and zImage straight from flash. Currently, the interface is: struct kernel_loader {                  /* Return true if there is a kernel contained at src */         int (* check_magic)(struct part_info *part);                  /* load the kernel from the partition part to dst, return the number          * of bytes copied if successful, zero if not */         u32 (* load_kernel)(u32 *dst, struct part_info *part);         /* A brief description of the module (ie, "cramfs") */         char *name; }; The bootloader can cycle through the available modules until it finds one with a matching kernel, at which point it attempts to load the kernel by that message. There is a test/ directory for testing the different modules from user space with debug messages, note that the erasesize is hardcoded. For the decompressors to function at a decent speed, your bootloader should enable the i-cache and set flash timings properly. The modules were written around blob, but should be easily inserted into any boot_loader, the only file needing specific editing for the boot loader is load_kernel.c (and possibly some types.h issues). Example code for within the bootloader below: void load_kernel(blobStatus *status) {         int i;         unsigned long size;         struct part_info part;                  part.erasesize = MAIN_BLOCK_SIZE;         part.size = KERNEL_LEN;         part.offset = (char *) KERNEL_START;         for (i = 0; loader[i] && !loader[i]->check_magic(&part); i++);         if (!loader[i]) {                 SerialOutputString("unable to find kernel, loading raw "         "data and hoping for the best!\rloading");                 size = KERNEL_LEN;                 MyMemCpy((u32 *)KERNEL_RAM_BASE,                  (u32 *)KERNEL_START, size >> 2);                          } else {                 SerialOutputString("loading kernel from ");                 SerialOutputString(loader[i]->name);                 if ((size = loader[i]->load_kernel((u32 *)KERNEL_RAM_BASE,                               &part)) == 0) {                         SerialOutputString(" error loading kernel!\r");                         return;                }         }         SerialOutputString("loaded 0x");         SerialOutputHex(size);         SerialOutputString(" bytes\r");         status->kernelSize = size;         status->kernelType = fromFlash; } Current issues (release early, release often) the cramfs module doesn't follow symlinks when looking for /linux (jffs2 *does* follow symlinks though) future ideas: if we can load the kernel from a fs image, why not other things, like a config, with bootloader parameters (whether or not to load a ramdisk, etc) as well as append= parameters for the kernel. I'll also email a patch against blob-1.0.8-pre2 on the lart list. --------------F11C754912457CDA6D89F01C Content-Type: application/octet-stream; name="load_kernel.tar.bz2" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="load_kernel.tar.bz2" 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 --------------F11C754912457CDA6D89F01C--