4
回答
关于收音机驱动与v4l2架构的关系
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

            刚出来实习,公司让我写个收音机驱动,模块是TEF6688,我找了内核的/driver/media/radio/tef6862.c来看(看着相似)。
            tef6862.c文件里面,在模块加载的时候调用
        
           [b] i2c_add_driver(&tef6862_driver);[/b]

            这个函数在成功添加了i2c设备了之后调用了i2c_driver的probe函数,

            [b]tef6862_probe(struct i2c_client *client, const struct i2c_device_id *id)[/b]

            然后tef68_probe里面调用了

            [b]v4l2_i2c_subdev_init (struct v4l2_subdev *sd, struct i2c_client *client,const struct v4l2_subdev_ops *ops)[/b]

            跳进去看,里面有仨函数:

            v4l2_subdev_init(sd, ops);   //初始化一下sd结构体,sd->ops = ops;   这里的ops是下面的tef6862_ops结构体
            v4l2_set_subdevdata(sd, client);   //sd->dev_priv = p;
            i2c_set_clientdata(client, sd);   //client->dev->p->driver_data = sd;

[b]            这三个函数好像就只是把一些结构体初始化,关联一下而已,然后就断掉了,而tef6862.c文件里面并没有一些驱动注册跟file_operationos的接口实现,我想问一下tef6862.c文件里面的其他函数在哪实现了?驱动在哪注册了?函数接口read、write、ioctl、open在哪?这文件好像用了v4l2架构,这个架构具体是怎样的?我看了radio目录里面的一些其他文件,好像也是用了这种架构,真不知道驱动具体是在那个文件里面注册了,我搜过g_tuner 、s_tuner 这几个指针,但是出了好多,一个一个找,看相不相关,感觉要非常久,可是现在时间有点不允许,希望大神指点一下,跟我说一下,这些函数指针具体是在哪被调用了,驱动是在哪注册了,file_operations里面的函数结构在哪实现了。
           新人第一次提问,有点啰嗦,希望懂的朋友看到了可以给我一些指点,谢谢了![/b]

            下面的tef6862_tuner_ops结构体就是一些直接利用i2c与硬件交互的函数,
static const struct v4l2_subdev_tuner_ops tef6862_tuner_ops = {
 .g_tuner = tef6862_g_tuner,
 .s_tuner = tef6862_s_tuner,
 .s_frequency = tef6862_s_frequency,
 .g_frequency = tef6862_g_frequency,
};

static const struct v4l2_subdev_core_ops tef6862_core_ops = {
 .g_chip_ident = tef6862_g_chip_ident,
};

static const struct v4l2_subdev_ops tef6862_ops = {
 .core = &tef6862_core_ops,
 .tuner = &tef6862_tuner_ops,
};

 

举报
左左0932
发帖于4年前 4回/525阅
顶部