博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nand驱动移植
阅读量:4954 次
发布时间:2019-06-12

本文共 4014 字,大约阅读时间需要 13 分钟。

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

 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 ,下载将其放在(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"

转载于:https://www.cnblogs.com/hei-da-mi/p/4784659.html

你可能感兴趣的文章
PHP扩展之STOMP--安装
查看>>
ZooKeeper 部署
查看>>
选择排序可视化
查看>>
file 上传文件后缀名 限制
查看>>
Firefox默认可以调用JSON.stringify而IE却不行
查看>>
内存系列一:快速读懂内存条标签
查看>>
PHP的重载-使用魔术方法实现
查看>>
java内部类的四大作用
查看>>
RESTful支持
查看>>
c++&c之参数传递
查看>>
使用宏的一点心得
查看>>
bzoj1799: [Ahoi2009]self 同类分布
查看>>
20145205 《信息安全系统设计基础》第5周学习总结
查看>>
c++程序书写原则
查看>>
Unity For Android Cardboard App ( 1 ):基础入门
查看>>
用R语言进行文本挖掘和主题建模
查看>>
ajax全能分页
查看>>
asp.net上传图片自动生成缩略图功能代码
查看>>
图解MBR分区无损转换GPT分区+UEFI引导安装WIN8.1 分类: ...
查看>>
css常见问题解决方法
查看>>