S3C2410上Jffs2的移植

admin @ 2014-03-25 , reply:0

參照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分區盡情的添加和刪除了,添加的東東再不會因斷電而丟失了,呵呵就到這了。




[admin via 研發互助社區 ] S3C2410上Jffs2的移植已經有1416次圍觀

http://cocdig.com/docs/show-post-42343.html