diff options
| author | hcg <hcg@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2007-05-04 11:29:40 +0000 | 
|---|---|---|
| committer | hcg <hcg@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2007-05-04 11:29:40 +0000 | 
| commit | b95c73db7f5fb48cbbd2b7c711bf61e8e1391d67 (patch) | |
| tree | 495c9a51f2b3866d4dcd7ba57decf71b74d93f3f | |
| parent | f5d669c294dd47cec40b8af9997ad116193c214f (diff) | |
Changed partitioning not to use at91part.c as opposed to using
command-line partitioning.
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@7089 3c298f89-4303-0410-b956-a3cf2f4a3e73
| -rw-r--r-- | target/linux/at91-2.6/config/default | 4 | ||||
| -rw-r--r-- | target/linux/at91-2.6/files/drivers/mtd/at91part.c | 121 | ||||
| -rw-r--r-- | target/linux/at91-2.6/image/Makefile | 4 | ||||
| -rw-r--r-- | target/linux/at91-2.6/image/u-boot/patches/011-ubparams_update.patch | 19 | ||||
| -rw-r--r-- | target/linux/at91-2.6/image/u-boot/ubclient/ubpar.c | 7 | ||||
| -rw-r--r-- | target/linux/at91-2.6/patches/007-mtd-partition.patch | 36 | 
6 files changed, 184 insertions, 7 deletions
diff --git a/target/linux/at91-2.6/config/default b/target/linux/at91-2.6/config/default index 4caee4657..b56069c8b 100644 --- a/target/linux/at91-2.6/config/default +++ b/target/linux/at91-2.6/config/default @@ -108,6 +108,7 @@ CONFIG_DUMMY_CONSOLE=y  CONFIG_FPE_NWFPE=y  # CONFIG_FPE_NWFPE_XP is not set  CONFIG_FRAME_POINTER=y +CONFIG_FS_POSIX_ACL=y  # CONFIG_FW_LOADER is not set  # CONFIG_GENERIC_TIME is not set  CONFIG_HARDIRQS_SW_RESEND=y @@ -170,6 +171,7 @@ CONFIG_MTD=y  # CONFIG_MTD_ABSENT is not set  # CONFIG_MTD_AFS_PARTS is not set  CONFIG_MTD_AT91_DATAFLASH=y +CONFIG_MTD_AT91_PARTS=y  CONFIG_MTD_BLOCK=y  # CONFIG_MTD_BLOCK2MTD is not set  # CONFIG_MTD_CFI is not set @@ -193,7 +195,6 @@ CONFIG_MTD_MAP_BANK_WIDTH_2=y  CONFIG_MTD_MAP_BANK_WIDTH_4=y  # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set  # CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_NAND is not set  # CONFIG_MTD_OBSOLETE_CHIPS is not set  # CONFIG_MTD_ONENAND is not set  CONFIG_MTD_PARTITIONS=y @@ -226,6 +227,7 @@ CONFIG_MTD_PARTITIONS=y  CONFIG_PHYLIB=y  # CONFIG_PM is not set  # CONFIG_PPPOATM is not set +# CONFIG_PPPOL2TP is not set  # CONFIG_PPP_MULTILINK is not set  # CONFIG_PPP_SYNC_TTY is not set  # CONFIG_QSEMI_PHY is not set diff --git a/target/linux/at91-2.6/files/drivers/mtd/at91part.c b/target/linux/at91-2.6/files/drivers/mtd/at91part.c new file mode 100644 index 000000000..bfa959049 --- /dev/null +++ b/target/linux/at91-2.6/files/drivers/mtd/at91part.c @@ -0,0 +1,121 @@ +/* + * $Id: at91part.c 6948 2007-04-15 04:01:45Z hcg $ + *  + * Copyright (C) 2007 OpenWrt.org + *  + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + *  + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + *  + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA + * + * Atmel AT91 flash partition table. (Modified by Hamish Guthrie). + * Based on ar7 map by Felix Fietkau. + * + */ + +#include <linux/kernel.h> +#include <linux/slab.h> + +#include <linux/mtd/mtd.h> +#include <linux/mtd/partitions.h> +#include <linux/bootmem.h> +#include <linux/squashfs_fs.h> + +static struct mtd_partition at91_parts[6]; + +static int create_mtd_partitions(struct mtd_info *master,  +				 struct mtd_partition **pparts,  +				 unsigned long origin) +{ +	unsigned int offset, len; +	unsigned int pre_size = 0x42000, root_max = 0x362400; +	unsigned char buf[512]; +	struct squashfs_super_block *sb = (struct squashfs_super_block *) buf; + +	printk("Parsing AT91 partition map...\n"); + +	at91_parts[0].name = "loaders"; +	at91_parts[0].offset = 0; +	at91_parts[0].size = 0x21000; +	at91_parts[0].mask_flags = MTD_WRITEABLE; + +	at91_parts[1].name = "ubparams"; +	at91_parts[1].offset = 0x21000; +	at91_parts[1].size = 0x8400; +	at91_parts[1].mask_flags = 0; + +	at91_parts[2].name = "kernel"; +	at91_parts[2].offset = pre_size; +	at91_parts[2].size = 0; +	at91_parts[2].mask_flags = 0; + +	at91_parts[3].name = "rootfs"; +	at91_parts[3].offset = 0; +	at91_parts[3].size = 0; +	at91_parts[3].mask_flags = 0; + +	for(offset = pre_size; offset < root_max; offset += master->erasesize) { + +		memset(&buf, 0xe5, sizeof(buf)); + +		if (master->read(master, offset, sizeof(buf), &len, buf) || len != sizeof(buf)) +			break; + +		if (*((__u32 *) buf) == SQUASHFS_MAGIC) { +			printk(KERN_INFO "%s: Filesystem type: squashfs, size=0x%x\n", +							master->name, (u32) sb->bytes_used); + +			at91_parts[3].size = sb->bytes_used; +			at91_parts[3].offset = offset; +			len = at91_parts[3].offset + at91_parts[3].size; +			len = ((len / (master->erasesize * 8)) + 1) * master->erasesize * 8; +			at91_parts[3].size = len - at91_parts[3].offset; +			at91_parts[2].size = offset - at91_parts[2].offset; +			break; +			} +		} + +	if (at91_parts[3].size == 0) { +		printk(KERN_NOTICE "%s: Couldn't find root filesystem\n", master->name); +		return -1; +		} + +	at91_parts[4].name = "rootfs_data"; +	at91_parts[4].offset = root_max; +	at91_parts[4].size = master->size - root_max; +	at91_parts[4].mask_flags = 0; + +	at91_parts[5].name = "complete"; +	at91_parts[5].offset = 0; +	at91_parts[5].size = master->size; +	at91_parts[5].mask_flags = 0; + +	*pparts = at91_parts; +	return 6; +} + +static struct mtd_part_parser at91_parser = { +	.owner = THIS_MODULE, +	.parse_fn = create_mtd_partitions, +	.name = "at91part", +}; + +static int __init at91_parser_init(void) +{ +	return register_mtd_parser(&at91_parser); +} + +module_init(at91_parser_init); + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Felix Fietkau, Eugene Konev, Hamish Guthrie"); +MODULE_DESCRIPTION("MTD partitioning for Atmel at91"); diff --git a/target/linux/at91-2.6/image/Makefile b/target/linux/at91-2.6/image/Makefile index e2ace4251..73a281b80 100644 --- a/target/linux/at91-2.6/image/Makefile +++ b/target/linux/at91-2.6/image/Makefile @@ -35,8 +35,8 @@ define Image/BuildKernel  endef  define Image/Build -	dd if=$(KDIR)/uImage of=$(KDIR)/uImage.block bs=1056k count=1 conv=sync -	dd if=$(KDIR)/root.squashfs of=$(KDIR)/root.block bs=2112k count=1 conv=sync +	dd if=$(KDIR)/uImage of=$(KDIR)/uImage.block bs=8448 conv=sync +	dd if=$(KDIR)/root.squashfs of=$(KDIR)/root.block bs=8448 conv=sync  	cat $(KDIR)/uImage.block $(KDIR)/root.block > $(KDIR)/knlroot.bin  	$(STAGING_DIR)/bin/trx -o $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL).trx -f $(KDIR)/romboot.bin -f$(KDIR)/u-boot.full -f$(KDIR)/knlroot.bin  	cp $(KDIR)/rbptest.bin $(BIN_DIR) diff --git a/target/linux/at91-2.6/image/u-boot/patches/011-ubparams_update.patch b/target/linux/at91-2.6/image/u-boot/patches/011-ubparams_update.patch new file mode 100644 index 000000000..267903efe --- /dev/null +++ b/target/linux/at91-2.6/image/u-boot/patches/011-ubparams_update.patch @@ -0,0 +1,19 @@ +diff -urN u-boot-1.1.4.old/tools/ubparams.c u-boot-1.1.4/tools/ubparams.c +--- u-boot-1.1.4.old/tools/ubparams.c	2007-05-01 13:20:17.000000000 +0200 ++++ u-boot-1.1.4/tools/ubparams.c	2007-05-04 10:13:34.000000000 +0200 +@@ -37,12 +37,11 @@ + 	"stdin=serial\0" + 	"stdout=serial\0" + 	"stderr=serial\0" +-	"partitions=mtdparts=AT45DB642.spi0:132k(bootloader),33k(ubparams),99k(spare),1056k(linux),2112k(rootfs),33k(nvram),-(rootfs_data)\0" +-	"fbargs=setenv bootargs mtdparts=AT45DB642.spi0:132k(bootloader),33k(ubparams),99k(spare),1056k(linux),2112k(rootfs),33k(nvram),-(rootfs_data) root=/dev/mtdblock4 ro init=/etc/preinit console=/dev/ttyS0,115200,mem=32M\0" +-	"rdba=setenv bootargs mtdparts=AT45DB642.spi0:132k(bootloader),33k(ubparams),99k(spare),1056k(linux),2112k(rootfs),33k(nvram),-(rootfs_data) root=/dev/ram rw initrd=0x21200000,6000000 ramdisk_size=20000 init=/etc/preinit console=/dev/ttyS0,115200,mem=32M\0" ++	"fbargs=setenv bootargs root=/dev/mtdblock3 ro init=/etc/preinit console=/dev/ttyS0,115200,mem=32M\0" ++	"rdba=setenv bootargs root=/dev/ram rw initrd=0x21200000,6000000 ramdisk_size=20000 init=/etc/preinit console=/dev/ttyS0,115200,mem=32M\0" + 	"rdram=run rdba; tftp 21000000 vImage; tftp 21200000 root.squashfs; bootm 21000000\0" + 	"flash=run fbargs; bootm 0xc0042000\0" +-	"bootargs=setenv bootargs mtdparts=AT45DB642.spi0:132k(bootloader),33k(ubparams),99k(spare),1056k(linux),2112k(rootfs),33k(nvram),-(rootfs_data) root=/dev/mtdblock4 ro init=/etc/preinit console=/dev/ttyS0,115200,mem=32M\0" ++	"bootargs=setenv bootargs root=/dev/mtdblock3 ro init=/etc/preinit console=/dev/ttyS0,115200,mem=32M\0" + 	"bootcmd=bootm 0xc0042000\0" + 	"ethaddr=00:30:49:00:00:01\0" + 	"ipaddr=10.0.1.73\0" diff --git a/target/linux/at91-2.6/image/u-boot/ubclient/ubpar.c b/target/linux/at91-2.6/image/u-boot/ubclient/ubpar.c index 99d757062..103d4fd21 100644 --- a/target/linux/at91-2.6/image/u-boot/ubclient/ubpar.c +++ b/target/linux/at91-2.6/image/u-boot/ubclient/ubpar.c @@ -35,12 +35,11 @@ static char *environment[] = {  	"stdin=serial\0"  	"stdout=serial\0"  	"stderr=serial\0" -	"partitions=mtdparts=AT45DB642.spi0:132k(bootloader),33k(ubparams),99k(spare),1056k(linux),2112k(rootfs),33k(nvram),-(rootfs_data)\0" -	"fbargs=setenv bootargs mtdparts=AT45DB642.spi0:132k(bootloader),33k(ubparams),99k(spare),1056k(linux),2112k(rootfs),33k(nvram),-(rootfs_data) root=/dev/mtdblock4 ro init=/etc/preinit console=/dev/ttyS0,115200,mem=32M\0" -	"rdba=setenv bootargs mtdparts=AT45DB642.spi0:132k(bootloader),33k(ubparams),99k(spare),1056k(linux),2112k(rootfs),33k(nvram),-(rootfs_data) root=/dev/ram rw initrd=0x21200000,6000000 ramdisk_size=20000 init=/etc/preinit console=/dev/ttyS0,115200,mem=32M\0" +	"fbargs=setenv bootargs root=/dev/mtdblock3 ro init=/etc/preinit console=/dev/ttyS0,115200,mem=32M\0" +	"rdba=setenv bootargs root=/dev/ram rw initrd=0x21200000,6000000 ramdisk_size=20000 init=/etc/preinit console=/dev/ttyS0,115200,mem=32M\0"  	"rdram=run rdba; tftp 21000000 vImage; tftp 21200000 root.squashfs; bootm 21000000\0"  	"flash=run fbargs; bootm 0xc0042000\0" -	"bootargs=setenv bootargs mtdparts=AT45DB642.spi0:132k(bootloader),33k(ubparams),99k(spare),1056k(linux),2112k(rootfs),33k(nvram),-(rootfs_data) root=/dev/mtdblock4 ro init=/etc/preinit console=/dev/ttyS0,115200,mem=32M\0" +	"bootargs=setenv bootargs root=/dev/mtdblock3 ro init=/etc/preinit console=/dev/ttyS0,115200,mem=32M\0"  	"bootcmd=bootm 0xc0042000\0"  	"ipaddr=10.0.1.73\0"  	"serverip=10.0.1.210\0" diff --git a/target/linux/at91-2.6/patches/007-mtd-partition.patch b/target/linux/at91-2.6/patches/007-mtd-partition.patch new file mode 100644 index 000000000..7b4efe5ed --- /dev/null +++ b/target/linux/at91-2.6/patches/007-mtd-partition.patch @@ -0,0 +1,36 @@ +--- linux-2.6.19.2.old/drivers/mtd/devices/at91_dataflash.c	2007-05-01 13:08:03.000000000 +0200 ++++ linux-2.6.19.2/drivers/mtd/devices/at91_dataflash.c	2007-05-03 09:01:37.000000000 +0200 +@@ -146,7 +146,7 @@ + }; + #endif +  +-static const char *part_probes[] = { "cmdlinepart", NULL, }; ++static const char *part_probes[] = { "cmdlinepart", "at91part", NULL, }; +  + #endif +  +--- linux-2.6.19.2.old/drivers/mtd/Kconfig	2007-05-01 13:08:02.000000000 +0200 ++++ linux-2.6.19.2/drivers/mtd/Kconfig	2007-05-03 08:58:12.000000000 +0200 +@@ -157,6 +157,12 @@ + 	  for your particular device. It won't happen automatically. The + 	  'armflash' map driver (CONFIG_MTD_ARMFLASH) does this, for example. +  ++config MTD_AT91_PARTS ++	tristate "Atmel AT91 partitioning support" ++	depends on MTD_PARTITIONS && ARCH_AT91RM9200 && AT91_SPI ++	---help--- ++		Atmel AT91 partitioning support ++ + comment "User Modules And Translation Layers" + 	depends on MTD +  +--- linux-2.6.19.2.old/drivers/mtd/Makefile	2007-01-10 20:10:37.000000000 +0100 ++++ linux-2.6.19.2/drivers/mtd/Makefile	2007-05-03 09:00:00.000000000 +0200 +@@ -12,6 +12,7 @@ + obj-$(CONFIG_MTD_REDBOOT_PARTS) += redboot.o + obj-$(CONFIG_MTD_CMDLINE_PARTS) += cmdlinepart.o + obj-$(CONFIG_MTD_AFS_PARTS)	+= afs.o ++obj-$(CONFIG_MTD_AT91_PARTS)	+= at91part.o +  + # 'Users' - code which presents functionality to userspace. + obj-$(CONFIG_MTD_CHAR)		+= mtdchar.o  | 
