博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
驱动中私有数据的存放
阅读量:4286 次
发布时间:2019-05-27

本文共 4056 字,大约阅读时间需要 13 分钟。

bdd

struct device {
void *platform_data; /* Platform specific data, device core doesn't touch it */ void *driver_data; /* Driver data, set and get with dev_set/get_drvdata */xxx_set_drvdata xxx->dev->driver_data = data;xxx_get_drvdata data = xxx->dev->driver_data;dev_get_platdata // static inline void *dev_get_platdata(const struct device *dev) return dev->platform_data;到 probe 的时候 pdata: nulldrvdata: null 这个东西对于每个设备来说都是私有数据.但是driver 怎么根据同种但是不同的设备来做事情呢?他们一开始都为null,可以根据设备树里面的属性来分辨不同的节点,从而给不同设备的 pdata drvdata 赋不同的值
dev 与 drv数据 // 其实 这个过程 是 plat input i2c 的直接版本,效果一样	dev->driver_data = bu21013_data;		struct bu21013_ts_data *bu21013_data = dev_get_drvdata(dev);
dev 与plat数据      // 平台数据      struct device *dev = &client->dev;                                                 const struct tca8418_keypad_platform_data *pdata =                                                     dev_get_platdata(dev);      将数据从pdata 中拿出来      // 数据时什么时候放进去的呢 添加platfrom的时候会主动放入,驱动也可以放入      int platform_device_add_data(struct platform_device *pdev, const void *data,size_t size) // GFP_KERNEL

bdd 的封装

platform 与 数据 // 只有这一种 drvdata// 设置 s2mps11_clks 的数据指向s2mps11_clks->pdev = pdev;// 从 s2mps11_clks get 到 pdevstruct platform_device * pdev = s2mps11_clks->pdev---// 设置 pdev 的私有数据platform_set_drvdata(pdev, s2mps11_clks);// 拿 pdev 的私有数据struct s2mps11_clk *s2mps11_clks = platform_get_drvdata(pdev);
input 与 数据 // 其实就是drvdata      struct tca8418_keypad *keypad_data;      struct input_dev *input;      keypad_data = devm_kzalloc(dev, sizeof(*keypad_data), GFP_KERNEL);      if (!keypad_data)      	return -ENOMEM;      input = devm_input_allocate_device(dev);                                           if (!input)                                                                            return -ENOMEM;      keypad_data->input = input;      input_set_drvdata(input, keypad_data);      input_register_device(input);
i2c 与数据 // 其实就是 drvdatastatic int apanel_probe(struct i2c_client *client	struct apanel *ap;	ap = &apanel; // 全局变量	i2c_set_clientdata(client, ap); static int apanel_remove(struct i2c_client *client)	struct apanel *ap = i2c_get_clientdata(client);

赋值demo

  • platform_data
// platform_datachar buff_p[6] = "hello";char *pdata = NULL;                                                          struct device *dev = &client->dev;pdata = dev_get_platdata(dev);                                               if (pdata)                                                                       printk("pdata:%d\n",pdata[0]);                                           else{
printk("pdata: null\n"); dev->platform_data = buff_p; } pdata = dev_get_platdata(dev); printk("pdata:%s\n",pdata);
  • driver_data
// driver_data                                                                      char buff_d[6] = "12345";                                                                         char * drvdata = NULL;     drvdata = i2c_get_clientdata(client);                                        if(drvdata)                                                                      printk("drvdata:%d\n",drvdata[0]);                                          else{
dev->driver_data= buff_d; printk("drvdata: null\n"); } drvdata = i2c_get_clientdata(client); printk("drvdata:%s\n",drvdata);
  • open时 filp 与私有数据
int axi_dma_open(struct inode *inode, struct file *filp){
struct axi_dma_dev *dev; // 1. 求出私有设备信息结构体 dev = container_of(inode->i_cdev, struct axi_dma_dev, cdev); // 2. 将 设备信息与 filp 建立联系 filp->private_data = dev;

转载地址:http://poigi.baihongyu.com/

你可能感兴趣的文章
2014校园招聘_腾讯2014校园招聘
查看>>
ExtJs4.2学习--Ext.tab.Panel 选项卡
查看>>
mybatis+spring+struts2框架整合
查看>>
你真正理解java的字符类型了吗?(bit,byte,short,int等字符类型)
查看>>
数据挖掘开源软件:WEKA基础操作
查看>>
Python一些容易忽略的知识
查看>>
Ubuntu(-13.10)中安装JDK图文详解教程
查看>>
Hadoop2.2.0单节点安装和配置环境图文详解
查看>>
数据挖掘学习笔记--决策树C4.5
查看>>
数据挖掘学习笔记之人工神经网络(一)
查看>>
数据挖掘学习笔记之人工神经网络(二)
查看>>
人工神经网络关键核心知识点
查看>>
贝叶斯学习--极大后验概率假设和极大似然假设
查看>>
贝叶斯学习--极大后验假设学习
查看>>
朴素贝叶斯分类器
查看>>
贝叶斯学习举例--学习分类文本
查看>>
hadoop HDFS原理基础知识
查看>>
数据挖掘十大算法----EM算法(最大期望算法)
查看>>
android StrictMode应用
查看>>
TabHost的两种使用方法
查看>>