码迷,mamicode.com
首页 > 其他好文 > 详细

内核读写sysfs中的文件

时间:2015-04-20 17:10:24      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:

最近在安卓下实现一个new feature的时候,需要在驱动中读取sysfs中的一个文件的数据,经过计算后保存到另一个文件中。
在kernel中读写文件和在userspace下读取文件需要调用不同的interface。

全局变量:

#define FILE_PATH "/data/xxxx.cfg"
#define BUF_SIZE 128
char global_buf[BUF_SIZE];
struct file *fp;

读函数:

static int get_data_from_sysfs(const char *path, char *buf)
{

    mm_segment_t fs;

    fp = filp_open(path, O_RDONLY, 0644);
    if (unlikely(IS_ERR(fp))) {
        pr_info("Fail to open file \"%s\"\n", path);
        return -1;
    }

    fp->f_pos = 0;
    fs = get_fs();
    set_fs(KERNEL_DS);
    fp->f_op->read(fp, buf, BUF_SIZE, &(fp->f_pos));
    set_fs(fs);
    filp_close(fp, NULL);

    return 0;
}

写函数

static int update_data_to_sysfs(void)
{
    mm_segment_t fs;

    sprintf(global_buf, "%u    %u    %u\n", aaa,
            bbb, ccc);

    fp = filp_open(FILE_PATH, O_RDWR | O_CREAT, 0644);
    fp->f_pos = 0;
    fs = get_fs();
    set_fs(KERNEL_DS);
    fp->f_op->write(fp, global_buf, sizeof(global_buf), &fp->f_pos);
    set_fs(fs);

    return 0;
}

函数原型中,fp->f_op->write和fp->f_op->read的第二个参数都是userspace下的数据,所以需要经过转换成内核态可用的,调用完成后在转换回用户态。

内核读写sysfs中的文件

标签:

原文地址:http://blog.csdn.net/yin262/article/details/45150175

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!