【问题标题】:Basic device operations in spi driverspi驱动中的基本设备操作
【发布时间】:2014-03-28 16:22:38
【问题描述】:

我需要从头开始为 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 代码中如何提供设备打开、读取和写入。

【问题讨论】:

  • 您是否尝试过使用交叉引用工具?
  • SPI 驱动有两种类型:主驱动和从(或目标)协议驱动。 drivers/spi 是主驱动程序的目录,即 SPI 主控制器。您是在为主设备还是从设备编写驱动程序?
  • @sawdust 主驱动
  • @lgnacio 我用lxr.free-electrons.com
  • 您阅读过Linux/Documentation/spi/spi-summary 文档吗?

标签: c linux linux-kernel linux-device-driver spi


【解决方案1】:

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

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;

【讨论】:

  • 谢谢你的回答。但是open、read和write函数在哪里呢?
  • 我明白了;)。我认为 /include/linux/spi/spi.h 标头中有一个提示。控制器驱动程序需要一个协议驱动程序来进行真正的文件操作。然后将文件操作映射到控制器驱动程序中提到的操作。
  • 这取决于您想在 SPI 控制器上使用哪种协议。控制器只处理发送和接收字节。
  • 越来越近 :-) spi-omap2-mcspi.c 中的哪些操作处理发送和接收字节?
  • @SJMP - "那个协议驱动程序在哪里?" -- 协议驱动程序是为每个 SPI 从设备量身定制的。但是你声称你想写一个主驱动程序。也许你需要重新研究一下 SPI 文档。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-19
  • 1970-01-01
  • 1970-01-01
  • 2020-03-31
  • 2023-03-16
  • 1970-01-01
  • 2021-04-09
相关资源
最近更新 更多