==================================================================
STEP 0: Configuration
1. <arch/arm/tools/>mach-types add one entry
# machine_is_xxx CONFIG_xxxx  MACH_TYPE_xxx  number
   ks8695        ARCH_KS8695  KS8695          180
 
    The above file is needed so that the cript
    linux/arch/arm/tools/gen-mach-types can generate 
    linux/include/asm-arm/mach-types.h

2.<arch\arm\configs\>ks8695_defconfig   create a config file
  When you do make <machine-name>_config, e.g.make ks8695_config
  to build a kernel,then the file corresponding to the first part of
  the parameter is copied out of linux/arch/arm/def-configs/  to 
  linux/.config
3.<arch/arm/>Kconfig
    config ARCH_KS8695
    bool "Micrel/Kendin KS8695"
    help
        Support for Micrel/Kendin KS8695 "Centaur" (ARM922T) based
       System-on-Chip devices.
4. <arch/arm/mm/>Kconfig
 
   1."Processor Type"
 
   # Select CPU types depending on the architecture selected.  This   
    selects which CPUs we support in the kernel image, and the 
   compiler instruction optimiser behaviour.
  # ARM922T
    config CPU_ARM922T
      bool "Support ARM922T processor" if ARCH_INTEGRATOR
      depends on ARCH_LH7A40X || ARCH_INTEGRATOR || ARCH_KS8695
      default y if ARCH_LH7A40X || ARCH_KS8695
      select CPU_32v4T
      select CPU_ABRT_EV4T
      select CPU_CACHE_V4WT
      select CPU_CACHE_VIVT
      select CPU_CP15_MMU
      select CPU_COPY_V4WB if MMU
      select CPU_TLB_V4WBI if MMU
    help
       The ARM922T is a version of the ARM920T, but with smaller
       instruction and data caches. It is used in Altera's
       Excalibur XA device family and Micrel's KS8695 Centaur.
       Say Y if you want support for the ARM922T processor.
       Otherwise, say N.
 
 2."Processor Features"
     config CPU_BIG_ENDIAN
     bool "Build big-endian kernel"
       depends on ARCH_SUPPORTS_BIG_ENDIAN
     help
       Say Y if you plan on running a kernel in big-endian mode.
       Note that your board must be properly built and your board
       port must properly enable any big-endian related features
       of your chipset/board/processor.
=================================================================
=================================================================
STEP 1: make files
0.<arch/arm/mach-ks8695/Makefile.boot
    (zreladdr-y)
    (params_phys-y)
    (initrd_phys-y)
1.<arch/arm/>Makefile 
   machine-$(CONFIG_ARCH_KS8695)  := ks8695
   ifneq ($(machine-y),)
    MACHINE  := arch/arm/mach-$(machine-y)/
2.<arch/arm/boot>Makefile
 
ifneq ($(MACHINE),)
include $(srctree)/$(MACHINE)/Makefile.boot
endif
# Note: the following conditions must always be true:
#   ZRELADDR == virt_to_phys(PAGE_OFFSET + TEXT_OFFSET)
#   PARAMS_PHYS must be within 4MB of ZRELADDR
#   INITRD_PHYS must be in RAM
ZRELADDR    := $(zreladdr-y)
PARAMS_PHYS := $(params_phys-y)
INITRD_PHYS := $(initrd_phys-y)
export ZRELADDR INITRD_PHYS PARAMS_PHYS
targets := Image zImage xipImage bootpImage uImage
 
=================================================================
STEP 2: .C .S files
1.<arch/arm/march-ks8695/> directory
      -- Low-level IRQ helper macros
      -- Debug output macros
      -- Irq number definations irq.c
      -- DMA definations dma.h
      -- Memory mapping/translation arch.c
      -- Reset operation  system.h
      -- IDLE function

    makefile.boot  define macros zreladdr-y
    entry-macro.S  Low-level IRQ helper macros for machine
       get_irqnr_and_base
       disable_irq
    debug-macro.S
        these are low level debug function, which talk to a        
        serial port without relying on interrupts and any other
        kernel functionality
 
    Reference:
       <arch/arm/kernel/>
       head.S
       entry-header.S
       entry-armv.S
       entry-common.S
   
 
    arch.c /*may be use other file name.: board-micrel.c*/
       define structure machie_desc map_desc and map_io function
       This should contain the architecture-specific fix ups and IO
       MACHINE_START(KS8695, "KS8695 Centaur Development Board")
      /* Maintainer: Micrel Semiconductor Inc. */
       .phys_io = KS8695_IO_PA,
       .io_pg_offst = (KS8695_IO_VA >> 18) & 0xfffc,
       .boot_params = KS8695_SDRAM_PA + 0x100,
       .map_io  = ks8695_map_io,
       .init_irq = ks8695_init_irq,
       .init_machine = micrel_init,
       .timer  = &ks8695_timer,
       MACHINE_END
 
       ks8695_map_io()->iotable_init()
       will be called in pageing_init/devicemaps_init in arch/mm.c
      
      static struct __initdata map_desc ks8695_io_desc[] = {
        {
          .virtual = KS8695_IO_VA,
          .pfn  = __phys_to_pfn(KS8695_IO_PA),
          .length  = KS8695_IO_SIZE,
          .type  = MT_DEVICE,
        }
      };
   irq.c
      You should provide the XXX_init_irq function here. This sets
      up the interrupt controller.Interrupt mask and unmask func-
      tions
         
=================================================================
=================================================================
STEP 3: include files
 [asm-arm/arch-ks8695/]|[asm-arm/]memroy.h
      PHYS_OFFSET   
      refer to /documents/arm/porting and documents/arm/memory.txt
      kernel memory symbol defintion. 
 [asm-arm/mach]|[asm-arm/arch-ks8695]|[/asm-arm/]dma.h 
        Defines for DMA channels,and DMA-able areas of memory
        
 [asm-arm/arch-ks8695/]|[asm-arm/]hardware.h
      define the memory addresses,IO addresses,and so on,according 
      to your hardware specifications (memory map and IO map). 
      #define KS8695_SDRAM_PA  0x00000000
      #define KS8695_IO_PA  0x03F00000
      #define KS8695_IO_VA  0xF0000000
      #define KS8695_IO_SIZE  SZ_1M
      #define KS8695_PCIMEM_PA 0x60000000
      #define KS8695_PCIMEM_SIZE SZ_512M
      #define KS8695_PCIIO_PA  0x80000000
      #define KS8695_PCIIO_SIZE SZ_64K
 [asm-arm/arch-ks8695/]|[asm-arm/]io.h 
 
 [asm-arm/arch-ks8695/]|[asm-arm/]system.h 
      -- Reset operation
      -- IDLE function
 [asm-arm/arch-ks8695/]|[asm-arm/]timex.h 
 
 [asm-arm/arch-ks8695/]uncompress.h 
 
 [asm-arm/arch-ks8695/]irqs.h
     IRQ number definition
     Reference: [asm-arm/]irq.h
 
 [asm-arm/arch-ks8695/]vmalloc.h 
    in pgtable.h <- <mm.h>
     #ifndef CONFIG_MMU
     #include "pgtable-nommu.h"
     #else
     #include <asm/memory.h>
     #include <asm/arch/vmalloc.h>
 
 Reference:
      [asm-arm/]param.h
      [asm-arm/]time.h      
================================================================

<modify top Makefile> file
ARCH        ?= arm
CROSS_COMPILE   ?= /home/arm-toolchain/gcc-3.4.4-glibc-2.3.6/bin/arm-linux-

===========================
make menuconfig
===========================
make