[英]How are device driver development and linux kernel programming related/different?
[英]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.