读写proc节点几个实例

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值