This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

请教一个在DM644x下获取Nand Flash的芯片ID的问题



本人对linux驱动编程还不熟,只看到了字符设备驱动的编写

现在我想读取我的DM6446板子上的Nand Flash的ID,  我在driver/mtd/nand/下找到一个文件:davinci.c。

我把这个文件复制出来,想在上面修改,出现了一些疑惑。 从这些代码开始吧, 代码不会贴很多

static int nand_flash_init(struct nand_davinci_info *info) {  __raw_writel((1 << info->ce), info->emifregs + NANDFCR);

 return 0; }

#define res_size(_r) (((_r)->end - (_r)->start) + 1)

static int __devinit nand_davinci_probe(struct device *dev)  //我的理解是这个函数在insmod的时候就会执行 { 。。。。。。。。。。。。。。。。。。。 }

static int __devexit nand_davinci_remove(struct device *dev) {  return 0; }

static struct device_driver nand_davinci_driver = {  .name = "nand_davinci",  .bus = &platform_bus_type,  .probe = nand_davinci_probe,  .remove = __devexit_p(nand_davinci_remove), };

static int __init nand_davinci_init(void) {  return driver_register(&nand_davinci_driver); }

static void __exit nand_davinci_exit(void) {  driver_unregister(&nand_davinci_driver); }

module_init(nand_davinci_init); module_exit(nand_davinci_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("TI"); MODULE_DESCRIPTION("Board-specific driver for NAND flash on davinci board");

首先,以我的理解是,在insmod my.ko的时候,nand_davinci_probe()就会执行, 我这里有个疑问,当它执行的时候,它的参数struct device *dev是如何传进去的? 还有就是我在这个文件中没有发现open函数, 那它到时候怎么打开这个设备?

带着疑问,我把这个ko编译出来了,结果在insmod的时候,发现nand_davinci_probe没有执行到,我通过printk的方式,发现nand_davinci_init执行到了,而nand_davinci_probe没有执行。请问nand_davinci_probe是什么时候执行的?

还有就是,nand flash操作的函数基本上都带一个参数struct mtd_info *mtd,我发现这个参数在nand_davinci_probe中初始化了,但是没有保存,那么以后调用其它函数的时候,用到mtd参数的时候,这个参数从哪来的?

谢谢