﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-新兵上路</title><link>http://www.cnitblog.com/eleader/</link><description /><language>zh-cn</language><lastBuildDate>Mon, 04 May 2026 19:26:12 GMT</lastBuildDate><pubDate>Mon, 04 May 2026 19:26:12 GMT</pubDate><ttl>60</ttl><item><title>mtd文件系统（转载）</title><link>http://www.cnitblog.com/eleader/archive/2008/09/05/48759.html</link><dc:creator>左岸</dc:creator><author>左岸</author><pubDate>Fri, 05 Sep 2008 08:22:00 GMT</pubDate><guid>http://www.cnitblog.com/eleader/archive/2008/09/05/48759.html</guid><wfw:comment>http://www.cnitblog.com/eleader/comments/48759.html</wfw:comment><comments>http://www.cnitblog.com/eleader/archive/2008/09/05/48759.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/eleader/comments/commentRss/48759.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/eleader/services/trackbacks/48759.html</trackback:ping><description><![CDATA[<p style="TEXT-INDENT: 2em">本文主要介绍如何在AT91SAM9261EK板子上制作和使用jffs2文件系统，使用的是linux-2.6.21内核。
<p style="TEXT-INDENT: 2em">
<p style="TEXT-INDENT: 2em">首先配置MTD
<p style="TEXT-INDENT: 2em">
<p style="TEXT-INDENT: 2em">
<center><ccid_nobr>
<table cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=400 align=center borderColorLight=black border=1>
    <tbody>
        <tr>
            <td class=code style="FONT-SIZE: 9pt" bgColor=#e6e6e6>
            <pre><ccid_code>$ make menuconfig
            进入 Memory Technology Devices (MTD) ---&gt;
            &lt;*&gt; Memory Technology Device (MTD) support
            [*] Debugging
            [*] MTD partitioning support
            [*]  Command line partition table parsing
            [*] Direct char device access to MTD devices
            [*] Caching block device access to MTD devices
            RAM/ROM/Flash chip drivers -----&gt;
            &lt;*&gt; Detect non-CFI AMD/JEDEC-compatible flash chips
            &lt;*&gt; Support for AMD/Fujitsu flash chips
            Mapping drivers for chip access ---&gt;
            [*] Support non-linear mappings of flash chips
            Self-contained MTD device drivers ---&gt;
            [*] Support for AT45... DataFlash
            NAND Flash Device Drivers ----&gt;
            [*] NAND Device Support
            [*] Support for NAND Flash /SmartMedia on AT91
            File systems ----&gt;
            &lt;*&gt; Second extended fs support
            [*] Inotify file change notification support
            [*] Inotify support for user space
            &lt;*&gt; Filesystem in Userspace support
            Miscellaneous filesystems
            &lt;*&gt; Journalling Flash File System v2 (JFFS2) support
            [*] JFFS2 write-buffering support
            &lt;*&gt; Compressed ROM file system support (cramfs)</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</ccid_nobr></center>
<p style="TEXT-INDENT: 2em">
<p style="TEXT-INDENT: 2em">以上配置中没有列出的,都没选；其配置仅做参考，可根据自己的需要自行配置。
<p style="TEXT-INDENT: 2em">
<p style="TEXT-INDENT: 2em">$ make all
<p style="TEXT-INDENT: 2em">
<p style="TEXT-INDENT: 2em">其次制作mtd-util工具
<p style="TEXT-INDENT: 2em">
<p style="TEXT-INDENT: 2em">从网上下载zlib-1.2.3.tar.gz　解压缩　$ cd zlib-1.2.3
<p style="TEXT-INDENT: 2em">$ ./configure &#8211;prefix=/usr/local/arm/3.4.1/arm-linux --shared
<p style="TEXT-INDENT: 2em">修改Makefile如下：
<p style="TEXT-INDENT: 2em">CC=arm-linux-gcc
<p style="TEXT-INDENT: 2em">LDSHARED=arm-linux-ld -shared
<p style="TEXT-INDENT: 2em">
<p style="TEXT-INDENT: 2em">$ make all
<p style="TEXT-INDENT: 2em">$ make install
<p style="TEXT-INDENT: 2em">注意：这里是安装在/usr/local/arm/3.4.1/arm-linux目录下
<p style="TEXT-INDENT: 2em">
<p style="TEXT-INDENT: 2em">由于交叉编译mtd工具时需要zlib.h文件，所以在编译之前先安装zlib库文件。
<p style="TEXT-INDENT: 2em">
<p style="TEXT-INDENT: 2em">从网上下载　mtd-snapshot-20050519.tar.bz2 解压缩 $ cd mtd/util
<p style="TEXT-INDENT: 2em">
<p style="TEXT-INDENT: 2em">修改该目录下的Makefile:
<p style="TEXT-INDENT: 2em">
<p style="TEXT-INDENT: 2em">CROSS=arm-linux-
<p style="TEXT-INDENT: 2em">
<p style="TEXT-INDENT: 2em">$ make all
<p style="TEXT-INDENT: 2em">
<p style="TEXT-INDENT: 2em">然后将该目录下生成的 flash_erase,flash_eraseall, mkfs.jffs2工具放在ramdisk 文件系统中（我这里放在/bin目录下），另外在　ramdisk文件系统的dev目录下要保证有mtd0~mtd9,mtdblock0~mtdblock9这些设备，如果没有可参考 ramdisk文件系统的制作，也可从pc机相同目录下拷贝，要加上文件属性。
<p style="TEXT-INDENT: 2em">
<p style="TEXT-INDENT: 2em">另外，需要将/arm-linux/lib目录下的libz.so, libz.so.1, libz.so.1.2.3文件拷贝到ramdisk文件系统的/lib目录下，否则mkfs.jffs2工具不能使用。
<p style="TEXT-INDENT: 2em">
<p style="TEXT-INDENT: 2em">最后将新生成的uImage和ramdisk文件下载到板子上，起动系统，使用命令 cat /proc/mtd　可以看到
<p style="TEXT-INDENT: 2em">dev: size erasesize name
<p style="TEXT-INDENT: 2em">mtd0: 00040000 00020000 "Partition 1"
<p style="TEXT-INDENT: 2em">mtd1: 0ffc0000 00020000 "Partition 2"
<p style="TEXT-INDENT: 2em">mtd2: 00420000 00000210 "spi0.0-AT45DB321x"
<p style="TEXT-INDENT: 2em">
<p style="TEXT-INDENT: 2em">这里mtd0,mtd1是nandflash上的分区； mtd2是dataflsh上的分区，该分区上放有u-boot,uImage.img,ramdisk.img,所以我们这里可以使用空的nandflash上的两个分区。使用之前要先用工具flash_erase或者flash_eraseall擦除nandflash，具体使用的步骤如下：
<p style="TEXT-INDENT: 2em">
<p style="TEXT-INDENT: 2em"># flash_erase /dev/mtd1
<p style="TEXT-INDENT: 2em">
<p style="TEXT-INDENT: 2em">制作jffs2映像
<p style="TEXT-INDENT: 2em">
<p style="TEXT-INDENT: 2em"># cd /var/tmp
<p style="TEXT-INDENT: 2em">
<p style="TEXT-INDENT: 2em"># mkdir jffs2 (jffs2下的目录可以任意建)
<p style="TEXT-INDENT: 2em">
<p style="TEXT-INDENT: 2em"># mkfs.jffs2 &#8211;d jffs2/ -o jffs2.img
<p style="TEXT-INDENT: 2em">
<p style="TEXT-INDENT: 2em"># cp /var/tmp/jffs2/jffs2.img /dev/mtdblock1
<p style="TEXT-INDENT: 2em">
<p style="TEXT-INDENT: 2em">最后# mount -t jffs2 /dev/mtdblock1 /mnt/mtd即可，使用结束可使用$ umount /mnt/mtd　卸载.
<p style="TEXT-INDENT: 2em">
<p style="TEXT-INDENT: 2em">如果只是当作普通的jffs2 来使用dataflash或者nandflash，可不必制作 jffs2映像，只需要最后一步，# mount -t jffs2 /dev/mtdblock1 /mnt/mtd即可。<br><br><br><br>AT91sam9263EK使用JFFS2根文件系统&nbsp; <br><br>在AT91sam9263EK成功配置了NFS根文件系统后，后来又想把JFFS2也移植到AT91sam9263EK上吧，说干就干。<br><br>1． 呵呵，其实很简单我使用的linux-2.6.20内核里已经有jffs2 文件系统支持，选上jffs2即可<br><br>File systems ---&gt;<br><br>Miscellaneous filesystems ---&gt;<br><br>&lt;*&gt; Journalling Flash File System v2 (JFFS2) support <br><br>(0) JFFS2 debugging verbosity (0 = quiet, 2 = noisy) <br><br>[*] JFFS2 write-buffering support <br><br>[*] JFFS2 summary support (EXPERIMENTAL) <br><br>[*] JFFS2 XATTR support (EXPERIMENTAL) <br><br>[*] JFFS2 POSIX Access Control Lists <br><br>[*] JFFS2 Security Labels <br><br>[*] Advanced compression options for JFFS2 <br><br>[*] JFFS2 ZLIB compression support <br><br>[*] JFFS2 RTIME compression support <br><br>[ ] JFFS2 RUBIN compression support <br><br>JFFS2 default compression mode (priority) <br><br>选上MTD支持<br><br>Device Drivers ---&gt;<br><br>Memory Technology Devices (MTD) ---&gt;<br><br>&lt;*&gt; Memory Technology Device (MTD) support <br><br>[ ] Debugging <br><br>&lt;*&gt; MTD concatenating support <br><br>[*] MTD partitioning support <br><br>&lt; &gt; RedBoot partition table parsing <br><br>[*] Command line partition table parsing <br><br>&lt;*&gt; ARM Firmware Suite partition parsing <br><br>--- User Modules And Translation Layers <br><br>&lt;*&gt; Direct char device access to MTD devices <br><br>&lt;*&gt; Caching block device access to MTD devices <br><br>&lt;*&gt; FTL (Flash Translation Layer) support <br><br>&lt;*&gt; NFTL (NAND Flash Translation Layer) support <br><br>[ ] Write support for NFTL <br><br><br>2． 从ttp://www.linux-mtd.infradead.org/上下载<br><br>mtd-utils-1.0.0.tar.gz 到宿主机。<br><br>解压 <br><br>tar xvzf mtd-utils-1.0.0.tar.gz<br><br>进入mtd-utils-1.0.0目录修改Makefile进行编译。<br><br>编译出mkfs.jffs2,nandwrite等工具<br><br><br>3． 创建jffs2根文件系统:<br><br>首先要有一个其他类型的根文件系统，制作和获取方式可以参见&lt;&lt; AT91sam9263EK使用NFS根文件系统&gt;&gt;<br><br>比如可以:<br><br>mount -t cramfs rootfs_lnxdemo.cramfs tmp/ -o loop<br><br>rootfs_lnxdemo.cramfs由atmel提供当然你可以自己制作，这里直接使用atmel的省去了制作的麻烦。<br><br>tar czvf target.tar.gz tmp/<br><br>生成jffs2根文件系统镜像:<br><br>mkfs.jffs2 &#8211;l &#8211;s 0x400 &#8211;e 0x20000 &#8211;d tmp/ -o target.jffs2<br><br>4． 烧写jffs2根文件系统镜像到nand flash。<br><br>烧写方法应该有多种常用的有2种(呵呵自己认为的):<br><br>a.通过nand编程器烧写镜像文件到nand flash芯片然后再焊接到pcb.<br><br>b.挂载nfs文件系统，使用nandwrite工具写镜像文件<br><br>到mtd设备。<br><br>第一种适合生产时使用，而我们测试时候比较适合使用第二种方式。<br><br>挂载nfs文件系统:<br><br>nandwrite &#8211;o /dev/mtd1 target.jffs2<br><br>或者是在nfs 根文件系统下:<br><br>mount &#8211;t jffs2 /dev/mtdblock1 /mnt<br><br>cd /mnt<br><br>tar xvzf ../target.tar.gz<br><br>umount /mnt<br><br>5． 配置内核启动参数如下:<br><br>setenv bootargs mem=64M console=ttyS0 115200 root=/dev/mtdblock1 rootfstype=jffs2 rw<br><br>6． 重新启动，呵呵内核使用jffs2文件系统自动挂载根文件系统到mtdblock1设备上。<br><br>ls 测试一下<br><br>vi test<br><br>hello this is for test jffs2 filesystem.<br><br>保存退出。<br><br>Sync<br><br>重新启动<br><br>vi test<br><br>内容依旧。<br><br>Ok jffs2根文件系统引导成功。<br></p>
<img src ="http://www.cnitblog.com/eleader/aggbug/48759.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/eleader/" target="_blank">左岸</a> 2008-09-05 16:22 <a href="http://www.cnitblog.com/eleader/archive/2008/09/05/48759.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>