读写proc节点几个实例

来源:互联网 发布:s1 知乎 编辑:程序博客网 时间:2024/06/06 12:20

1 充电时间

int turnoff_chr_time_read(char *page, char **start, off_t off, int count, int *eof, void *data)
{
char *ptr = page;
ptr += sprintf(ptr, "turnoff_chr_time = %d\n", turnoff_chr_time);
*eof = 1;
return (ptr - page);
}
ssize_t turnoff_chr_time_write( struct file *filp, const char __user *buff,
                        unsigned long len, void *data )
{
    if (copy_from_user( &proc_chr_time_data, buff, len )) {
printk("jeeray--->bat turnoff_chr_time_write proc wirte copy failed\n");
}
if (proc_chr_time_data[0] == '1')
{
turnoff_chr_time = 1;
}
else
{
turnoff_chr_time = 0;
}
return len;
}
int init_proc_chr_time(void)
{
    int ret=0;
    chr_time_proc_entry = create_proc_entry( "turnoff_chr_time", 0664, NULL );
    if (chr_time_proc_entry == NULL) {
        ret = -ENOMEM;
        printk("init_proc_chr_time: Couldn't create proc entry\n");
    } else {
        chr_time_proc_entry->write_proc = turnoff_chr_time_write;       
        chr_time_proc_entry->read_proc = turnoff_chr_time_read;       
        printk("init_proc_chr_time: loaded.\n");
    }
    return ret;
}

2 camsensor添加读写节点

    prEntry = create_proc_entry("driver/camsensor2", 0, NULL);
    if (prEntry) {
        prEntry->read_proc = CAMERA_HW_DumpReg_To_Proc;
        prEntry->write_proc = CAMERA_HW_Reg_Debug2;
    }
    else {
        PK_ERR("add /proc/driver/camsensor2 entry fail \n");
    }



static int  CAMERA_HW_Reg_Debug2( struct file *file, const char *buffer, unsigned long count,
                                                                     void *data)
{
    char regBuf[64] = {'\0'};
    u32 u4CopyBufSize = (count < (sizeof(regBuf) - 1)) ? (count) : (sizeof(regBuf) - 1);


    MSDK_SENSOR_REG_INFO_STRUCT sensorReg;
    memset(&sensorReg, 0, sizeof(MSDK_SENSOR_REG_INFO_STRUCT));


    if (copy_from_user(regBuf, buffer, u4CopyBufSize))
        return -EFAULT;


    if (sscanf(regBuf, "%x %x",  &sensorReg.RegAddr, &sensorReg.RegData) == 2) {
        if (g_pSensorFunc != NULL) {
            g_pSensorFunc->SensorFeatureControl(DUAL_CAMERA_SUB_SENSOR, SENSOR_FEATURE_SET_REGISTER, (MUINT8*)&sensorReg, (MUINT32*)sizeof(MSDK_SENSOR_REG_INFO_STRUCT));
            g_pSensorFunc->SensorFeatureControl(DUAL_CAMERA_SUB_SENSOR, SENSOR_FEATURE_GET_REGISTER, (MUINT8*)&sensorReg, (MUINT32*)sizeof(MSDK_SENSOR_REG_INFO_STRUCT));
            PK_DBG("write addr = 0x%08x, data = 0x%08x\n", sensorReg.RegAddr, sensorReg.RegData);
        }
    }
    else if (sscanf(regBuf, "%x", &sensorReg.RegAddr) == 1) {
        if (g_pSensorFunc != NULL) {
            g_pSensorFunc->SensorFeatureControl(DUAL_CAMERA_SUB_SENSOR, SENSOR_FEATURE_GET_REGISTER, (MUINT8*)&sensorReg, (MUINT32*)sizeof(MSDK_SENSOR_REG_INFO_STRUCT));
            PK_DBG("read addr = 0x%08x, data = 0x%08x\n", sensorReg.RegAddr, sensorReg.RegData);
        }
    }


    return count;
}

static int  CAMERA_HW_DumpReg_To_Proc(char *page, char **start, off_t off,
                                                                                       int count, int *eof, void *data)
{
    return count;
}

0 0