Modified Makefile to allow 'out of kernel tree' module building for 2.6.x
authormarty <marty>
Sun, 18 Sep 2005 05:31:26 +0000 (05:31 +0000)
committermarty <marty>
Sun, 18 Sep 2005 05:31:26 +0000 (05:31 +0000)
kernels.  (See Documentation/kbuild for details on how to do this).

Modified yportenv.h to include moduleconfig.h

Added new file moduleconfig.h.  This is the compromise that makes it
possible to build yaffs in any of three ways:

1) in-kernel, in the kernel source tree.  You put yaffs into the
   kernel source tree using patch-ker.sh
2) as-module, in the kernel source tree.
3) as-module, out of the kernel source tree.

Because modules built outside of the kernel source tree can't use the
kconfig tool to add their CONFIG_ variable to <linux/config.h>,
moduleconfig.h is a compromise that gathers all of the CONFIG_
variables in one place.

The CONFIG_ variables in moduleconfig.h are protected by
KBUILD_MODNAME, a variable that is only set when a module is built
outside of the kernel source tree.

The CONFIG_ variables are all on by default -- this is probably not
what you want.  Comment out the ones that you don't want enabled.

NOTE: Not all of the CONFIG_ variables used in yaffs2 are in
moduleconfig.h.  Those that are not relevant to Linux are missing.

Makefile
moduleconfig.h [new file with mode: 0644]
yportenv.h

index a210c1e..f9e7576 100644 (file)
--- a/Makefile
+++ b/Makefile
-#Makefile for YAFFS2 as a module
-#
-# NB this is not yet suitable for putting into the kernel tree.
-# YAFFS: Yet another FFS. A NAND-flash specific file system. 
-#
-# Copyright (C) 2002 Aleph One Ltd.
-#   for Toby Churchill Ltd and Brightstar Engineering
-#
-# Created by Charles Manning <charles@aleph1.co.uk>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation.
-#
-# $Id: Makefile,v 1.6 2005-08-01 20:54:45 luc Exp $
-#
+ifneq ($(KERNELRELEASE),)
 
-## Change or override  KERNELDIR to your kernel
-## comment out USE_xxxx if you don't want these features.
+       obj-m := yaffs2.o
 
-KERNELDIR = /usr/src/kernels/2.6.11-1.1369_FC4-i686
+       yaffs2-objs := yaffs_mtdif.o yaffs_mtdif2.o
+       yaffs2-objs += yaffs_ecc.o yaffs_fs.o yaffs_guts.o
+       yaffs2-objs += yaffs_packedtags2.o
+       yaffs2-objs += yaffs_tagscompat.o yaffs_tagsvalidity.o
 
-## Change if you are using a cross-compiler
-MAKETOOLS = 
+else
 
-CC=$(MAKETOOLS)gcc
-LD=$(MAKETOOLS)ld
+       KERNELDIR ?= /lib/modules/$(shell uname -r)/build
+       PWD := $(shell pwd)
 
-# Configurations...
-# Comment out the stuff you don't want.
-#
+modules default:
+       $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
 
-# CONFIG_YAFFS_YAFFS1
-# This adds the yaffs file system support for working with a
-# a 512 byte / page NAND mtd.
-
-USE_MTD = -DCONFIG_YAFFS_YAFFS1
-
-# CONFIG_YAFFS_YAFFS2
-# This adds the yaffs2 file system support for working with a 
-# 2048 or larger byte / page NAND mtd.
-
-USE_MTD_2 = -DCONFIG_YAFFS_YAFFS2
-
-
-# CONFIG_YAFFS_USE_NANDECC
-# This enables the ECC functions of the generic MTD-NAND driver.
-# This will not work if you are using the old mtd.
-#
-# NB UseNANDECC does not work at present with yaffsram.
-
-USE_NANDECC = -DCONFIG_YAFFS_USE_NANDECC
-
-# CONFIG_YAFFS_ECC_WRONG_ORDER
-# This makes yaffs_ecc.c use the same ecc byte order as
-# Steven Hill's nand_ecc.c. If not set, then you get the
-# same ecc byte order as SmartMedia.
-
-#USE_WRONGECC = -DCONFIG_YAFFS_ECC_WRONG_ORDER
-
-# CONFIG_YAFFS_USE_HEADER_FILE_SIZE
-# When the flash is scanned, two file sizes are constructed:
-# * The size taken from the object header for the file.
-# * The size figured out by scanning the data chunks.
-# If this option is enabled, then the object header size is used, otherwise the scanned size is used.
-# Suggest leaving this disabled.
-
-#USE_HEADER_FILE_SIZE = -DCONFIG_YAFFS_USE_HEADER_FILE_SIZE
-
-#CONFIG_YAFFS_DISABLE_CHUNK_ERASED_CHECK
-# Enabling this turns off the test that chunks are erased in flash before writing to them.
-# this is safe, since the write verification will fail.
-# Suggest enabling the test (ie. keep the following line commented) during development to help debug things.
-
-#IGNORE_CHUNK_ERASED = -DCONFIG_YAFFS_DISABLE_CHUNK_ERASED_CHECK
-
-#CONFIG_YAFFS_DISABLE_WRITE_VERIFY
-# I am severely reluctant to provide this config. Disabling the verification is not a good thing to do
-# since NAND writes can fail silently.
-# Disabling the write verification will cause your teeth to rot, rats to eat your corn and give you split ends.
-# You have been warned. ie. Don't uncomment the following line.
-
-#IGNORE_WRITE_VERIFY = -DCONFIG_YAFFS_DISBLE_WRITE_VERIFY
-
-#CONFIG_YAFFS_SHORT_NAMES_IN_RAM
-# If this config is set, then short names are stored with the yaffs_Object
-# This costs an extra 16 bytes of RAM per object, but makes look-ups faster.
-
-ENABLE_SHORT_NAMES_IN_RAM = -DCONFIG_SHORT_NAMES_IN_RAM
-
-# End of configuration options.
-
-WIERD_COMPILE_CONFIGS = -DNR_IRQS=1 -DNR_IRQ_VECTORS=1
-
-YAFFS_CONFIGS = $(WIERD_COMPILE_CONFIGS) \
-                $(USE_RAM_FOR_TEST) $(USE_MTD) $(USE_RAM_FOR_TEST_2) $(USE_MTD_2)\
-                $(USE_HEADER_FILE_SIZE) $(IGNORE_CHUNK_ERASED) $(IGNORE_WRITE_VERIFY) \
-                $(ENABLE_SHORT_NAMES_IN_RAM) $(USE_NANDECC) $(USE_WRONGECC)
-
-
-YAFFS2_CONFIGS = $(YAFFS_CONFIGS)
-
-CFLAGS = -D__KERNEL__ -DMODULE $(YAFFS2_CONFIGS)  -I$(KERNELDIR)/include -O2 -g -Wall
-
-
-OBJS = yaffs_fs.o yaffs_guts.o yaffs_ramem.o yaffs_mtdif.o yaffs_ecc.o yaffs_tagscompat.o yaffs_ramem2k.o yaffs_packedtags2.o yaffs_mtdif2.o yaffs_tagsvalidity.o
-
-
-all: yaffs.o
-
-$(OBJS): %.o: %.c Makefile
-       $(CC) -c $(CFLAGS) $< -o $@
-
-yaffs.o: $(OBJS)
-       $(LD) -r $(OBJS) -o $@
+mi modules_install:
+       $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
 
 clean:
-       rm -f $(OBJS) core
+       $(MAKE) -C $(KERNELDIR) M=$(PWD) clean
+endif
diff --git a/moduleconfig.h b/moduleconfig.h
new file mode 100644 (file)
index 0000000..a8684c3
--- /dev/null
@@ -0,0 +1,14 @@
+#ifndef __YAFFS_CONFIG_H__
+#define __YAFFS_CONFIG_H__
+
+#ifdef KBUILD_MODNAME
+#define CONFIG_YAFFS_FS
+#define CONFIG_YAFFS_YAFFS1
+#define CONFIG_YAFFS_YAFFS2
+#define CONFIG_YAFFS_DOES_ECC
+#define CONFIG_YAFFS_ECC_WRONG_ORDER
+#define CONFIG_YAFFS_DISABLE_CHUNK_ERASED_CHECK
+#define CONFIG_YAFFS_SHORT_NAMES_IN_RAM
+#endif /* KBUILD_MODNAME */
+
+#endif /* __YAFFS_CONFIG_H__ */
index 1fc2272..0543383 100644 (file)
@@ -15,7 +15,7 @@
  *
  * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
  *
- * $Id: yportenv.h,v 1.7 2005-08-11 02:33:03 marty Exp $
+ * $Id: yportenv.h,v 1.8 2005-09-18 05:31:26 marty Exp $
  *
  */
 
@@ -28,6 +28,8 @@
 
 #elif  defined __KERNEL__
 
+#include "moduleconfig.h"
+
 /* Linux kernel */
 #include <linux/config.h>
 #include <linux/kernel.h>