本人对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参数的时候,这个参数从哪来的?
谢谢