首先下载nand flash驱动 s3c_nand.c ,此文件包含着nand flash驱动具体的实现,将其复制到drivers/mtd/nand下;

s3c_nand.c 下载地址 s3c_nand.c

在s3c_nand.c中添加nand flash分区信息,分区内容可以自由设定。

#if defined(CONFIG_ARCH_S5PV210)

struct mtd_partition s3c_partition_info[] = {

{

.name= "misc",

.offset= (768*SZ_1K),          /* for bootloader */

.size= (256*SZ_1K),

.mask_flags= MTD_CAP_NANDFLASH,

},

{

.name= "recovery",

.offset= MTDPART_OFS_APPEND,

.size= (5*SZ_1M),

},

{

.name= "kernel",

.offset= MTDPART_OFS_APPEND,

.size= (5*SZ_1M),

},

{

.name= "ramdisk",

.offset= MTDPART_OFS_APPEND,

.size= (3*SZ_1M),

},

{

.name= "system",

.offset= MTDPART_OFS_APPEND,

.size= MTDPART_SIZ_FULL,

}

{

.name= "system",

.offset= MTDPART_OFS_APPEND,

.size= (110*SZ_1M),

},

{

.name= "cache",

.offset= MTDPART_OFS_APPEND,

.size= (80*SZ_1M),

},

{

.name= "userdata",

.offset= MTDPART_OFS_APPEND,

.size= MTDPART_SIZ_FULL,

}

#endif

};

struct s3c_nand_mtd_info s3c_nand_mtd_part_info = {

.chip_nr = 1,

.mtd_part_nr = ARRAY_SIZE(s3c_partition_info),

.partition = s3c_partition_info,

};

结构体s3c_nand_mtd_info在源代码是没有的,所以要将其添加进去;

修改 arch/arm/plat-samsung/include/plat/nand.h 添加如下内容:
struct s3c_nand_mtd_info {
uint chip_nr;
uint mtd_part_nr;
struct matd_partition *partition;
};

为了能使s3c_nand.c正确编译,还要修改该目录下,也就是的drivers/mtd/nand的Makefile和Kconfig:

修改driver/mtd/nand/Kconfig添加如下内容:
config MTD_NAND_S3C
  tristate "NAND Flash support for S3C Soc"
  depends on ARCH_S5PV210 && MTD_NAND
  help
  This enables the NAND flash controller on the S3C.
  No board specfic 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  www.2cto.com  
  Enable the use of the S3C's internal ECC generator when 
  using NAND. Early versons of the chip have had problems with
  incorrect ECC generation, and if using these, the default of
  software ECC is preferable
  If you lay down a device with the hardware ECC, the you will
  currently not be able to switch to software, as there is no
  implementation for ECC method used by the S3C
修改drivers/mtd/nand/Makefile添加如下内容:
obj-$(CONFIG_MTD_NAND_S3C)        += s3c_nand.o

在Mach-smdkv210.c (arch\arm\mach-s5pv210) 中添加nand flash source,platform_device,需要头文件map.h map.h下载,下载将其放在(arch\arm\mach-s5pv210\include\mach),在Mach-smdkv210.c中加入#include <asm/mach/map.h>。替换掉map.h文件

添加nand flash source

/* NAND Controller */

static struct resource s3c_nand_resource[] = {

[0] = {

.start= S5PV210_PA_NAND,

.end= S5PV210_PA_NAND + S5PV210_SZ_NAND - 1,

.flags= IORESOURCE_MEM,

}

};

struct platform_device s3c_device_nand = {

.name= "s5pv210-nand",

.id= -1,

.num_resources= ARRAY_SIZE(s3c_nand_resource),

.resource= s3c_nand_resource,

};

添加platform_device

找到static struct platform_device *smdkv210_devices[] __initdata

添加

#if defined(CONFIG_MTD_NAND_S3C)
&s3c_device_nand,
#endif

添加时钟信息

在Clock.c (arch\arm\mach-s5pv210) 中找到static struct clk init_clocks_off[],添加

{
  .name  = "nand",
  .id  = -1,
  .parent  = &clk_hclk_psys.clk,
  .enable  = s5pv210_clk_ip1_ctrl,
  .ctrlbit = ((1 << 28) | (1 << 24)),
 },

添加之后,nand flash驱动才能正确获取时钟。

以上操作完成后,开始配置内核

根目录下make menuconfig

Device Drivers --->
<*> Memory Technology Device (MTD) support --->
<*> Caching block device access to MTD devices
<*> NAND Device Support --->
<*> NAND Flash support for S3C SoCs
[*] S3C NAND Hardware ECC

到了这里,开发板已经支持nand flash驱动。

接下来

配置后保存,make clean ,make zImage

将zImage下载进开发板。从串口信息可以看出nand flash驱动是否完成:

S3C NAND Driver, (c) 2008 Samsung Electronics
S3C NAND Driver is using hardware ECC.
NAND device: Manufacturer ID: 0xec, Chip ID: 0xda (Samsung NAND 256MiB 3,3V 8-bit)
Creating 5 MTD partitions on "s5pv210-nand":
0x0000000c0000-0x000000100000 : "misc"
0x000000100000-0x000000600000 : "recovery"
0x000000600000-0x000000b00000 : "kernel"
0x000000b00000-0x000000e00000 : "ramdisk"
0x000000e00000-0x000010000000 : "system"

nand驱动移植的更多相关文章

  1. AM335x(TQ335x)学习笔记——Nand&&网卡驱动移植

    移植完成声卡驱动之后本想再接再励,移植网卡驱动,但没想到的是TI维护的内核太健壮,移植网卡驱动跟之前移植按键驱动一样简单,Nand驱动也是如此,于是,本人将Nand和网卡放在同一篇文章中介绍.介绍之前 ...

  2. AM335x(TQ335x)学习笔记——Nand&amp;&amp;网卡驱动移植

    移植完毕声卡驱动之后本想再接再励,移植网卡驱动,但没想到的是TI维护的内核太健壮,移植网卡驱动跟之前移植按键驱动一样简单,Nand驱动也是如此,于是,本人将Nand和网卡放在同一篇文章中介绍.介绍之前 ...

  3. linux2.6.30.4内核移植(2)——Nand Flash驱动移植

    内核源码:linux2.6.30.4 交叉编译工具:3.4.5 移植linux内核至:TQ2440 工作基础:http://www.cnblogs.com/nufangrensheng/p/36696 ...

  4. 基于MTD的NAND驱动开发、K9F1G08 2K page、Yaffs2 Files System

    转载:http://hi.baidu.com/cui1206/item/1d4119e376132513585dd886 基于MTD的NAND驱动(linux-2.6.22.10内核),目前已可以在该 ...

  5. AM335x(TQ335x)学习笔记——WM8960声卡驱动移植

    经过一段时间的调试,终于调好了TQ335x的声卡驱动.TQ335x采用的Codec是WM8960,本文来总结下WM8960驱动在AM335x平台上的移植方法.Linux声卡驱动架构有OSS和ALSA两 ...

  6. DM9000驱动移植在mini2440(linux2.6.29)和FS4412(linux3.14.78)上的实现(deep dive)篇一

    关于dm9000的驱动移植分为两篇,第一篇在mini2440上实现,基于linux2.6.29,也成功在在6410上移植了一遍,和2440非常类似,第二篇在fs4412(Cortex A9)上实现,基 ...

  7. kernel 4.4.12 EETI eGTouch 电容屏驱动移植

    kernel 4.4.12 EETI eGTouch 电容屏驱动移植: 在make menuconfig 里面添加如下选项: 添加通过事件上报接口节点: Device Drivers ---> ...

  8. AM335x kernel 4.4.12 i2c eeprom AT24c02驱动移植

    kernel 4.4.12 i2c eeprom AT24c02驱动移植 在kernel make menuconfig ARCH=ARM 中打开: Device Drivers ---> Mi ...

  9. wifi 驱动移植范例

    .改Makefile:  里面没有dm6441平台的,我看到有dm6446的,所以就在这里改了 ifeq ($(PLATFORM),DM6446) LINUX_SRC = /root/work/lin ...

随机推荐

  1. Docker 制作mysql镜像

    # 拉取Ubuntu镜像 docker pull docker.io/ubuntu: # 运行一个容器 docker run --name mysql -p 33:3306 -v /mysql:/va ...

  2. 创建UIView对象

    创建一个UIView对象分四步: 1.创建一个view对象,并设置其大小 UIView *view = [[UIView alloc] initWithFrame:CGRectMake:(CGFloa ...

  3. ajax的项目实操(只用于记录部分文件未引入)

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  4. 38.利用接口做参数,写个计算器,能完成+-*/运算 (1)定义一个接口Compute含有一个方法int computer(int n,int m); (2)设计四个类分别实现此接口,完成+-*/运算 (3)设计一个类UseCompute,含有方法: public void useCom(Compute com, int one, int two) 此方法要求能够:1.用传递过来的对象调用comp

    //接口Compute package jieKou; public interface Compute { int Computer(int n,int m); } //加 package jieK ...

  5. localStorage请使用getItem 和setITem

    最近看别人的代码,发现他们在从localStorage里面的时候喜欢用dot来操作,而不是get setItem,记得以前说过这个事.下面再说一次吧. 用dot方式来操作(   每次以'hello'= ...

  6. 使用日志记录功能查看PHP扩展的执行过程

    了解过PHP内核的同学都知道,PHP的一次请求的生命周期 1.启动Apache后,PHP解释程序也随之启动.PHP调用各个扩展的MINIT方法,从而使这些扩展切换到可用状态 2.当一个页面请求发生时, ...

  7. IE8“开发人员工具”使用详解上(各级菜单详解)

    来源: http://www.cnblogs.com/JustinYoung/archive/2009/03/24/kaifarenyuangongju.html IE8“开发人员工具”使用详解上(各 ...

  8. apache与php安装

    安装库文件 yum install -y pcre pcre-devel apr apr-deve 安装apache cd /usr/local/src/httpd-2.4.23 Bundled AP ...

  9. (转)用JMX监测JVM的运行参数

    翻译自http://java.sun.com/javase/6/docs/technotes/guides/management/agent.html  用JMX管理你的JVMJMX是Java管理扩展 ...

  10. ios隐藏键盘的方式简单应用

    iOS开发中经常要用到输入框,默认情况下点击输入框就会弹出键盘,但是必须要实现输入框return的委托方法才能取消键盘的显示,对于用户体验来说很不友好,我们可以实现点击键盘以外的空白区域来将键盘隐藏, ...