此probe函数获取物理IO空间,通过request_mem_region和ioremap等操作物理地址转换成内核中的虚拟地址,初始化 I2C控制器,通过platform_get_irq或platform_get_resource得到设备的中断号以后,就可以调用 request_irq函数来向系统注册中断,并将此I2C控制器添加到系统中。
8.6 操作设备
进行了platform_device_register 和platform_driver_register后,驱动的相应信息就出现在sys目录的相应文件夹下,然后,我们该如何调用设备呢??怎么对设备进行打开读写等操作呢???
Platform总线只是为了方便管理挂接在CPU总线上的设备,与用户空间的交互,如读写还是需要利用file_operations。当然如果此platform设备无需和用户空间交互,则无需file_operations实例。
对于I2C总线来说,其file_operations如下:
478static const struct file_operations i2cdev_fops = {
479 .owner = THIS_MODULE,
480 .llseek = no_llseek,
481 .read = i2cdev_read,
482 .write = i2cdev_write,
483 .ioctl = i2cdev_ioctl,
484 .open = i2cdev_open,
485 .release = i2cdev_release,
486};
其和platform bus的区别在于,platform bus提供机制访问I2C 控制器本身的资源,而I2C总线提供访问I2C 控制器上挂接的I2C设备的机制。