C spi驱动程序中的基本设备操作

C spi驱动程序中的基本设备操作,c,linux,linux-kernel,linux-device-driver,spi,C,Linux,Linux Kernel,Linux Device Driver,Spi,我需要从头开始为omap4编写spi驱动程序。 我指的是http://lxr.free-electrons.com/source/drivers/spi/spi-omap2-mcspi.c 驱动程序代码。 但是,我无法理解在这个驱动程序代码中如何处理基本的设备操作。 例如,char驱动程序具有以下结构 struct file_operations scull_fops = { .owner = THIS_MODULE, .llseek = scull_llseek, .read = scull_

我需要从头开始为omap4编写spi驱动程序。 我指的是http://lxr.free-electrons.com/source/drivers/spi/spi-omap2-mcspi.c 驱动程序代码。 但是,我无法理解在这个驱动程序代码中如何处理基本的设备操作。 例如,char驱动程序具有以下结构

struct file_operations scull_fops = {
.owner = THIS_MODULE,
.llseek = scull_llseek,
.read = scull_read,
.write = scull_write,
.ioctl = scull_ioctl,
.open = scull_open,
.release = scull_release,
};
包含指向打开、读取、写入等基本函数的指针

我在中找不到这些函数 http://lxr.free-electrons.com/source/drivers/spi/spi-omap2-mcspi.c


有人请帮助我确定spi-omap2-mcspi.c代码中如何提供设备打开、读取和写入功能。

如果您查看文章中链接的文件底部,您将看到基本平台驱动程序操作的处理

static const struct dev_pm_ops omap2_mcspi_pm_ops = {
        .resume = omap2_mcspi_resume,
        .runtime_resume = omap_mcspi_runtime_resume,
};

static struct platform_driver omap2_mcspi_driver = {
       .driver = {
                .name =         "omap2_mcspi",
                .owner =        THIS_MODULE,
                .pm =           &omap2_mcspi_pm_ops,
                .of_match_table = omap_mcspi_of_match,
       },
       .probe =        omap2_mcspi_probe,
       .remove =       omap2_mcspi_remove,
};
probe
操作中,您可以看到此驱动程序的spi特定操作的设置:

     /* the spi->mode bits understood by this driver: */
     master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH;
     master->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 32);
     master->setup = omap2_mcspi_setup;
     master->auto_runtime_pm = true;
     master->transfer_one_message = omap2_mcspi_transfer_one_message;
     master->cleanup = omap2_mcspi_cleanup;
     master->dev.of_node = node;

您是否尝试使用交叉引用工具?有两种类型的SPI驱动程序:主驱动程序和从(或目标)协议驱动程序<代码>驱动程序/spi是主驱动程序的目录,即spi主控制器的目录。您是在为主设备还是从设备编写驱动程序?@sawdust masterdriver@lgnacio我想你读过文档了吗?谢谢你的回答。但是开放、读和写功能在哪里?我现在明白了;)。我认为在/include/linux/spi/spi.h头中有一个提示。控制器驱动程序需要执行实际文件操作的协议驱动程序。fle操作随后映射到contrller驱动程序中提到的操作。这取决于要在SPI控制器上使用的协议。控制器只处理发送和接收字节。更接近:-)spi-omap2-mcspi.c中的哪些操作处理发送和接收字节?@SJMP-“协议驱动程序在哪里?”--协议驱动程序是为每个spi从设备定制的。但你声称你想写一个主驱动程序。也许您需要再次学习SPI文档。