1.从开发板厂家提供的源码中找到s3c_nand.c,放到drivers/mtd/nand目录下,修改其Makefile,加入:obj-$(CONFIG_MTD_NAND_S3C) += s3c_nand.o
把nand.h放到arch/arm/plat-samsung/include/plat/目录下
修改Kconfig,加入
-
config MTD_NAND_S3C
-
tristate "NAND Flash support for S3C SoC"
-
depends on (ARCH_S3C64XX || ARCH_S5P64XX || ARCH_S5PC1XX) && MTD_NAND
-
help
-
This enables the NAND flash controller on the S3C.
-
No board specific support is done by this driver, each board
-
must advertise a platform_device for the driver to attach.
-
-
config MTD_NAND_S3C_DEBUG
-
bool "S3C NAND driver debug"
-
depends on MTD_NAND_S3C
-
help
-
Enable debugging of the S3C NAND driver
-
-
config MTD_NAND_S3C_HWECC
-
bool "S3C NAND Hardware ECC"
-
depends on MTD_NAND_S3C
-
help
-
Enable the use of the S3C
2.arch/arm/plat-samsung/include/plat/regs_nand.h的最后的#endif之前加入寄存器定义:
-
#if 1
-
//zzq-> by 2013-3-16
-
/* for s3c_nand.c */
-
#define S3C_NFCONF S3C2410_NFREG(0x00)
-
#define S3C_NFCONT S3C2410_NFREG(0x04)
-
#define S3C_NFCMMD S3C2410_NFREG(0x08)
-
#define S3C_NFADDR S3C2410_NFREG(0x0c)
-
#define S3C_NFDATA8 S3C2410_NFREG(0x10)
-
#define S3C_NFDATA S3C2410_NFREG(0x10)
-
#define S3C_NFMECCDATA0 S3C2410_NFREG(0x14)
-
#define S3C_NFMECCDATA1 S3C2410_NFREG(0x18)
-
#define S3C_NFSECCDATA S3C2410_NFREG(0x1c)
-
#define S3C_NFSBLK S3C2410_NFREG(0x20)
-
#define S3C_NFEBLK S3C2410_NFREG(0x24)
-
#define S3C_NFSTAT S3C2410_NFREG(0x28)
-
#define S3C_NFMECCERR0 S3C2410_NFREG(0x2c)
-
#define S3C_NFMECCERR1 S3C2410_NFREG(0x30)
-
#define S3C_NFMECC0 S3C2410_NFREG(0x34)
-
#define S3C_NFMECC1 S3C2410_NFREG(0x38)
-
#define S3C_NFSECC S3C2410_NFREG(0x3c)
-
#define S3C_NFMLCBITPT S3C2410_NFREG(0x40)
-
#define S3C_NF8ECCERR0 S3C2410_NFREG(0x44)
-
#define S3C_NF8ECCERR1 S3C2410_NFREG(0x48)
-
#define S3C_NF8ECCERR2 S3C2410_NFREG(0x4c)
-
#define S3C_NFM8ECC0 S3C2410_NFREG(0x50)
-
#define S3C_NFM8ECC1 S3C2410_NFREG(0x54)
-
#define S3C_NFM8ECC2 S3C2410_NFREG(0x58)
-
#define S3C_NFM8ECC3 S3C2410_NFREG(0x5c)
-
#define S3C_NFMLC8BITPT0 S3C2410_NFREG(0x60)
-
#define S3C_NFMLC8BITPT1 S3C2410_NFREG(0x64)
-
-
#define S3C_NFCONF_NANDBOOT (1<<31)
-
#define S3C_NFCONF_ECCCLKCON (1<<30)
-
#define S3C_NFCONF_ECC_MLC (1<<24)
-
#define S3C_NFCONF_ECC_1BIT (0<<23)
-
#define S3C_NFCONF_ECC_4BIT (2<<23)
-
#define S3C_NFCONF_ECC_8BIT (1<<23)
-
#define S3C_NFCONF_TACLS(x) ((x)<<12)
-
#define S3C_NFCONF_TWRPH0(x) ((x)<<8)
-
#define S3C_NFCONF_TWRPH1(x) ((x)<<4)
-
#define S3C_NFCONF_ADVFLASH (1<<3)
-
#define S3C_NFCONF_PAGESIZE (1<<2)
-
#define S3C_NFCONF_ADDRCYCLE (1<<1)
-
#define S3C_NFCONF_BUSWIDTH (1<<0)
-
-
#define S3C_NFCONT_ECC_ENC (1<<18)
-
#define S3C_NFCONT_LOCKTGHT (1<<17)
-
#define S3C_NFCONT_LOCKSOFT (1<<16)
-
#define S3C_NFCONT_8BITSTOP (1<<11)
-
#define S3C_NFCONT_MECCLOCK (1<<7)
-
#define S3C_NFCONT_SECCLOCK (1<<6)
-
#define S3C_NFCONT_INITMECC (1<<5)
-
#define S3C_NFCONT_INITSECC (1<<4)
-
#define S3C_NFCONT_nFCE1 (1<<2)
-
#define S3C_NFCONT_nFCE0 (1<<1)
-
#define S3C_NFCONT_INITECC (S3C_NFCONT_INITSECC | S3C_NFCONT_INITMECC)
-
-
#define S3C_NFSTAT_ECCENCDONE (1<<7)
-
#define S3C_NFSTAT_ECCDECDONE (1<<6)
-
#define S3C_NFSTAT_BUSY (1<<0)
-
-
#define S3C_NFECCERR0_ECCBUSY (1<<31)
-
-
//<-zzq
-
#endif
3. 修改drivers/mtd/nand/nand_base.c文件,
找到
-
if (!chip->ecc.strength) {
-
pr_warn("Driver must set ecc.strength when using hardware ECC\n");
-
BUG();
-
}
把BUG();屏蔽掉
4.重新编译烧写后,结果如下
-
## Booting kernel from Legacy Image at 50008000 ...
-
-
Image Name: Linux-3.8.3
-
-
Image Type: ARM Linux Kernel Image (uncompressed)
-
-
Data Size: 1665512 Bytes = 1.6 MiB
-
-
Load Address: 50008000
-
-
Entry Point: 50008040
-
-
Verifying Checksum ... OK
-
-
XIP Kernel Image ... OK
-
-
OK
-
-
-
Starting kernel ...
-
-
-
Uncompressing Linux... done, booting the kernel.
-
Booting Linux on physical CPU 0x0
-
Linux version 3.8.3 (ymseven@ymseven) (gcc version 4.4.1 (Sourcery G++ Lite 2009q3-67) ) #3 Sun Apr 6 20:40:22 CST 2014
-
CPU: ARMv6-compatible processor [410fb766] revision 6 (ARMv7), cr=00c5387d
-
CPU: PIPT / VIPT nonaliasing data cache, VIPT nonaliasing instruction cache
-
Machine: OK6410
-
Memory policy: ECC disabled, Data cache writeback
-
CPU S3C6410 (id 0x36410101)
-
S3C24XX Clocks, Copyright 2004 Simtec Electronics
-
S3C64XX: PLL settings, A=533000000, M=533000000, E=24000000
-
S3C64XX: HCLK2=266500000, HCLK=133250000, PCLK=66625000
-
mout_apll: source is fout_apll (1), rate is 533000000
-
mout_epll: source is epll (1), rate is 24000000
-
mout_mpll: source is mpll (1), rate is 533000000
-
usb-bus-host: source is clk_48m (0), rate is 48000000
-
irda-bus: source is mout_epll (0), rate is 24000000
-
CPU: found DTCM0 8k @ 00000000, not enabled
-
CPU: moved DTCM0 8k to fffe8000, enabled
-
CPU: found DTCM1 8k @ 00000000, not enabled
-
CPU: moved DTCM1 8k to fffea000, enabled
-
CPU: found ITCM0 8k @ 00000000, not enabled
-
CPU: moved ITCM0 8k to fffe0000, enabled
-
CPU: found ITCM1 8k @ 00000000, not enabled
-
CPU: moved ITCM1 8k to fffe2000, enabled
-
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 65024
-
Kernel command line: console=ttySAC,115200
-
PID hash table entries: 1024 (order: 0, 4096 bytes)
-
Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
-
Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
-
__ex_table already sorted, skipping sort
-
Memory: 256MB = 256MB total
-
Memory: 256524k/256524k available, 5620k reserved, 0K highmem
-
Virtual kernel memory layout:
-
vector : 0xffff0000 - 0xffff1000 ( 4 kB)
-
DTCM : 0xfffe8000 - 0xfffec000 ( 16 kB)
-
ITCM : 0xfffe0000 - 0xfffe4000 ( 16 kB)
-
fixmap : 0xfff00000 - 0xfffe0000 ( 896 kB)
-
vmalloc : 0xd0800000 - 0xff000000 ( 744 MB)
-
lowmem : 0xc0000000 - 0xd0000000 ( 256 MB)
-
modules : 0xbf000000 - 0xc0000000 ( 16 MB)
-
.text : 0xc0008000 - 0xc02bfdf4 (2784 kB)
-
.init : 0xc02c0000 - 0xc02db7e4 ( 110 kB)
-
.data : 0xc02dc000 - 0xc0309880 ( 183 kB)
-
.bss : 0xc030a000 - 0xc033af58 ( 196 kB)
-
SLUB: Genslabs=13, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
-
NR_IRQS:246
-
VIC @f6000000: id 0x00041192, vendor 0x41
-
VIC @f6010000: id 0x00041192, vendor 0x41
-
sched_clock: 32 bits at 100 Hz, resolution 10000000ns, wraps every 4294967286ms
-
Console: colour dummy device 80x30
-
Calibrating delay loop... 353.89 BogoMIPS (lpj=1769472)
-
pid_max: default: 32768 minimum: 301
-
Mount-cache hash table entries: 512
-
CPU: Testing write buffer coherency: ok
-
Setting up static identity map for 0x50215860 - 0x502158bc
-
DMA: preallocated 256 KiB pool for atomic coherent allocations
-
OK6410: Option string ok6410=0
-
OK6410: selected LCD display is 480x272
-
s3c64xx_dma_init: Registering DMA channels
-
PL080: IRQ 73, at d0846000, channels 0..8
-
PL080: IRQ 74, at d0848000, channels 8..16
-
S3C6410: Initialising architecture
-
bio: create slab <bio-0> at 0
-
usbcore: registered new interface driver usbfs
-
usbcore: registered new interface driver hub
-
usbcore: registered new device driver usb
-
ROMFS MTD (C) 2007 Red Hat, Inc.
-
io scheduler noop registered
-
io scheduler deadline registered
-
io scheduler cfq registered (default)
-
s3c-fb s3c-fb: window 0: fb
-
Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
-
s3c6400-uart.0: ttySAC0 at MMIO 0x7f005000 (irq = 69) is a S3C6400/10
-
console [ttySAC0] enabled
-
s3c6400-uart.1: ttySAC1 at MMIO 0x7f005400 (irq = 70) is a S3C6400/10
-
s3c6400-uart.2: ttySAC2 at MMIO 0x7f005800 (irq = 71) is a S3C6400/10
-
s3c6400-uart.3: ttySAC3 at MMIO 0x7f005c00 (irq = 72) is a S3C6400/10
-
brd: module loaded
-
loop: module loaded
-
S3C NAND Driver, (c) 2008 Samsung Electronics
-
S3C NAND Driver is using hardware ECC.
-
NAND device: Manufacturer ID: 0x2c, Chip ID: 0x38 (Micron NAND 1GiB 1,8V 8-bit), 1024MiB, page size: 4096, OOB size: 128
-
Driver must set ecc.strength when using hardware ECC
-
Creating 4 MTD partitions on "NAND 1GiB 1,8V 8-bit":
-
0x000000000000-0x000000100000 : "Bootloader"
-
0x000000100000-0x000000600000 : "Kernel"
-
0x000000600000-0x00000ce00000 : "File System"
-
0x00000ce00000-0x000040000000 : "User"
-
ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
-
s3c2410-ohci s3c2410-ohci: S3C24XX OHCI
-
s3c2410-ohci s3c2410-ohci: new USB bus registered, assigned bus number 1
-
s3c2410-ohci s3c2410-ohci: irq 79, io mem 0x74300000
-
s3c2410-ohci s3c2410-ohci: init err (00000000 0000)
-
s3c2410-ohci s3c2410-ohci: cancan't start s3c24xx
s3c2410-ohci s3c2410-ohci: startup error -75
s3c2410-ohci s3c2410-ohci: USB bus 1 deregistered
s3c2410-ohci: probe of s3c2410-ohci failed with error -75
mousedev: PS/2 mouse device common for all mice
i2c /dev entries driver
sdhci: Secure Digital Host Controller Interface driver
sdhci: Copyright(c) Pierre Ossman
s3c-sdhci s3c-sdhci.0: clock source 0: mmc_busclk.0 (133250000 Hz)
s3c-sdhci s3c-sdhci.0: clock source 2: mmc_busclk.2 (24000000 Hz)
mmc0: SDHCI controller on samsung-hsmmc [s3c-sdhci.0] using ADMA
s3c-sdhci s3c-sdhci.1: clock source 0: mmc_busclk.0 (133250000 Hz)
s3c-sdhci s3c-sdhci.1: clock source 2: mmc_busclk.2 (24000000 Hz)
mmc0: mmc_rescan_try_freq: trying to init card at 400000 Hz
mmc0: mmc_rescan_try_freq: trying to init card at 300000 Hz
mmc1: SDHCI controller on samsung-hsmmc [s3c-sdhci.1] using ADMA
mmc0: mmc_rescan_try_freq: trying to init card at 200000 Hz
usbcore: registered new interface driver usbhid
usbhid: USB HID core driver
VFP support v0.3: implementor 41 architecture 1 part 20 variant b rev 5
drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
VFS: Cannot open root device "(null)" or unknown-block(0,0): error -6
Please append a correct "root=" boot option; here are the available partitions:
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
[] (unwind_backtrace+0x0/0xf4) from [] (panic+0x8c/0x1dc)
[] (panic+0x8c/0x1dc) from [] (mount_block_root+0x218/0x2e0)
[] (mount_block_root+0x218/0x2e0) from [] (prepare_namespace+0x160/0x1b8)
[] (prepare_namespace+0x160/0x1b8) from [] (kernel_init+0x8/0xe4)
[] (kernel_init+0x8/0xe4) from [] (ret_from_fork+0x14/0x3c)
阅读(2301) | 评论(0) | 转发(0) |