andrid linux kernel中植入一个文件节点

如何在andrid linux kernel中植入一个文件节点


    首先
    #define PROC_NAME "ftxxxx-debug"
    static struct proc_dir_entry *ftxxxx_proc_entry;




    然后
    int ftxxxx_create_apk_debug_channel(struct i2c_client * client)
{
ftxxxx_proc_entry = proc_create(PROC_NAME, 0777, NULL, &debug_flag_fops);

if (NULL == ftxxxx_proc_entry) {
dev_err(&client->dev, "[Focal][TOUCH_ERR] %s: Couldn't create proc entry!\n", __func__);
return -ENOMEM;
} else {
dev_info(&client->dev, "[Focal][Touch] %s: Create proc entry success! \n", __func__);
}
return 0;
}


    static const struct file_operations debug_flag_fops = {
.owner = THIS_MODULE,
.read = ftxxxx_debug_read,
.write = ftxxxx_debug_write,
};




       static ssize_t ftxxxx_debug_write(struct file *filp, const char __user *buff, size_t len, loff_t *data)
{
struct i2c_client *client = (struct i2c_client *)ftxxxx_ts->client;
unsigned char writebuf[FTS_PACKET_LENGTH];
int buflen = len;
int writelen = 0;
int ret = 0;
char upgrade_file_path[128];


if (copy_from_user(writebuf, buff, buflen)) {
dev_err(&client->dev, "[Focal][TOUCH_ERR] %s : copy from user error \n", __func__);
return -EFAULT;
}
proc_operate_mode = writebuf[0] - 48;
printk("[Focal][Touch] %s : proc write proc_operate_mode = %d !! \n", __func__, proc_operate_mode);
switch (proc_operate_mode) {
case PROC_UPGRADE:
break;
case PROC_WRITE_REGISTER:
break;
case PROC_READ_DATA:
case PROC_WRITE_DATA:
break;
default:
break;
}
return len;
}


/*interface of read proc*/


bool proc_read_status;
static ssize_t ftxxxx_debug_read(struct file *filp, char __user *buff, size_t len, loff_t *data)
{
struct i2c_client *client = (struct i2c_client *)ftxxxx_ts->client;
int ret = 0;
unsigned char buf[1000];

ssize_t num_read_chars = 0;
int readlen = 0;
u8 regvalue = 0x00, regaddr = 0x00;




switch (proc_operate_mode) {
case PROC_UPGRADE:
break;
case PROC_READ_REGISTER:
break;
case PROC_READ_DATA:
break;
case PROC_WRITE_DATA:
break;
default:
break;
}
memcpy(buff, buf, num_read_chars);
/*memcpy(buff, buf, num_read_chars);*/
/*kfree(buf);*/
if (!proc_read_status) {
proc_read_status = 1;
return num_read_chars;
} else {
proc_read_status = 0;
return 0;
}

}



删除文件节点
void ftxxxx_release_apk_debug_channel(void)
{
if (ftxxxx_proc_entry)
remove_proc_entry(PROC_NAME, NULL);
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值