From: Thorsten Haas <haas@deutaeit.de>
To: linux-mtd@lists.infradead.org
Subject: Re: CFI physmap - how to create partitions
Date: Thu, 19 May 2005 10:06:12 +0200 [thread overview]
Message-ID: <1116489972.2647.4.camel@shrek> (raw)
In-Reply-To: <1116403535.2682.7.camel@shrek>
Am Mittwoch, den 18.05.2005, 10:05 +0200 schrieb Thorsten Haas:
> Hello everyone,
>
> I have a board equipped with CFI-compatible NOR-flash, which is
> physmapped and detected by the kernel (/dev/mtd0 in /proc/mtd). Now I am
> trying to configure partitions. I read the HOWTO on
> ftp://ftp.uk.linux.org/pub/people/dwmw2/mtd/cvs/mtd/mtd-jffs-HOWTO.txt,
> googled and browsed kernel code (2.6.8.11) and a daily mtd-snapshot
> (2005-05-15). From what i read, I understand:
> a) Command line partition table parsing is not functional with
> physmapped devices
> b) I need to create and fill a 'struct mtd_partition' and call
> physmap_configure() and physmap_set_partitions()
> Is this correct so far?
>
> I've seen people writing board-dependent mapping drivers, thus
> clobbering the section "mapping driver for chip access". Is this
> actually the way to go? Well, I am not too lazy to write some code, but
> is there a more genric way?
>
> Best regards,
> Thorsten Haas
Solved. I used mphysmap.c, because there are two banks of flash on my
board, but mphysmap.c does not support partitioning yet. Though,
physmap.c does provide commandline partition parsing.
Sadly, mtd-id's seem not to be well-documented. I looked the one for
mappings to the physical memory area up in the source. It's
"phys_mapped_flash". Huzaa.
Thus, I wrote some additional text into chapter "Making partitions with
CFI flash and working with multiple banks of FLASH" of
mtd-jffs-HOWTO.txt. ( retreived it from
ftp://ftp.uk.linux.org/pub/people/dwmw2/mtd/cvs/mtd/mtd-jffs-HOWTO.txt )
Here's a patch to it:
*** mtd-jffs-HOWTO.txt 2005-05-18 16:05:16.000000000 +0200
--- mtd-jffs-HOWTO-new.txt 2005-05-18 16:05:01.000000000 +0200
***************
*** 515,528 ****
Unlike a "regular" block device, you cannot launch fdisk and create
partitions on /dev/mtdblock0,1,2,3...
! (As far as I know) CFI flash partitions have to be created and
! compiled in the physmap.c file.
!
! The same goes for multiple banks of flash memory. (IS THIS CORRECT????
! Check and correct.)
!
! An example of creating partitions can be found in the file
! mtd/kernel/sbc_mediagx.c
An example of multiple banks of flash chips being mapped into separate
/dev/mtdn devices can be found in the file mtd/kernel/octagon_5066.c
--- 515,554 ----
Unlike a "regular" block device, you cannot launch fdisk and create
partitions on /dev/mtdblock0,1,2,3...
! CFI flash partitions have to be created on the kernel command line or
! have to be hard-coded into the kernel source. Before command line
partition
! table parsing was available, people had to write board-specific
mapping
! drivers. You still can find some of these below 'Mapping drivers for
chip
! access' in the kernel configuration.
!
! To make use of command line partition table parsing enable
! CONFIG_MTD_CMDLINE_PARTS in the kernel configuration.
!
! The format for the command line is as follows:
!
! mtdparts=<mtddef>[;<mtddef]
! <mtddef> := <mtd-id>:<partdef>[,<partdef>]
! <partdef> := <size>[@offset][<name>][ro]
! <mtd-id> := unique id used in mapping driver/device
! <size> := standard linux memsize OR "-" to denote all remaining
space
! <name> := (NAME)
!
! Example:
! You have a CFI-flash (size 8M) mapped to the physical memory area at
! 0x38000000. Enable CONFIG_MTD_PHYSMAP, set start address to 0x38000000
and
! length to 0x800000.
!
! You want two partitions like: one megabyte (not million bytes) to hold
a
! write-protected kernel image and the rest to hold a rootfs.
!
! Add the following to the kernel command line:
! mtdparts=phys_mapped_flash:1M(kernel)ro,-(rootfs)
!
! If you do not want to use command line partition table parsing you
might start
! off with the physmap.c file and create and compile the partitions
withing the
! kernel itself. You might chose to do so, or you might write a board
specific
! mapping 'driver', like mentioned above. An example of creating
partitions can
! be found in the file mtd/kernel/sbc_mediagx.c
An example of multiple banks of flash chips being mapped into separate
/dev/mtdn devices can be found in the file mtd/kernel/octagon_5066.c
***************
*** 530,536 ****
registering the mtd device in "init_oct5066()". You may also add
partitions to each bank by looking at code in mtd/kernel/sbc_mediagx.c
!
*** Mounting a JFFS(1 or 2) F/S as root device.
--- 556,591 ----
registering the mtd device in "init_oct5066()". You may also add
partitions to each bank by looking at code in mtd/kernel/sbc_mediagx.c
! Mapping multiple CFI flash devices into the physical memory map is
currently
! supported by CONFIG_MTD_MULTI_PHYSMAP. This lets you configure up to
four
! separate flash banks (file mphysmap.c). This also lets you have gaps
between
! flash chips, but partitioning support is not available out-of-the-box
yet, at
! least not from the command line.
!
! If you like to partition multiple banks of flash from the command
line, you do
! good to map your flash banks one after the other into the physical
memory area
! without leaving any gap between them. Let's assume you have two banks
of CFI
! flash (size 8M each) mapped to 0x38000000 and 0x38800000. Then do not
touch
! CONFIG_MTD_MULTI_PHYSMAP but configure CONFIG_MTD_PHYSMAP. Set the
starting
! address to 0x38000000 and length to 0x1000000 (16MBytes).
! On startup the kernel will still recognise two banks:
!
! physmap flash device: 1000000 at 38000000
! phys_mapped_flash: Found 1 x16 devices at 0x0 in 16-bit bank
! phys_mapped_flash: Found 1 x16 devices at 0x800000 in 16-bit bank.
!
! Now you may use a commandline like:
! mtdparts=phys_mapped_flash:1M(kernel)ro,7M(rootfs),8M(moredata).
!
! Et voila, the kernel will create partitions:
!
! Creating 3 MTD partitions on "phys_mapped_flash":
! 0x00000000-0x00100000 : "kernel"
! mtd: Giving out device 0 to kernel
! 0x00100000-0x00800000 : "root"
! mtd: Giving out device 1 to root
! 0x00800000-0x01000000 : "moredata"
! mtd: Giving out device 2 to moredata
*** Mounting a JFFS(1 or 2) F/S as root device.
next prev parent reply other threads:[~2005-05-19 8:06 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-05-18 8:05 CFI physmap - how to create partitions Thorsten Haas
2005-05-18 22:35 ` Ralph Siemsen
2005-05-19 8:06 ` Thorsten Haas [this message]
2005-05-19 11:54 ` Ralph Siemsen
2005-05-20 7:26 ` Thorsten Haas
2005-05-20 12:58 ` Ralph Siemsen
2005-05-20 13:20 ` Thorsten Haas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1116489972.2647.4.camel@shrek \
--to=haas@deutaeit.de \
--cc=linux-mtd@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.