i2c-dev.c
i2c_dev_init()
{
注册字符设备 i2cdev_fops
创造i2c_dev_class 用来创造设备 device_create
创建总线事件提醒 i2cdev_notifier -> i2cdev_notifier_call -> i2cdev_attach_adapter
链接已经存在的适配器
}
i2cdev_open()
{
获取子设备号
从子设备号获取 i2c_dev
从i2c_dev获取adapter
创建client
把client塞到 file->private_data 中去 以后 read write ioctl 都从这里面取client
}
i2cdev_read()
{
从file->private_data取出client
创建数据缓存
调用i2c_master_recv读数据
把缓存copy到用户空间内存
}
i2cdev_write()
{
从file->private_data取出client
创建数据缓存
把用户空间内存copy到缓存
调用i2c_master_send发送数据
}
i2cdev_attach_adapter()
{
获取adapter
获取i2c_dev
get_free_i2c_dev()
{
把adapter加一层i2c_dev的壳
把i2c_dev挂到i2c_dev_list链表上
}
创建设备和设备文件
}
{
注册字符设备 spidev_fops
创建spidev_class
注册一个spidev_spi_driver spidev_probe
}
spidev_open()
{
遍历device_list找设备号
把spidev_data塞到filp->private_data
}
spidev_probe()
{
创建一个spidev_data
初始化锁和链表
找一个子设备号
创建设备
塞到device_list链表
}
i2c_dev_init()
{
注册字符设备 i2cdev_fops
创造i2c_dev_class 用来创造设备 device_create
创建总线事件提醒 i2cdev_notifier -> i2cdev_notifier_call -> i2cdev_attach_adapter
链接已经存在的适配器
}
i2cdev_open()
{
获取子设备号
从子设备号获取 i2c_dev
从i2c_dev获取adapter
创建client
把client塞到 file->private_data 中去 以后 read write ioctl 都从这里面取client
}
i2cdev_read()
{
从file->private_data取出client
创建数据缓存
调用i2c_master_recv读数据
把缓存copy到用户空间内存
}
i2cdev_write()
{
从file->private_data取出client
创建数据缓存
把用户空间内存copy到缓存
调用i2c_master_send发送数据
}
i2cdev_attach_adapter()
{
获取adapter
获取i2c_dev
get_free_i2c_dev()
{
把adapter加一层i2c_dev的壳
把i2c_dev挂到i2c_dev_list链表上
}
创建设备和设备文件
}
spi_dev.c
{
注册字符设备 spidev_fops
创建spidev_class
注册一个spidev_spi_driver spidev_probe
}
spidev_open()
{
遍历device_list找设备号
把spidev_data塞到filp->private_data
}
spidev_probe()
{
创建一个spidev_data
初始化锁和链表
找一个子设备号
创建设备
塞到device_list链表
}