在linux 内核编程中,会经常见到一个宏函数container_of(ptr,type,member), 但是当你通过追踪源码时,...
add_class_attrs(class_get(cls));{ class_create_file(cls, &cls->class_attrs[i]);{ sysfs_create_file(&cls->p->subsys.kobj, &attr->attr); } } } } } device_create(structclass*class,structdevice *parent, dev_t devt,void*drvdata,constchar*fmt, ...);//函数原型 修改自动创建的设备...
spidev = filp->private_data;//获取spidev_data filp->private_data = NULL;//清除文件的私有数据指针 spidev->users--;//使用者个数-- if (!spidev->users) {//如果使用者个数为0 int dofree; kfree(spidev->buffer);//释放spidev_data的缓冲区内存 spidev->buffer = NULL;//清除spidev_data...
video_set_drvdata(dev->vfd, dev); } } 该函数中出现一个config_a_device(dev)函数,这个函数是video_device设备的初始化配置函数,包括对文件操作指针的赋值,这里是一个初始化封装。 先来看看v4l2_detect()函数: structcamera_sensor *v4l2_detect(structacq_device_t *dev) { struct camera_sensor **Cams ...
struct spidev_data *spidev = spi_get_drvdata(spi); //根据spi设备获取spidev_data spin_lock_irq(&spidev->spi_lock); //上自旋锁 spidev->spi = NULL; //清空spidev_data->spi指针 spi_set_drvdata(spi, NULL); //spi->dev->p->driver_data=NULL spin_unlock_irq(&spidev->spi_...
struct spidev_data *spidev = spi_get_drvdata(spi);//根据spi设备获取spidev_data spin_lock_irq(&spidev->spi_lock);//上自旋锁 spidev->spi = NULL;//清空spidev_data->spi指针 spi_set_drvdata(spi, NULL);//spi->dev->p->driver_data=NULL ...
struct spidev_data *spidev = spi_get_drvdata(spi);//根据spi设备获取spidev_data spin_lock_irq(&spidev->spi_lock);//上自旋锁 spidev->spi = NULL;//清空spidev_data->spi指针 spi_set_drvdata(spi, NULL);//spi->dev->p->driver_data=NULL ...