主题 : nand无法驱动 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 15894
精华: 0
发帖: 44
金钱: 220 两
威望: 44 点
贡献值: 0 点
综合积分: 88 分
注册时间: 2010-03-11
最后登录: 2017-09-13
楼主  发表于: 2011-03-24 23:14

 nand无法驱动

编译内核很久了,一直无法挂载文件系统,后来发现原来是没有nand驱动,我参考了友善的config配置,nand相关的驱动和头文件也用友善光盘上的替换了,mini6410_machine_init()文件里的几个nand设置也修改了 ,但log里一直都没有
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 3 MTD partitions on "NAND 256MiB 3,3V 8-bit":
0x000000000000-0x000000080000 : "Bootloader"
0x000000080000-0x000000580000 : "Kernel"
0x000000580000-0x000010000000 : "File System"
说明我的nand没驱动起来,我用的是2.6.35.7的内核,和内核版本有关系吗?
有谁能发一个nand驱动移植的文章吗?
[ 此帖被rrrnnnaaa在2011-03-25 10:50重新编辑 ]
级别: 圣骑士
UID: 9690
精华: 0
发帖: 369
金钱: 1955 两
威望: 415 点
贡献值: 0 点
综合积分: 738 分
注册时间: 2009-10-10
最后登录: 2017-11-21
1楼  发表于: 2011-03-25 09:01
首先你确保你的内核里面有自己板子nandflash驱动,就是samsung的那个s3c_nand.c。
级别: 新手上路
UID: 15894
精华: 0
发帖: 44
金钱: 220 两
威望: 44 点
贡献值: 0 点
综合积分: 88 分
注册时间: 2010-03-11
最后登录: 2017-09-13
2楼  发表于: 2011-03-25 10:53

 回 1楼(xiexiedajia) 的帖子

s3c_nand.c 文件有的,编译通过,有Section mismatch
WARNING: arch/arm/plat-samsung/built-in.o(__ksymtab_gpl+0x0): Section mismatch in reference from the variable __ksymtab_s3c_nand_set_platdata to the function .init.text:s3c_nand_set_platdata()
The symbol s3c_nand_set_platdata is exported and annotated __init
Fix this by removing the __init annotation of s3c_nand_set_platdata or drop the export.

删掉DEV-nand.c最后一行的 EXPORT_SYMBOL_GPL(s3c_nand_set_platdata);后,没有这个警告了,但是还是用不了,今天试了2.6.36还是有这个问题
[ 此帖被rrrnnnaaa在2011-03-25 17:02重新编辑 ]
级别: 圣骑士
UID: 9690
精华: 0
发帖: 369
金钱: 1955 两
威望: 415 点
贡献值: 0 点
综合积分: 738 分
注册时间: 2009-10-10
最后登录: 2017-11-21
3楼  发表于: 2011-03-25 17:20
确保nand初始化函数被调用
级别: 圣骑士
UID: 9690
精华: 0
发帖: 369
金钱: 1955 两
威望: 415 点
贡献值: 0 点
综合积分: 738 分
注册时间: 2009-10-10
最后登录: 2017-11-21
4楼  发表于: 2011-03-25 17:29
不能简单的看这个c文件被编译与否,要看nand的初始化函数被调用了与否
级别: 圣骑士
UID: 9690
精华: 0
发帖: 369
金钱: 1955 两
威望: 415 点
贡献值: 0 点
综合积分: 738 分
注册时间: 2009-10-10
最后登录: 2017-11-21
5楼  发表于: 2011-03-25 17:32
就是s3c_nand_init这个函数,我用的是28,你用jtag设断点设到这个函数,看有没有被执行。
级别: 新手上路
UID: 15894
精华: 0
发帖: 44
金钱: 220 两
威望: 44 点
贡献值: 0 点
综合积分: 88 分
注册时间: 2010-03-11
最后登录: 2017-09-13
6楼  发表于: 2011-03-26 20:33

 回 5楼(xiexiedajia) 的帖子

module_init(s3c2410_nand_init);
module_exit(s3c2410_nand_exit);
s3c2410_nand_init()这个函数就是注册驱动的,同时在终端上打印  S3C NAND Driver, (c) 2008 Samsung Electronics
我没有出现上面这句话,说明驱动没有注册,即s3c2410_nand_init()这个函数没被调用。

可是我看了友善的代码,也是这样的,但是就能注册:
module_init(s3c_nand_init);
module_exit(s3c_nand_exit);

#define module_init(x)   __initcall(x);
#define __initcall(fn)  device_initcall(fn);
#define device_initcall(fn)           __define_initcall("6",fn)
级别: 圣骑士
UID: 9690
精华: 0
发帖: 369
金钱: 1955 两
威望: 415 点
贡献值: 0 点
综合积分: 738 分
注册时间: 2009-10-10
最后登录: 2017-11-21
7楼  发表于: 2011-03-27 11:44
把你的driver/mtd/nand下面的kconfig贴一下,然后看s3c_nand.c里面有没有什么#if之类的把模块注册代码注释了。
一般你menuconfig里面把nand的驱动选成s3c的,然后驱动注册模块没有被屏蔽就可以了。
这种问题baidu,google回答一大堆,