S3C2410上Jffs2的移植

作者:wpq 2004-7-06
参照llg写的关于hharm(e28f128flash)上的jffs2的移植 
具体如下:
1.移植环境:
CPU:ARMS3C2410
Linux version:2.4.18
Flash:Intel E28F128
2.修改设备号
由于ROM设备和MTDBlock设备的主设备号(major)都是31,所以如果你不想把JFFS2作为根文件系统的话,必须修改他们之一的major。如果你要修改JFFS2的设备major,在uClinux-dist/linux-2.4.x/include/linux/mtd/mtd.h中把
#define MTD_BLOCK_MAJOR  31
改成   
#define MTD_BLOCK_MAJOR  30
3.编写Maps文件
添加在flash上的map文件。在HHARM2410-R3/kernel/drivers/mtd/maps下添加flash(e28f128j3a-150)的map,我把握的文件内容贴上,仅供参考:
S3c2410_wpq.c
/*
 * Normal mappings of chips on Samsung s3c2410 in physical memory
 */
 
#include <linux/module.h>
#include <linux/types.h>
#include <linux/kernel.h>
#include <asm/io.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/map.h>
#include <linux/mtd/partitions.h>
#include <linux/config.h>
 
#define WINDOW_ADDR 0x01000000 //基地址
#define WINDOW_SIZE 0x01600000   //flash大小 16M
#define BUSWIDTH 2
 
static struct mtd_info *mymtd;
 
__u8 s3c2410_read8(struct map_info *map, unsigned long ofs)
{
    return readb(map->map_priv_1 + ofs);
}
 
__u16 s3c2410_read16(struct map_info *map, unsigned long ofs)
{
    return readw(map->map_priv_1 + ofs);
}
 
__u32 s3c2410_read32(struct map_info *map, unsigned long ofs)
{
    return readl(map->map_priv_1 + ofs);
}
 
void s3c2410_copy_from(struct map_info *map, void *to, unsigned long from, ssize_t len)
{
    memcpy(to, (void *)(map->map_priv_1 + from), len);
}
 
void s3c2410_write8(struct map_info *map, __u8 d, unsigned long adr)
{
    writeb(d, map->map_priv_1 + adr);
}
 
void s3c2410_write16(struct map_info *map, __u16 d, unsigned long adr)
{
    writew(d, map->map_priv_1 + adr);
}
 
void s3c2410_write32(struct map_info *map, __u32 d, unsigned long adr)
{
    writel(d, map->map_priv_1 + adr);
}
 
void s3c2410_copy_to(struct map_info *map, unsigned long to, const void *from, ssize_t len)
{
    memcpy((void *)(map->map_priv_1 + to), from, len);
}
 
struct map_info s3c2410_map = {
    name: "s3c2410 flash device",
    size: WINDOW_SIZE,
    buswidth: BUSWIDTH,
    read8: s3c2410_read8,
    read16: s3c2410_read16,
    read32: s3c2410_read32,
    copy_from: s3c2410_copy_from,
    write8: s3c2410_write8,
    write16: s3c2410_write16,
    write32: s3c2410_write32,
    copy_to: s3c2410_copy_to,
   
    map_priv_1: WINDOW_ADDR,
    map_priv_2: -1,
};
//以下是分区的内容,当然要根据你自己的需要确定了
static struct mtd_partition s3c2410_partitions[] = {
    {
            name: "reserved for bootloader",
            size: 0x040000,
            offset: 0x0,
            mask_flags: MTD_WRITEABLE,
    },
    {
            name: "reserved for kernel",
            size: 0x0100000,
            offset: 0x040000,
            mask_flags: MTD_WRITEABLE,
    },
    {
            name: "reserved for ramdisk",
            size: 0x400000,
            offset: 0x140000,
            mask_flags: MTD_WRITEABLE,
           
    },
    {
        name: "jffs2(8M)",
        size: 0x800000,
        offset: 0x800000,
    }
};
 
int __init init_s3c2410(void)
{
    printk(KERN_NOTICE "s3c2410 flash device: %x at %x/n", WINDOW_SIZE, WINDOW_ADDR);
    s3c2410_map.map_priv_1 = (unsigned long)ioremap(WINDOW_ADDR, WINDOW_SIZE);
    //printk("0/n");
    if (!s3c2410_map.map_priv_1) {
        printk("Failed to ioremap/n");
        return -EIO;
    }
    //printk("1/n");
    mymtd = do_map_probe("jedec_probe", &s3c2410_map);
    if (!mymtd)
    mymtd = do_map_probe("cfi_probe", &s3c2410_map);
    //printk("2/n");
    if (mymtd) {
        mymtd->module = THIS_MODULE;
        mymtd->erasesize = 0x20000; //擦除的大小 INTEL E28F128J3A-150 是128kb
        return add_mtd_partitions(mymtd, s3c2410_partitions, sizeof(s3c2410_partitions) / sizeof(struct mtd_partition));
    }
    //printk("3/n");
    iounmap((void *)s3c2410_map.map_priv_1);
    return -ENXIO;
}
 
static void __exit cleanup_s3c2410(void)
{
    if (mymtd) {
        del_mtd_partitions(mymtd);
        map_destroy(mymtd);
    }
    if (s3c2410_map.map_priv_1) {
        iounmap((void *)s3c2410_map.map_priv_1);
        s3c2410_map.map_priv_1 = 0;
    }
}
 
module_init(init_s3c2410);
module_exit(cleanup_s3c2410);
至于其文件内容及语句的含义网上相关的文章也有不少,参考一下吧。
4.将配置加入HHARM2410-R3/kernel/drivers/mtd/maps/Config.in
if [ "$CONFIG_ARM" = "y" ]; then
   dep_tristate ' CFI Flash device mapped on ARM Integrator/P720T' CONFIG_MTD_ARM_INTEGRATOR $CONFIG_MTD_CFI $CONFIG_ARCH_INTEGRATOR
   dep_tristate ' Cirrus CDB89712 evaluation board mappings' CONFIG_MTD_CDB89712 $CONFIG_MTD_CFI $CONFIG_ARCH_CDB89712
   dep_tristate ' CFI Flash device mapped on StrongARM SA11x0' CONFIG_MTD_SA1100 $CONFIG_MTD_CFI $CONFIG_ARCH_SA1100 $CONFIG_MTD_PARTITIONS
   dep_tristate ' CFI Flash device mapped on DC21285 Footbridge' CONFIG_MTD_DC21285 $CONFIG_MTD_CFI $CONFIG_ARCH_FOOTBRIDGE $CONFIG_MTD_PARTITIONS
   dep_tristate ' CFI Flash device mapped on Lubbock board' CONFIG_MTD_LUBBOCK $CONFIG_MTD_CFI $CONFIG_ARCH_LUBBOCK $CONFIG_MTD_PARTITIONS
   dep_tristate ' CFI Flash device mapped on the FortuNet board' CONFIG_MTD_FORTUNET $CONFIG_MTD_CFI $CONFIG_ARCH_FORTUNET $CONFIG_MTD_PARTITIONS
   dep_tristate ' CFI Flash device mapped on Epxa10db' CONFIG_MTD_EPXA10DB $CONFIG_MTD_CFI $CONFIG_MTD_PARTITIONS $CONFIG_ARCH_CAMELOT
   dep_tristate ' CFI Flash device mapped on PXA CerfBoard' CONFIG_MTD_PXA_CERF $CONFIG_MTD_CFI $CONFIG_ARCH_PXA_CERF $CONFIG_MTD_PARTITIONS
   dep_tristate ' NV-RAM mapping AUTCPU12 board' CONFIG_MTD_AUTCPU12 $CONFIG_ARCH_AUTCPU12
#wpq add S3C2410 的CFI配置  
   dep_tristate ' CFI Flash device mapped on S3C2410' CONFIG_MTD_S3C2410 $CONFIG_MTD_CFI
fi
5. 修改Makefile文件
在HHARM2410-R3/kernel/drivers/mtd/maps/ Makefile文件中加入如下语句(当然要根据你的实际情况写啊?!):
#wpq add
obj-$(CONFIG_MTD_S3C2410)      += s3c2410_wpq.o
6.配置内核使其支持jffs2
 
说明:
这里要特别注意Memory Technology Devices (MTD)的选项支持及其子项
RAM/ROM/Flash chip drivers --->
Mapping drivers for chip access --->
的选项支持;
还有File systems下选项支持。
##################################
***********************
#############################################
 Linux Kernel v2.4.18-rmk7-pxa1 Configuration
 
Linux Kernel v2.4.18-rmk7-pxa1 Configuration
 ------------------------------------------------------------------------------
 +-------------------- Memory Technology Devices (MTD) --------------------+
 | Arrow keys navigate the menu. <Enter> selects submenus --->.          |
 | Highlighted letters are hotkeys. Pressing <Y> includes, <N> excludes, |
 | <M> modularizes features. Press <Esc><Esc> to exit, <?> for Help.     |
 | Legend: [*] built-in [ ] excluded <M> module < > module capable     |
 | +---------------------------------------------------------------------+ |
 | |         <*> Memory Technology Device (MTD) support                  | |
 | |         [*] Debugging                                               | |
 | |         (3)   Debugging verbosity (0 = quiet, 3 = noisy)            | |
 | |         <*>   MTD partitioning support                              | |
  | |         <*>   MTD concatenating support                             | |
 | |         < >   RedBoot partition table parsing                       | |
 | |         < >   Command line partition table parsing                  | |
 | |         < >   ARM Firmware Suite partition parsing                  | |
 | |         --- User Modules And Translation Layers                     | |
 | |         <*>   Direct char device access to MTD devices              | |
 | |         <*>   Caching block device access to MTD devices            | |
 |         < >   FTL (Flash Translation Layer) support                 | |
 | |         < >   NFTL (NAND Flash Translation Layer) support           | |
 | |         RAM/ROM/Flash chip drivers --->                            | |
 | |         Mapping drivers for chip access --->                       | |
 | |         Self-contained MTD device drivers --->                     | |
 | |         NAND Flash Device Drivers --->                             | |
 | +---------------------------------------------------------------------+ |
 +------------------------
 | +---------v(+)--------------------------------------------------------+ |
 +-------------------------------------------------------------------------+
 |                    <Select>    < Exit >    < Help >                     |
 +---------------------------------------------------
 
 
 Linux Kernel v2.4.18-rmk7-pxa1 Configuration
 ------------------------------------------------------------------------------
 +---------------------- RAM/ROM/Flash chip drivers -----------------------+
 | Arrow keys navigate the menu. <Enter> selects submenus --->.          |
 | Highlighted letters are hotkeys. Pressing <Y> includes, <N> excludes, |
 | <M> modularizes features. Press <Esc><Esc> to exit, <?> for Help.     |
 | Legend: [*] built-in [ ] excluded <M> module < > module capable     |
 | +---------------------------------------------------------------------+ |
 | |<*>   Detect flash chips by Common Flash Interface (CFI) probe       | |
 | |<*>   Detect JEDEC JESD21c compatible flash chips                    | |
 | |[ ]   Flash chip driver advanced configuration options               | |
 | |<*>   Support for Intel/Sharp flash chips                            | |
 | |< >   Support for AMD/Fujitsu flash chips                            | |
 | |< >   Support for RAM chips in bus mapping                           | |
 | |< >   Support for ROM chips in bus mapping                           | |
 | |< >   Support for absent chips in bus mapping                        | |
 | |[ ]   Older (theoretically obsoleted now) drivers for non-CFI chips | |
 | |                                                                     | |
 | |                                                                     | |
 | +---------------------------------------------------------------------+ |
 +-------------------------------------------------------------------------+
 |                    <Select>    < Exit >    < Help >                     |
 +-------------------------------------------------------------------------+
 
 
 
 
Linux Kernel v2.4.18-rmk7-pxa1 Configuration
 ------------------------------------------------------------------------------
 +-------------------- Mapping drivers for chip access --------------------+
 | Arrow keys navigate the menu. <Enter> selects submenus --->.          |
 | Highlighted letters are hotkeys. Pressing <Y> includes, <N> excludes, |
 | <M> modularizes features. Press <Esc><Esc> to exit, <?> for Help.     |
 | Legend: [*] built-in [ ] excluded <M> module < > module capable     |
 | +---------------------------------------------------------------------+ |
 | |       <*>   CFI Flash device in physical memory map                 | |
 | |       (800000)     Physical start address of flash mapping          | |
 | |       (800000)     Physical length of flash mapping                 | |
 | |       (2)     Bus width in octets                                   | |
 | |       <*>   CFI Flash device mapped on S3C2410                      | |
 | |                                                                     | |
 | |                                                                     | |
 | |                                                                     | |
 | |                                                                     | |
 | |                                                                     | |
 | |                                                                     | |
 | +---------------------------------------------------------------------+ |
 +-------------------------------------------------------------------------+
 |                    <Select>    < Exit >    < Help >                     |
 +-------------------------------------------------------------------------+
 
 
 
 Linux Kernel v2.4.18-rmk7-pxa1 Configuration
 ------------------------------------------------------------------------------
 +----------------------------- File systems ------------------------------+
 | Arrow keys navigate the menu. <Enter> selects submenus --->.          |
 | Highlighted letters are hotkeys. Pressing <Y> includes, <N> excludes, |
 | <M> modularizes features. Press <Esc><Esc> to exit, <?> for Help.     |
 | Legend: [*] built-in [ ] excluded <M> module < > module capable     |
 | +---------------------------------------------------------------------+ |
 | | [ ] Quota support                                                  | |
 | | < > Kernel automounter support                                     | |
 | | < > Kernel automounter version 4 support (also supports v3)        | |
 | | < > Reiserfs support                                               | |
 | | < > ADFS file system support                                       | |
 | | < > Amiga FFS file system support (EXPERIMENTAL)                   | |
 | | < > Apple Macintosh file system support (EXPERIMENTAL)             | |
 | | < > BFS file system support (EXPERIMENTAL)                         | |
 | | <*> Ext3 journalling file system support (EXPERIMENTAL)            | |
 | | [ ]   JBD (ext3) debugging support                                 | |
 | | <*> DOS FAT fs support                                             | |
 | < >   MSDOS fs support                                             | |
 | | <*>   VFAT (Windows-95) fs support                                 | |
 | | < > EFS file system support (read only) (EXPERIMENTAL)             | |
 | | < > Journalling Flash File System (JFFS) support                   | |
 | | <*> Journalling Flash File System v2 (JFFS2) support               | |
 | | (2) JFFS2 debugging verbosity (0 = quiet, 2 = noisy)               | |
 | | <*> Compressed ROM file system support                             | |
 | | [*] Virtual memory file system support (former shm fs)             | |
 | | <*> Simple RAM-based file system support                           | |
 | | < > ISO 9660 CDROM file system support                             | |
 | | < > Minix fs support        
 | < > FreeVxFS file system support (VERITAS VxFS(TM) compatible)     | |
 | | < > NTFS file system support (read only)                           | |
 | | < > OS/2 HPFS file system support                                  | |
 | | [*] /proc file system support                                      | |
 | | [*] /dev file system support (EXPERIMENTAL)                        | |
 | | [*]   Automatically mount at boot                                  | |
 | |  [ ]   Debug devfs                                                  | |
 | | [*] /dev/pts file system for Unix98 PTYs                           | |
 | | < > QNX4 file system support (read only) (EXPERIMENTAL)            | |
 | | < > ROM file system support                                        | |
 | | <*> Second extended fs support
 | [ ]   Debug devfs                                                  | |
 | | [*] /dev/pts file system for Unix98 PTYs                           | |
 | | < > QNX4 file system support (read only) (EXPERIMENTAL)            | |
 | | < > ROM file system support                                        | |
 | | <*> Second extended fs support                                     | |
 | | < > System V/Xenix/V7/Coherent file system support                 | |
 | | < > UDF file system support (read only)                            | |
 | | < > UFS file system support (read only)                            | |
 | | Network File Systems --->                                         | |
 | | Partition Types --->                                              | |
 | | Native Language Support --->         
 | +--v(+)---------------------------------------------------------------+ |
 +-------------------------------------------------------------------------+
 |                    <Select>    < Exit >    < Help >                     |
 +-------------------------------------------------------------------------+
7.制作jffs2映象
首先取得jffs2的制作工具:mkfs.jffs2(可从网上取得)
执行如下命令即可生成所要的映象:
chmod 777 mkfs.jffs2 //取得mkfs.jffs2的执行权限,即mkfs.jffs2成为可执行文件
./mkfs.jffs2 -d  jffs2/ -o jffs2.img//生成jffs2文件映象,其中目录jffs2可以是任意的目录,这里的jffs2是我新建的一个目录
8.Jffs2的应用
对于ppcboot、zImage、ramdisk.image.gz向romfs一样正常烧写;
以上三项烧写完之后,接着烧写jffs2.img,具体烧写如下:
tftp 30800000 jffs2.img
fl   1800000 30800000 20000 (其中20000可根据jffs2的大小适当调整,理论上只要比jffs2.img略大即可,但要为20000的整数倍)
 
 
特别注意:要想使我们做的jffs2文件系统更加的人性化,我们还可以在ramdisk.image.gz的mnt/etc/init.d/rc$文件中加入如下指令以便启动时自动挂载jffs2文件系统。
Mount   -t jffs2   /dev/mtdblock/4   /mnt   //其中的/dev/mtdblock/4是flash上的jffs2分区。
 
 
 
9.以上配置烧写完成之后就可启动我们的系统,对jffs2分区尽情的添加和删除了,添加的东东再不会因断电而丢失了,呵呵就到这了。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值