Skip to contentSkip to conversation

Obtaining start/end address of an MTD partition

DISCUSSION Matthew Lear 2 participants 5 messages Apr 26, 2010 – Apr 28, 2010 1 message not in the archive Memory technology devices (MTD)

lore
Share & tools
lore
#0 lore raw

Hello all,

Is it possible to obtain an MTD partition's starting address through usage of the MTD ioctls? I've had a very quick look and from what I can tell, this doesn't seem to be possible.

To be clear, I'd like to obtain the addresses below (displayed by Linux when it detects the MTD partitions on boot).

Creating 6 MTD partitions on "physmap-flash.0":
0x00000000-0x00120000 : "RedBoot"
0x00120000-0x01000000 : "foo"
0x01000000-0x01400000 : "bar"

I can obviously use the MEMGETINFO ioctl on a particular MTD device to return info in struct mtd_info_user, but this doesn't give me all the information I need for that particular partition (ie start and end offsets in terms of 'physical' addresses).

Basically, I'm trying to cater for using another flash driver instead of the MTD sub-system on some custom hw in order to access the flash device. I'd like to be able to get the MTD partition start and end addresses so I know where to operate on this other device. A bit clunky, I know (if it were my decision MTD would be used).

RedBoot creates the FIS entries above and Linux parses this just fine at boot. If I were using MTD to access the flash device I could open /dev/mtd<x> or /dev/mtdblock<x> accordingly. However, there is a requirement to access the flash through another device (/dev/flash). For example, if I wanted to write to the area covered by /dev/mtd1, I need to be able to:

i) get the start address of /dev/mtd1
ii) open /dev/flash and seek to the offset provided by (i) above. iii) perform the operation(s).

...so I need the partition start addresses (and end too if possible). Can these offsets be obtained through the MTD user space ioctls?

Many thanks,
-- Matt

#1 lore raw
Quoted 6 lines · Matthew Lear

Hello all,

Is it possible to obtain an MTD partition's starting address through usage of the MTD ioctls? I've had a very quick look and from what I can tell, this doesn't seem to be possible.

Quoted 7 lines

To be clear, I'd like to obtain the addresses below (displayed by Linux when it detects the MTD partitions on boot).

Creating 6 MTD partitions on "physmap-flash.0":
0x00000000-0x00120000 : "RedBoot"
0x00120000-0x01000000 : "foo"
0x01000000-0x01400000 : "bar"

Did you try 'cat /proc/mtd' ?

Signature · 2 lines
Best Regards,
Artem Bityutskiy (Артём Битюцкий)
#2 lore raw
Quoted 11 lines · Matthew Lear
Quoted 10 lines

Hello all,

Is it possible to obtain an MTD partition's starting address through usage
of the MTD ioctls? I've had a very quick look and from what I can tell, this doesn't seem to be possible.

To be clear, I'd like to obtain the addresses below (displayed by Linux when it detects the MTD partitions on boot).

Quoted 6 lines
Quoted 4 lines

Creating 6 MTD partitions on "physmap-flash.0":
0x00000000-0x00120000 : "RedBoot"
0x00120000-0x01000000 : "foo"
0x01000000-0x01400000 : "bar"

Did you try 'cat /proc/mtd' ?

Yes, of course but the only way I could easily obtain the start address of a particular partition using /proc/mtd would be to increment the sizes of each previous partition. It's doable but just seems clunky...

#3 lore raw
Quoted 16 lines · Matthew Lear
Quoted 16 lines · Matthew Lear
Quoted 14 lines

Hello all,

Is it possible to obtain an MTD partition's starting address through usage
of the MTD ioctls? I've had a very quick look and from what I can tell, this doesn't seem to be possible.

To be clear, I'd like to obtain the addresses below (displayed by Linux when it detects the MTD partitions on boot).

Creating 6 MTD partitions on "physmap-flash.0":
0x00000000-0x00120000 : "RedBoot"
0x00120000-0x01000000 : "foo"
0x01000000-0x01400000 : "bar"

Quoted 5 lines
Quoted 1 line

Did you try 'cat /proc/mtd' ?

Yes, of course but the only way I could easily obtain the start address of a particular partition using /proc/mtd would be to increment the sizes of each previous partition. It's doable but just seems clunky...

Actually, it's worse than that. This will only work if each partition is adjacent. If there is any gap (ie unpartitioned space on the device) between partitions, this will not work at all.

Surely, I'm not the first person to try to obtain this info from MTD?

Any help appreciated...
-- Matt

A message that is not in the archive (sent off-list or not yet received): [email protected]

#5 lore raw
Quoted 5 lines

Hi Matt,

Please try below:

zcat /proc/config.gz |grep PHYSMAP_START

Thanks but /proc/config.gz doesn't exist on the embedded system that we're developing on. To be clear, I'm trying to access the start/end addresses from a program, not from a command prompt.
Cheers,
-- Matt