Android4.0的驱动如何建立proc的文件节点

来源:互联网 发布:淘宝网订做牙冠靠谱吗 编辑:程序博客网 时间:2024/05/17 01:54

1:添加头文件
#include <linux/proc_fs.h>
#include <linux/fs.h>
2:定义的变量
#if H500_TP_PS_MODIFY

int sound8976_galley_select_flag = 0;
#define MODEM_SWITCH_PROC_NAME "ps_value"
#define PROC_NAME "ps"
static struct proc_dir_entry * s_proc = NULL;
//extern struct proc_dir_entry  proc_root;
struct proc_dir_entry *root_entry =NULL;
struct proc_dir_entry *entry = NULL;
int psvalue = 0;

#endif
3:读写函数
#if H500_TP_PS_MODIFY
static int modem_switch_writeproc(struct file *file,const char *buffer,
                           unsigned long count, void *data)
{
        int value;
        sscanf(buffer, "%d", &psvalue);
        printk("************************luu value ==value %d***********************\n",psvalue);
        return count;
 }

static int modem_switch_readproc(char *page, char **start, off_t off,
 int count, int *eof, void *data)
{
              int len;
       printk("************************luread  ***********************\n");

              len = sprintf(page, "%d\n", psvalue==0?0:(psvalue==1?1:(psvalue==2?2:3))); //wangyulu
              /*
              if (off + count >= len)
              *eof = 1;
              if (len < off)
               return 0;
             *start = page + off;
             return ((count < len - off) ? count : len - off);
             */
             return len;
}
#endif
4:注册(添加在probe函数里面)
#if H500_TP_PS_MODIFY
   //root_entry = proc_mkdir(PROC_NAME, &proc_root);
                    s_proc = create_proc_entry(MODEM_SWITCH_PROC_NAME, 0777, NULL);
                    if (s_proc != NULL)
        {
                       s_proc->write_proc = modem_switch_writeproc;
      s_proc->read_proc = modem_switch_readproc;
                     }
#endif

5:成功以后可以在系统的
看见    proc/ps_value
使用    cat ps_value
            echo 1 > ps_value
仅供参考,谢谢!