繁体   English   中英

Linux内核驱动程序在不同总线上的同一设备?

[英]Linux kernel driver same device on different buses?

是否有使用不同总线(例如spi和i2c,同时取决于选择)的同一设备的示例?

我对具有某些常规例程但使用不同读/写功能的设备感兴趣。

例如,具有用于校准或触发的通用功能的adc(在内核adc驱动程序中从未见过,但是为什么不呢?)但是具有不同的功能以从不同的源读取样本。

这样的驱动程序如何实现? 我应该在我的模块中做类似的事情吗?

static struct i2c_driver my_i2c_driver = {
         .driver = {
                 .name = "my-i2c-driver",
         },
         .probe = my_i2c_driver_probe,
         .remove = my_i2c_driver_remove,
};

static struct spi_driver my_spi_driver = {
         .driver = {
                 .name   = "my-spi-driver",
         },
         .probe = my_spi_driver_probe,
         .remove = my_spi_driver_remove,         
};

etc... for read/write, ops

我对理论感兴趣,即使“不需要”,“也没有人这样做”。

实际上在3.10.25内核中有这样的例子,

ST磁力计LIS3MDL的确具有两个通过gpio输入控制的接口i2c / spi。

驱动程序包含在内核官方树中,位于驱动程序/ iio /磁力仪中。

在st_magn_i2c.c和st_magn_spi.c中有2个独立的驱动程序模块

st_magn_i2c.c:

static struct spi_driver st_magn_driver = {
        .driver = {
                .owner = THIS_MODULE,
                .name = "st-magn-spi",
        },
        .probe = st_magn_spi_probe,
        .remove = st_magn_spi_remove,
        .id_table = st_magn_id_table,
};

st_magn_spi.c:

static struct i2c_driver st_magn_driver = {
        .driver = {
                .owner = THIS_MODULE,
                .name = "st-magn-i2c",
        },
        .probe = st_magn_i2c_probe,
        .remove = st_magn_i2c_remove,
        .id_table = st_magn_id_table,
};

此类设备有时会发生-例如PCA2129T RTC。

因此,假设这是我一直在寻找的示例,尽管我想要更棘手的东西(例如USB和其他东西)或一些基本的线索。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM