linux创建proc节点

static ssize_t es8323_proc_write(struct file *file, const char __user *buffer,

        size_t  len, loff_t  *data)

{

    char *cookie_pot; 

    char *p;

    int reg;

    int value;

 

    cookie_pot = (char *)vmalloc( len );

    if (!cookie_pot) 

    {

        return -ENOMEM;

    } 

    else 

    {

        if (copy_from_user( cookie_pot, buffer, len )) 

            return -EFAULT;

    }

 

    switch(cookie_pot[0])

    {

        case 'r':

        case 'R':

            printk("Read reg debug\n");     

            if(cookie_pot[1] ==':')

            {

                strsep(&cookie_pot,":");

                while((p=strsep(&cookie_pot,",")))

                {

                    reg = simple_strtol(p,NULL,16);

                //  value = codec_read(i2c_client,reg);

                    value = snd_soc_read(es8323_codec, reg);

                    printk("codec_read:0x%04x = 0x%04x\n",reg,value);

                }

                printk("\n");

            }

            else

            {

                printk("Error Read reg debug.\n");

                printk("For example: echo r:22,23,24,25>es8323_ts\n");

            }

            break;

        case 'w':

        case 'W':

            printk("Write reg debug\n");        

            if(cookie_pot[1] ==':')

            {

                strsep(&cookie_pot,":");

                while((p=strsep(&cookie_pot,"=")))

                {

                    reg = simple_strtol(p,NULL,16);

                    p=strsep(&cookie_pot,",");

                    value = simple_strtol(p,NULL,16);

                //  codec_write(i2c_client,reg,value);

                    snd_soc_write(es8323_codec, reg, value);

                    printk("codec_write:0x%04x = 0x%04x\n",reg,value);

                }

                printk("\n");

            }

            else

            {

                printk("Error Write reg debug.\n");

                printk("For example: w:22=0,23=0,24=0,25=0>es8323_ts\n");

            }

            break;

        case 'a':

            printk("Dump reg \n");      

 

            for(reg = 0; reg < 0x6e; reg+=2)

            {

            //  value = codec_read(i2c_client,reg);

                value = snd_soc_read(es8323_codec, reg);

                printk("codec_read:0x%04x = 0x%04x\n",reg,value);

            }

 

            break;      

        default:

            printk("Help for es8323_ts .\n-->The Cmd list: \n");

            printk("-->'d&&D' Open or Off the debug\n");

            printk("-->'r&&R' Read reg debug,Example: echo 'r:22,23,24,25'>es8323_ts\n");

            printk("-->'w&&W' Write reg debug,Example: echo 'w:22=0,23=0,24=0,25=0'>es8323_ts\n");

            break;

    }

 

    return len;

}

 

static const struct file_operations es8323_proc_fops = {

    .owner      = THIS_MODULE,

    .write = es8323_proc_write,

};

 

static int es8323_proc_init(void)

{

    proc_create_data("es8323_pcm_ts", 0777 /* default mode */,

            NULL /* parent dir */, &es8323_proc_fops,

            NULL /* client data */);

    return 0;

}

 

https://github.com/jesstess/ldd4/blob/master/scull/main.c

https://blog.csdn.net/wbd880419/article/details/51955805

https://stackoverflow.com/questions/26808325/implicit-declaration-of-function-create-proc-entry

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值