NOTICE: The Processors Wiki will End-of-Life on January 15, 2021. It is recommended to download any files or other content you may need that are hosted on processors.wiki.ti.com. The site is now set to read only.
TI811X PSP MTD Utilities User Guide
Contents
What are the MTD Utilities?[edit]
MTD subsystem (stands for Memory Technology Devices) provides an abstraction layer for raw flash devices. It makes it possible to use the same API when working with different flash types and technologies, e.g. NAND, OneNAND, NOR, AG-AND, ECC'd NOR, etc.
MTD subsystem does not deal with block devices like MMC, eMMC, SD, CompactFlash, etc. These devices are not raw flashes but they have a Flash Translation layer inside, which makes them look like block devices. These devices are the subject of the Linux block subsystem, not MTD.
MTD subsystem has the following interfaces.
- MTD character devices - usually referred to as /dev/mtd0, /dev/mtd1, and so on. These character devices provide I/O access to the raw flash. They support a number of ioctl calls for erasing eraseblocks, marking them as bad or checking if an eraseblock is bad, getting information about MTD devices, etc.
- The sysfs interface is relatively newer and it provides full information about each MTD device in the system. This interface is easily extensible and developers are encouraged to use the sysfs interface instead of older ioctl or /proc/mtd interfaces, when possible.
- The /proc/mtd proc file system file provides general MTD information. This is a legacy interface and the sysfs interface provides more information.
MTD subsystem supports bare NAND flashes with software and hardware ECC, OneNAND flashes, CFI (Common Flash Interface) NOR flashes, and other flash types.
For more information on MTD, refer <http://www.linux-mtd.infradead.org/doc/general.html>
MTD-Utils User-space tools[edit]
The MTD Utilities are a collection of tools that allow the user to interact with the MTD subsystem in the kernel to perform operations on Flash devices. The most commonly used utilities are:
- flash_erase - Erases an erase block of flash
- flash_eraseall - Erases the entire flash device
- flashcp - Copies data into NOR flash
- flash_info - Displays information about Flash devices
- flash_lock - Lock flash pages to prevent writing
- flash_unlock - Unlock flash pages to allow writing
- mkfs.jffs2 - Create a JFFS2 file system image from an existing file system
- nandwrite - Write an input file (i.e. JFFS2 or YAFFS2 image) to the NAND Flash device
These utilities are often used to write file system images to the Flash device on an embedded system.
MTD-Utils Compilation[edit]
Source and dependencies[edit]
- Dependencies
The 'mtd-utility' requires zlib, lzo and uuid (from e2fsprogs) libraries. The former two are used for compressing the data, and the latter one is used for generating universally unique ID number for the file-system.
- zlib
- lzo
- e2fsprogs
- Sources
zlib
Download zlib from http://zlib.net/. The zlib version is 1.2.5.
lzo
Download from http://www.oberhumer.com/opensource/lzo/download/ . The lzo version is 2.0.6. Download from http://www.oberhumer.com/opensource/lzo/download/lzo-2.06.tar.gz
e2fsprogs
Download e2fsprogs from http://e2fsprogs.sourceforge.net/ . The e2fsprogs version is 1.42. Download from http://sourceforge.net/projects/e2fsprogs/files/e2fsprogs/1.42/e2fsprogs-1.42.tar.gz/download
MTD-Utils
MTD utils are available from http://git.infradead.org/mtd-utils.git. You can get them by
- using gitweb "snapshot" feature (use "snapshot" link at latest commit at the right side)
- using http://git.or.cz/
- git pull git://git.infradead.org/mtd-utils.git mtd-utils
MTD-Utils Version as of writing this wiki is release 1.4.8
Current link for tar archive as of writing this wiki is http://git.infradead.org/mtd-utils.git/snapshot/d37fcc0afd0d4a14c56812847e8e4257d0a99e3b.tar.gz (--> mtd-utils-d37fcc0.tar.gz)
Setup Preparation[edit]
In this example, we use
/home/user/mtd
as base directory. This example assumes you are in this directory and the above three source .tar.gz files are located here, too.
To not pollute the host file system, we install build results in local sub-directory:
> mkdir install
should result in /home/user/mtd/install (replace this with your real path below).
This section describes how to compile the MTD utilities for the Linux development host.
zlib
host$ tar xvf zlib-1.2.5.tar.gz host$ cd zlib-1.2.5/ host$ ./configure --prefix=/home/user/mtd/install host$ make host$ make install host$ cd ..
Result should be zlib.a in /home/user/mtd/install/lib directory and zlib's headers in /home/user/mtd/install/include.
lzo
host$ tar xvf lzo-2.06.tar.gz host$ cd lzo-2.06/ host$ ./configure --build=i686-pc-linux --prefix=/home/user/mtd/install host$ make host$ make install host$ cd ..
Result should be liblzo2.a in /home/user/mtd/install/lib directory and lzo's headers in /home/user/mtd/install/include/lzo.
e2fsprogs
host$ tar xvf e2fsprogs-1.42.tar.gz host$ cd e2fsprogs-1.42/ host$ ./configure --build=i686-pc-linux --prefix=/home/user/mtd/install host$ make host$ make install host$ cd lib/uuid/ host$ make install host$ cd ../../../
Result should be libuuid.a in /home/user/mtd/install/lib directory and uuid's headers in /home/user/mtd/install/include/uuid.
mtd-utils
host$ tar xvf mtd-utils-d37fcc0.tar.gz host$ cd mtd-utils-d37fcc0/
MTD-Utils don't have a configure script, so we have to edit Makefile again. Depending on the version of MTD Utils, make sure head of top level Makefile has:
host$ vi Makefile PREFIX = /home/user/mtd/install ZLIBCPPFLAGS = -I$(PREFIX)/include LZOCPPFLAGS = -I$(PREFIX)/include ZLIBLDFLAGS = -L$(PREFIX)/lib LZOLDFLAGS = -L$(PREFIX)/lib LDFLAGS += $(ZLIBLDFLAGS) $(LZOLDFLAGS) CFLAGS ?= -O2 -g $(ZLIBCPPFLAGS) $(LZOCPPFLAGS)
Save and close vi editor
Edit the common.mk file and comment out the PREFIX=/usr line
host$ vi common.mk #PREFIX=/usr
Save and close vi editor
host$ WITHOUT_XATTR=1 make host$ make install host$ cd ..
Directory /home/user/mtd/install/sbin/ should now contain compiled MTD utils you can use on Linux host.