gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 04:04:58 26 4
gpt4 key购买 nike

是否有相同设备使用不同总线的示例,例如 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 确实有两个接口(interface) i2c/spi,通过 gpio 输入控制。

驱动程序包含在内核官方树中,位于 drivers/iio/magnetometer。

有 2 个独立的驱动模块位于 st_magn_i2c.c 和 st_magn_spi.c

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 和其他东西)或一些基本的线索。

关于Linux内核驱动不同总线上的同一设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21595281/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com