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