2013-07-05 57 views
0

我正在使用ioctl方法將用戶空間sysfs交互移動到使用miscregister的「/ dev」。如何獲得ioctl內的struct i2c_client *客戶端結構?

,我們是否可以解決的inode客戶結構(struct i2c_client)的請別人告訴怎麼進去的ioctl客戶結構。我需要在ioctl中進行i2c傳輸。

我提到這個鏈接:

http://stackoverflow.com/questions/2635038/inode-to-device-information 

但coudln得到任何答案。

請有人給解決方案。

回答

2

當你在內核中使用open函數打開您的設備。 (這部分代碼從主線車手之一(驅動器/ I2C/I2C-dev.c)使事情變得容易複製)

my_i2c_device_open(struct inode *inode, struct file *file) 
{ 
    unsigned int minor = iminor(inode); 
    struct i2c_client *client; 
    struct i2c_adapter *adap; 
    struct i2c_dev *i2c_dev; 

    i2c_dev = i2c_dev_get_by_minor(minor); 
    if (!i2c_dev) 
     return -ENODEV; 

    adap = i2c_get_adapter(i2c_dev->adap->nr); 
    if (!adap) 
     return -ENODEV; 

    client = kzalloc(sizeof(*client), GFP_KERNEL); 
    if (!client) { 
     i2c_put_adapter(adap); 
     return -ENOMEM; 
    } 
    snprintf(client->name, I2C_NAME_SIZE, "i2c-dev %d", adap->nr); 
    client->adapter = adap; 
    file->private_data = client; 

    return 0; 

} 

,當你調用IOCTL,你可以從文件中檢索i2c_client你的設備的指針:

static long my_i2c_device_ioctl(struct file *file, unsigned int cmd, unsigned long arg) 
{ 
    struct i2c_client *client = file->private_data; 

} 

希望這會讓你的生活變得輕鬆。

+0

謝謝你。讓我的生活更輕鬆.. :) – kzs