summaryrefslogtreecommitdiff
path: root/components/dfs/filesystems/jffs2/kernel/linux
diff options
context:
space:
mode:
author[email protected] <[email protected]>2012-01-13 18:45:44 +0000
committer[email protected] <[email protected]>2012-01-13 18:45:44 +0000
commit3b118059644fbde996083eb53c2e475cc049fd2e (patch)
tree7f68390fbe0a24b9c10d8980b7e11fe669baf6ef /components/dfs/filesystems/jffs2/kernel/linux
parent97771b3334f0cbfb28e438ea764421233d6a0b00 (diff)
add jffs2 code (porting from ecos v3.0)
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1919 bbd45198-f89e-11dd-88c7-29a3b14d5316
Diffstat (limited to 'components/dfs/filesystems/jffs2/kernel/linux')
-rw-r--r--components/dfs/filesystems/jffs2/kernel/linux/TODO11
-rw-r--r--components/dfs/filesystems/jffs2/kernel/linux/compiler.h7
-rw-r--r--components/dfs/filesystems/jffs2/kernel/linux/completion.h13
-rw-r--r--components/dfs/filesystems/jffs2/kernel/linux/config.h5
-rw-r--r--components/dfs/filesystems/jffs2/kernel/linux/crc32.h8
-rw-r--r--components/dfs/filesystems/jffs2/kernel/linux/errno.h2
-rw-r--r--components/dfs/filesystems/jffs2/kernel/linux/fs.h13
-rw-r--r--components/dfs/filesystems/jffs2/kernel/linux/init.h3
-rw-r--r--components/dfs/filesystems/jffs2/kernel/linux/kernel.h37
-rw-r--r--components/dfs/filesystems/jffs2/kernel/linux/list.h147
-rw-r--r--components/dfs/filesystems/jffs2/kernel/linux/mtd/compatmac.h5
-rw-r--r--components/dfs/filesystems/jffs2/kernel/linux/mtd/mtd.h5
-rw-r--r--components/dfs/filesystems/jffs2/kernel/linux/pagemap.h19
-rw-r--r--components/dfs/filesystems/jffs2/kernel/linux/rbtree.h62
-rw-r--r--components/dfs/filesystems/jffs2/kernel/linux/rwsem.h20
-rw-r--r--components/dfs/filesystems/jffs2/kernel/linux/sched.h7
-rw-r--r--components/dfs/filesystems/jffs2/kernel/linux/slab.h14
-rw-r--r--components/dfs/filesystems/jffs2/kernel/linux/spinlock.h43
-rw-r--r--components/dfs/filesystems/jffs2/kernel/linux/stat.h12
-rw-r--r--components/dfs/filesystems/jffs2/kernel/linux/string.h6
-rw-r--r--components/dfs/filesystems/jffs2/kernel/linux/timer.h15
-rw-r--r--components/dfs/filesystems/jffs2/kernel/linux/types.h19
-rw-r--r--components/dfs/filesystems/jffs2/kernel/linux/version.h5
-rw-r--r--components/dfs/filesystems/jffs2/kernel/linux/vmalloc.h3
-rw-r--r--components/dfs/filesystems/jffs2/kernel/linux/wait.h21
-rw-r--r--components/dfs/filesystems/jffs2/kernel/linux/workqueue.h18
-rw-r--r--components/dfs/filesystems/jffs2/kernel/linux/zlib.h15
-rw-r--r--components/dfs/filesystems/jffs2/kernel/linux/zutil.h6
28 files changed, 541 insertions, 0 deletions
diff --git a/components/dfs/filesystems/jffs2/kernel/linux/TODO b/components/dfs/filesystems/jffs2/kernel/linux/TODO
new file mode 100644
index 0000000000..df8a6d1a51
--- /dev/null
+++ b/components/dfs/filesystems/jffs2/kernel/linux/TODO
@@ -0,0 +1,11 @@
+
+This contains a very limited set of Linux-compatibility headers, initially
+just for getting JFFS2 to build.
+
+Some things are simply stubs which don't _work_, to allow the JFFS2 code
+to compile. Note that you may need to implement these _properly_ in order
+to use these for making other Linux code work, or indeed for making the
+JFFS2 NAND support work.
+
+The non-working parts include, but are not limited to:
+ workqueue.h, wait.h, timer.h, spinlock.h, sched.h, compiler.h
diff --git a/components/dfs/filesystems/jffs2/kernel/linux/compiler.h b/components/dfs/filesystems/jffs2/kernel/linux/compiler.h
new file mode 100644
index 0000000000..fb253651a3
--- /dev/null
+++ b/components/dfs/filesystems/jffs2/kernel/linux/compiler.h
@@ -0,0 +1,7 @@
+#ifndef __LINUX_COMPILER_H__
+#define __LINUX_COMPILER_H__
+
+#define likely(x) (x)
+#define unlikely(x) (x)
+
+#endif /* __LINUX_COMPILER_H__ */
diff --git a/components/dfs/filesystems/jffs2/kernel/linux/completion.h b/components/dfs/filesystems/jffs2/kernel/linux/completion.h
new file mode 100644
index 0000000000..d2493b2710
--- /dev/null
+++ b/components/dfs/filesystems/jffs2/kernel/linux/completion.h
@@ -0,0 +1,13 @@
+#ifndef __LINUX_COMPLETION_H__
+#define __LINUX_COMPLETION_H__
+
+#if defined (__GNUC__)
+struct completion { } ;
+#elif defined (MSVC)
+struct completion {int no; } ;
+#else
+#error "please use a right C compiler"
+#endif
+
+#endif /* __LINUX_COMPLETION_H__ */
+
diff --git a/components/dfs/filesystems/jffs2/kernel/linux/config.h b/components/dfs/filesystems/jffs2/kernel/linux/config.h
new file mode 100644
index 0000000000..9c404b7c73
--- /dev/null
+++ b/components/dfs/filesystems/jffs2/kernel/linux/config.h
@@ -0,0 +1,5 @@
+#ifndef __LINUX_CONFIG_H__
+#define __LINUX_CONFIG_H__
+#define CONFIG_JFFS2_FS_DEBUG 0
+#define GFP_KERNEL 0
+#endif /* __LINUX_CONFIG_H__ */
diff --git a/components/dfs/filesystems/jffs2/kernel/linux/crc32.h b/components/dfs/filesystems/jffs2/kernel/linux/crc32.h
new file mode 100644
index 0000000000..8d19a1eb62
--- /dev/null
+++ b/components/dfs/filesystems/jffs2/kernel/linux/crc32.h
@@ -0,0 +1,8 @@
+#ifndef CRC32_H
+#define CRC32_H
+
+#include <cyg/crc/crc.h>
+
+#define crc32(val, s, len) cyg_crc32_accumulate(val, (unsigned char *)s, len)
+
+#endif
diff --git a/components/dfs/filesystems/jffs2/kernel/linux/errno.h b/components/dfs/filesystems/jffs2/kernel/linux/errno.h
new file mode 100644
index 0000000000..84d78c5bc9
--- /dev/null
+++ b/components/dfs/filesystems/jffs2/kernel/linux/errno.h
@@ -0,0 +1,2 @@
+//#include <errno.h>
+#include "codes.h" //fixme
diff --git a/components/dfs/filesystems/jffs2/kernel/linux/fs.h b/components/dfs/filesystems/jffs2/kernel/linux/fs.h
new file mode 100644
index 0000000000..c2f173ac81
--- /dev/null
+++ b/components/dfs/filesystems/jffs2/kernel/linux/fs.h
@@ -0,0 +1,13 @@
+#ifndef __LINUX_FS_H__
+#define __LINUX_FS_H__
+
+#include <linux/stat.h>
+/*
+ * File types
+ */
+#define DT_UNKNOWN 0
+#define DT_DIR 4
+#define DT_REG 8
+
+
+#endif /* __LINUX_FS_H__ */
diff --git a/components/dfs/filesystems/jffs2/kernel/linux/init.h b/components/dfs/filesystems/jffs2/kernel/linux/init.h
new file mode 100644
index 0000000000..e4c702f996
--- /dev/null
+++ b/components/dfs/filesystems/jffs2/kernel/linux/init.h
@@ -0,0 +1,3 @@
+#ifndef __LINUX_INIT_H__
+#define __LINUX_INIT_H__
+#endif
diff --git a/components/dfs/filesystems/jffs2/kernel/linux/kernel.h b/components/dfs/filesystems/jffs2/kernel/linux/kernel.h
new file mode 100644
index 0000000000..b695930109
--- /dev/null
+++ b/components/dfs/filesystems/jffs2/kernel/linux/kernel.h
@@ -0,0 +1,37 @@
+#ifndef __LINUX_KERNEL_H__
+#define __LINUX_KERNEL_H__
+//#include <cyg/infra/diag.h>
+//#include <stdio.h> //mod by prife @ 2011/11/20
+
+#define jiffies 100
+
+#define ERR_PTR(err) ((void*)(err))
+#define PTR_ERR(err) ((unsigned long)(err))
+#define IS_ERR(err) ((unsigned long)err > (unsigned long)-1000L)
+
+#define CURRENT_TIME cyg_timestamp()
+
+#define KERN_EMERG "<0>" // system is unusable
+#define KERN_ALERT "<1>" // action must be taken immediately
+#define KERN_CRIT "<2>" // critical conditions
+#define KERN_ERR "<3>" // error conditions
+#define KERN_WARNING "<4>" // warning conditions
+#define KERN_NOTICE "<5>" // normal but significant condition
+#define KERN_INFO "<6>" // informational
+#define KERN_DEBUG "<7>" // debug-level messages
+#define printk rt_kprintf//diag_printf //mod by prife
+
+#ifndef min //mod by prife
+#define min(x,y) (x<y?x:y)
+#endif
+#ifndef max
+#define max(x,y) (x<y?y:x)
+#endif
+#define min_t(t, x,y) ((t)x<(t)y?(t)x:(t)y)
+
+
+#endif /* __LINUX_KERNEL_H__ */
+
+
+
+
diff --git a/components/dfs/filesystems/jffs2/kernel/linux/list.h b/components/dfs/filesystems/jffs2/kernel/linux/list.h
new file mode 100644
index 0000000000..03c7b39cca
--- /dev/null
+++ b/components/dfs/filesystems/jffs2/kernel/linux/list.h
@@ -0,0 +1,147 @@
+/*
+ * JFFS2 -- Journalling Flash File System, Version 2.
+ *
+ *
+ * Created by Jonathan Larmour <[email protected]>
+ *
+ *===========================================================================
+ * ####ECOSGPLCOPYRIGHTBEGIN####
+ * -------------------------------------------
+ * This file is part of eCos, the Embedded Configurable Operating System.
+ * Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+ *
+ * eCos is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 or (at your option) any later
+ * version.
+ *
+ * eCos is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with eCos; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * As a special exception, if other files instantiate templates or use
+ * macros or inline functions from this file, or you compile this file
+ * and link it with other works to produce a work based on this file,
+ * this file does not by itself cause the resulting work to be covered by
+ * the GNU General Public License. However the source code for this file
+ * must still be made available in accordance with section (3) of the GNU
+ * General Public License v2.
+ *
+ * This exception does not invalidate any other reasons why a work based
+ * on this file might be covered by the GNU General Public License.
+ * -------------------------------------------
+ * ####ECOSGPLCOPYRIGHTEND####
+ *===========================================================================
+ *
+ */
+
+#ifndef CYGONCE_FS_JFFS2_LIST_H
+#define CYGONCE_FS_JFFS2_LIST_H
+
+
+/* -----------------------------------------------------------------------*/
+
+/* Doubly linked list implementation to replace the GPL'd one used in
+ the Linux kernel. */
+
+#include <stddef.h>
+#include <cyg/infra/cyg_type.h>
+
+/* TYPES */
+
+struct list_head {
+ struct list_head *next;
+ struct list_head *prev;
+};
+
+/* MACROS */
+
+#define LIST_HEAD_INIT(name) { &(name), &(name) }
+
+#define LIST_HEAD(name) \
+ struct list_head name = LIST_HEAD_INIT(name)
+
+#define INIT_LIST_HEAD( _list_ ) \
+CYG_MACRO_START \
+(_list_)->next = (_list_)->prev = (_list_); \
+CYG_MACRO_END
+
+/* FUNCTIONS */
+
+/* Insert an entry _after_ the specified entry */
+static __inline__ void
+list_add( struct list_head *newent, struct list_head *afterthisent )
+{
+ struct list_head *next = afterthisent->next;
+ newent->next = next;
+ newent->prev = afterthisent;
+ afterthisent->next = newent;
+ next->prev = newent;
+} /* list_add() */
+
+/* Insert an entry _before_ the specified entry */
+static __inline__ void
+list_add_tail( struct list_head *newent, struct list_head *beforethisent )
+{
+ struct list_head *prev = beforethisent->prev;
+ newent->prev = prev;
+ newent->next = beforethisent;
+ beforethisent->prev = newent;
+ prev->next = newent;
+} /* list_add_tail() */
+
+/* Delete the specified entry */
+static __inline__ void
+list_del( struct list_head *ent )
+{
+ ent->prev->next = ent->next;
+ ent->next->prev = ent->prev;
+} /* list_del() */
+
+/* Is this list empty? */
+static __inline__ int
+list_empty( struct list_head *list )
+{
+ return ( list->next == list );
+} /* list_empty() */
+
+/* list_entry - Assuming you have a struct of type _type_ that contains a
+ list which has the name _member_ in that struct type, then given the
+ address of that list in the struct, _list_, this returns the address
+ of the container structure */
+
+#define list_entry( _list_, _type_, _member_ ) \
+ ((_type_ *)((char *)(_list_)-(char *)(offsetof(_type_,_member_))))
+
+/* list_for_each - using _ent_, iterate through list _list_ */
+
+#define list_for_each( _ent_, _list_ ) \
+ for ( (_ent_) = (_list_)->next; \
+ (_ent_) != (_list_); \
+ (_ent_) = (_ent_)->next )
+
+/*
+ * list_for_each_entry - this function can be use to iterate over all
+ * items in a list* _list_ with it's head at _head_ and link _item_
+ */
+#if defined (__GNUC__)
+#define list_for_each_entry(_list_, _head_, _item_) \
+for ((_list_) = list_entry((_head_)->next, typeof(*_list_), _item_); \
+ &((_list_)->_item_) != (_head_); \
+ (_list_) = list_entry((_list_)->_item_.next, typeof(*_list_), _item_))
+
+#elif defined (MSVC)
+#define list_for_each_entry(_list_, _head_, _item_) \
+for ((_list_) = list_entry((_head_)->next, struct jffs2_compressor, _item_); \
+ &((_list_)->_item_) != (_head_); \
+ (_list_) = list_entry((_list_)->_item_.next, struct jffs2_compressor, _item_))
+#else
+#endif
+/* -----------------------------------------------------------------------*/
+#endif /* #ifndef CYGONCE_FS_JFFS2_LIST_H */
+/* EOF list.h */
diff --git a/components/dfs/filesystems/jffs2/kernel/linux/mtd/compatmac.h b/components/dfs/filesystems/jffs2/kernel/linux/mtd/compatmac.h
new file mode 100644
index 0000000000..cee3749250
--- /dev/null
+++ b/components/dfs/filesystems/jffs2/kernel/linux/mtd/compatmac.h
@@ -0,0 +1,5 @@
+#ifndef __LINUX_MTD_COMPATMAC_H__
+#define __LINUX_MTD_COMPATMAC_H__
+
+
+#endif /* __LINUX_MTD_COMPATMAC_H__ */
diff --git a/components/dfs/filesystems/jffs2/kernel/linux/mtd/mtd.h b/components/dfs/filesystems/jffs2/kernel/linux/mtd/mtd.h
new file mode 100644
index 0000000000..817d31cf6f
--- /dev/null
+++ b/components/dfs/filesystems/jffs2/kernel/linux/mtd/mtd.h
@@ -0,0 +1,5 @@
+#ifndef __LINUX_MTD_MTD_H__
+#define __LINUX_MTD_MTD_H__
+
+
+#endif /* __LINUX_MTD_MTD_H__ */
diff --git a/components/dfs/filesystems/jffs2/kernel/linux/pagemap.h b/components/dfs/filesystems/jffs2/kernel/linux/pagemap.h
new file mode 100644
index 0000000000..fccf9c4061
--- /dev/null
+++ b/components/dfs/filesystems/jffs2/kernel/linux/pagemap.h
@@ -0,0 +1,19 @@
+#ifndef __LINUX_PAGEMAP_H__
+#define __LINUX_PAGEMAP_H__
+
+#include <asm/bug.h>
+#include <asm/page.h>
+
+#define PAGE_CACHE_SHIFT PAGE_SHIFT
+#define PAGE_CACHE_SIZE PAGE_SIZE
+
+#define PageLocked(pg) 1
+#define Page_Uptodate(pg) 0
+#define UnlockPage(pg)
+#define PAGE_BUG(pg) BUG()
+#define ClearPageUptodate(pg)
+#define SetPageError(pg)
+#define ClearPageError(pg)
+#define SetPageUptodate(pg)
+
+#endif /* __LINUX_PAGEMAP_H__ */
diff --git a/components/dfs/filesystems/jffs2/kernel/linux/rbtree.h b/components/dfs/filesystems/jffs2/kernel/linux/rbtree.h
new file mode 100644
index 0000000000..ef7a77dea7
--- /dev/null
+++ b/components/dfs/filesystems/jffs2/kernel/linux/rbtree.h
@@ -0,0 +1,62 @@
+#ifndef _LINUX_RBTREE_H
+#define _LINUX_RBTREE_H
+
+#if defined (__GNUC__)
+#elif defined (MSVC)
+#define __inline__ __inline
+#define inline __inline
+#else
+#endif
+
+struct rb_node {
+ struct rb_node *rb_left; /* left element */
+ struct rb_node *rb_right; /* right element */
+ struct rb_node *rb_parent; /* parent element */
+ int rb_color; /* node color */
+};
+
+struct rb_root {
+ struct rb_node *rb_node; /* root of the tree */
+};
+
+#ifndef NULL
+#define NULL ((void *)0)
+#endif
+
+#if defined (__GNUC__)
+#define RB_ROOT ((struct rb_root){NULL})
+#elif defined (MSVC)
+#define RB_ROOT {NULL}//{struct rb_root _x = {NULL};}
+#else
+#endif
+
+#define rb_entry(p, container, field) \
+ ((container *) ((char *)p - ((char *)&(((container *)0)->field))))
+
+#define RB_BLACK 0
+#define RB_RED 1
+
+
+extern void rb_insert_color(struct rb_node *, struct rb_root *);
+extern void rb_erase(struct rb_node *, struct rb_root *);
+
+/* Find logical next and previous nodes in a tree */
+extern struct rb_node *rb_next(struct rb_node *);
+extern struct rb_node *rb_prev(struct rb_node *);
+extern struct rb_node *rb_first(struct rb_root *);
+
+/* Fast replacement of a single node without remove/rebalance/add/rebalance */
+extern void rb_replace_node(struct rb_node *victim, struct rb_node *new,
+ struct rb_root *root);
+
+static inline void rb_link_node(struct rb_node * node, struct rb_node * parent,
+ struct rb_node ** rb_link)
+{
+ node->rb_parent = parent;
+ node->rb_color = RB_RED;
+ node->rb_left = node->rb_right = NULL;
+
+ *rb_link = node;
+}
+
+#endif /* _LINUX_RBTREE_H */
diff --git a/components/dfs/filesystems/jffs2/kernel/linux/rwsem.h b/components/dfs/filesystems/jffs2/kernel/linux/rwsem.h
new file mode 100644
index 0000000000..d648a150ca
--- /dev/null
+++ b/components/dfs/filesystems/jffs2/kernel/linux/rwsem.h
@@ -0,0 +1,20 @@
+#ifndef __LINUX_RWSEM_H__
+#define __LINUX_RWSEM_H__
+
+// eCos does not have the concept of a read/write semaphore. So just
+// map them onto normal semaphores and hope we don't deadlock
+// somewhere.
+
+#include <asm/semaphore.h>
+
+struct rw_semaphore;
+
+#define down_read(sem) cyg_drv_mutex_lock((cyg_drv_mutex_t *)sem)
+#define down_read_trylock(sem) cyg_drv_mutex_trylock((cyg_drv_mutex_t *)sem)
+#define down_write(sem) cyg_drv_mutex_lock((cyg_drv_mutex_t *)sem)
+#define down_write_trylock(sem) cyg_drv_mutex_trylock((cyg_drv_mutex_t *)sem)
+#define up_read(sem) cyg_drv_mutex_unlock((cyg_drv_mutex_t *)sem)
+#define up_write(sem) cyg_drv_mutex_unlock((cyg_drv_mutex_t *)sem)
+#define downgrade_write(sem)
+
+#endif // __LINUX_RWSEM_H__
diff --git a/components/dfs/filesystems/jffs2/kernel/linux/sched.h b/components/dfs/filesystems/jffs2/kernel/linux/sched.h
new file mode 100644
index 0000000000..14a7359754
--- /dev/null
+++ b/components/dfs/filesystems/jffs2/kernel/linux/sched.h
@@ -0,0 +1,7 @@
+#ifndef __LINUX_SCHED_H__
+#define __LINUX_SCHED_H__
+
+#define cond_resched() do { } while(0)
+#define signal_pending(x) (0)
+
+#endif /* __LINUX_SCHED_H__ */
diff --git a/components/dfs/filesystems/jffs2/kernel/linux/slab.h b/components/dfs/filesystems/jffs2/kernel/linux/slab.h
new file mode 100644
index 0000000000..5b711b829d
--- /dev/null
+++ b/components/dfs/filesystems/jffs2/kernel/linux/slab.h
@@ -0,0 +1,14 @@
+#ifndef __LINUX_SLAB_H__
+#define __LINUX_SLAB_H__
+
+#include <stdlib.h> //prife
+
+#include <asm/page.h> /* Don't ask. Linux headers are a mess. */
+
+#define kmalloc(x, y) malloc(x)
+#define kfree(x) free(x)
+#define vmalloc(x) malloc(x)
+#define vfree(x) free(x)
+
+#endif /* __LINUX_SLAB_H__ */
+
diff --git a/components/dfs/filesystems/jffs2/kernel/linux/spinlock.h b/components/dfs/filesystems/jffs2/kernel/linux/spinlock.h
new file mode 100644
index 0000000000..db3f4d4502
--- /dev/null
+++ b/components/dfs/filesystems/jffs2/kernel/linux/spinlock.h
@@ -0,0 +1,43 @@
+#ifndef __LINUX_SPINLOCK_H__
+#define __LINUX_SPINLOCK_H__
+
+#if defined (__GNUC__)
+typedef struct { } spinlock_t;
+
+#define SPIN_LOCK_UNLOCKED (spinlock_t) { }
+#define DEFINE_SPINLOCK(x) spinlock_t x = SPIN_LOCK_UNLOCKED
+#elif defined (MSVC)
+typedef struct {int no; } spinlock_t;
+
+#define SPIN_LOCK_UNLOCKED (spinlock_t) ( 0)
+#define DEFINE_SPINLOCK(x) spinlock_t x
+#else
+#error "please use a right C compiler"
+#endif
+
+#define spin_lock_init(lock) \
+CYG_MACRO_START; \
+CYG_UNUSED_PARAM(spinlock_t *, lock); \
+CYG_MACRO_END
+
+#define spin_lock(lock) \
+CYG_MACRO_START; \
+CYG_UNUSED_PARAM(spinlock_t *, lock); \
+CYG_MACRO_END
+
+#define spin_unlock(lock) \
+CYG_MACRO_START; \
+CYG_UNUSED_PARAM(spinlock_t *, lock); \
+CYG_MACRO_END
+
+#define spin_lock_bh(lock) \
+CYG_MACRO_START; \
+CYG_UNUSED_PARAM(spinlock_t *, lock); \
+CYG_MACRO_END
+
+#define spin_unlock_bh(lock) \
+CYG_MACRO_START; \
+CYG_UNUSED_PARAM(spinlock_t *, lock); \
+CYG_MACRO_END
+
+#endif /* __LINUX_SPINLOCK_H__ */
diff --git a/components/dfs/filesystems/jffs2/kernel/linux/stat.h b/components/dfs/filesystems/jffs2/kernel/linux/stat.h
new file mode 100644
index 0000000000..5ed08194a0
--- /dev/null
+++ b/components/dfs/filesystems/jffs2/kernel/linux/stat.h
@@ -0,0 +1,12 @@
+#ifndef __LINUX_STAT_H__
+#define __LINUX_STAT_H__
+
+
+#include "os_sys_stat.h" //mod by prife
+
+#define S_IRUGO (S_IRUSR|S_IRGRP|S_IROTH)
+#define S_IWUGO (S_IWUSR|S_IWGRP|S_IWOTH)
+#define S_IXUGO (S_IXUSR|S_IXGRP|S_IXOTH)
+#define S_IRWXUGO (S_IRWXU|S_IRWXG|S_IRWXO)
+
+#endif /* __LINUX_STAT_H__ */
diff --git a/components/dfs/filesystems/jffs2/kernel/linux/string.h b/components/dfs/filesystems/jffs2/kernel/linux/string.h
new file mode 100644
index 0000000000..fc14ba607f
--- /dev/null
+++ b/components/dfs/filesystems/jffs2/kernel/linux/string.h
@@ -0,0 +1,6 @@
+#ifndef __LINUX_STRING_H__
+#define __LINUX_STRING_H__
+
+#include <string.h>
+
+#endif /* __LINUX_STRING_H__ */
diff --git a/components/dfs/filesystems/jffs2/kernel/linux/timer.h b/components/dfs/filesystems/jffs2/kernel/linux/timer.h
new file mode 100644
index 0000000000..d6f91a68bc
--- /dev/null
+++ b/components/dfs/filesystems/jffs2/kernel/linux/timer.h
@@ -0,0 +1,15 @@
+#ifndef __LINUX_TIMER_H__
+#define __LINUX_TIMER_H__
+
+/* Not yet */
+
+#if defined (__GNUC__)
+struct timer_list { } ;
+#elif defined (MSVC)
+struct timer_list {int no; } ;
+#else
+#error "please use a right C compiler"
+#endif
+
+#endif /* __LINUX_TIMER_H__ */
+
diff --git a/components/dfs/filesystems/jffs2/kernel/linux/types.h b/components/dfs/filesystems/jffs2/kernel/linux/types.h
new file mode 100644
index 0000000000..56665b774e
--- /dev/null
+++ b/components/dfs/filesystems/jffs2/kernel/linux/types.h
@@ -0,0 +1,19 @@
+#ifndef __LINUX_TYPES_H__
+#define __LINUX_TYPES_H__
+
+#include "cyg/infra/cyg_type.h"
+
+#define uint8_t cyg_uint8
+#define uint16_t cyg_uint16
+#define uint32_t cyg_uint32
+
+#define int8_t cyg_int8
+#define int16_t cyg_int16
+#define int32_t cyg_int32
+
+#define loff_t off_t
+
+
+#define kvec iovec
+#endif /* __LINUX_TYPES_H__ */
+
diff --git a/components/dfs/filesystems/jffs2/kernel/linux/version.h b/components/dfs/filesystems/jffs2/kernel/linux/version.h
new file mode 100644
index 0000000000..cca2d731f1
--- /dev/null
+++ b/components/dfs/filesystems/jffs2/kernel/linux/version.h
@@ -0,0 +1,5 @@
+#ifndef __LINUX_VERSION_H__
+#define __LINUX_VERSION_H__
+
+
+#endif /* __LINUX_VERSION_H__ */
diff --git a/components/dfs/filesystems/jffs2/kernel/linux/vmalloc.h b/components/dfs/filesystems/jffs2/kernel/linux/vmalloc.h
new file mode 100644
index 0000000000..6f18ab2255
--- /dev/null
+++ b/components/dfs/filesystems/jffs2/kernel/linux/vmalloc.h
@@ -0,0 +1,3 @@
+#ifndef __LINUX_VMALLOC_H__
+#define __LINUX_VMALLOC_H__
+#endif
diff --git a/components/dfs/filesystems/jffs2/kernel/linux/wait.h b/components/dfs/filesystems/jffs2/kernel/linux/wait.h
new file mode 100644
index 0000000000..db3fd7a608
--- /dev/null
+++ b/components/dfs/filesystems/jffs2/kernel/linux/wait.h
@@ -0,0 +1,21 @@
+#ifndef __LINUX_WAIT_H__
+#define __LINUX_WAIT_H__
+
+
+#if defined (__GNUC__)
+typedef struct { } wait_queue_head_t;
+#elif defined (MSVC)
+typedef struct {int no; } wait_queue_head_t;
+#else
+#error "please use a right C compiler"
+#endif
+
+#define init_waitqueue_head(wait) do{} while (0)
+#define add_wait_queue(wait,new_wait) do{} while (0)
+#define remove_wait_queue(wait,old_wait) do{} while (0)
+#define DECLARE_WAITQUEUE(wait,current) do{} while (0)
+
+static inline void wake_up(wait_queue_head_t *erase_wait)
+{ /* Only used for waking up threads blocks on erases. Not used in eCos */ }
+
+#endif /* __LINUX_WAIT_H__ */
diff --git a/components/dfs/filesystems/jffs2/kernel/linux/workqueue.h b/components/dfs/filesystems/jffs2/kernel/linux/workqueue.h
new file mode 100644
index 0000000000..8b334d5593
--- /dev/null
+++ b/components/dfs/filesystems/jffs2/kernel/linux/workqueue.h
@@ -0,0 +1,18 @@
+#ifndef __LINUX_WORKQUEUE_H__
+#define __LINUX_WORKQUEUE_H__
+
+/* We don't do this yet */
+#if defined (__GNUC__)
+struct work_struct { } ;
+#elif defined (MSVC)
+struct work_struct {int no; } ;
+#else
+#error "please use a right C compiler"
+#endif
+
+
+#define INIT_WORK(x,y,z) /* */
+#define schedule_work(x) do { } while(0)
+#define flush_scheduled_work() do { } while(0)
+
+#endif /* __LINUX_WORKQUEUE_H__ */
diff --git a/components/dfs/filesystems/jffs2/kernel/linux/zlib.h b/components/dfs/filesystems/jffs2/kernel/linux/zlib.h
new file mode 100644
index 0000000000..b731bc208e
--- /dev/null
+++ b/components/dfs/filesystems/jffs2/kernel/linux/zlib.h
@@ -0,0 +1,15 @@
+#ifndef __LINUX_ZLIB_H__
+#define __LINUX_ZLIB_H__
+
+#include <cyg/compress/zlib.h>
+
+#define zlib_deflateInit(x,y) deflateInit(x,y)
+#define zlib_deflate(x,y) deflate(x,y)
+#define zlib_deflateEnd(x) deflateEnd(x)
+#define zlib_inflateInit(x) inflateInit(x)
+#define zlib_inflateInit2(x,y) inflateInit2(x,y)
+#define zlib_inflate(x,y) inflate(x,y)
+#define zlib_inflateEnd(x) inflateEnd(x)
+
+
+#endif /* __LINUX_ZLIB_H__ */
diff --git a/components/dfs/filesystems/jffs2/kernel/linux/zutil.h b/components/dfs/filesystems/jffs2/kernel/linux/zutil.h
new file mode 100644
index 0000000000..c3774baf9e
--- /dev/null
+++ b/components/dfs/filesystems/jffs2/kernel/linux/zutil.h
@@ -0,0 +1,6 @@
+#ifndef __LINUX_ZUTIL_H__
+#define __LINUX_ZUTIL_H__
+
+#define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */
+
+#endif /* __LINUX_ZUTIL_H__ */