内核读写sysfs中的文件

最近在安卓下实现一个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下的数据,所以需要经过转换成内核态可用的,调用完成后在转换回用户态。

时间: 2024-10-01 11:31:37

内核读写sysfs中的文件的相关文章

Android中的文件读写全面总结

转载请注明出处:http://blog.csdn.net/bettarwang/article/details/41625187 在深入分析Java中的I/O类的特征及适用场合 一文中,我详细介绍了Java中的I/O,但是,如果以为Android中的I/O与Java中一样,那就大错特错了.实际上,它们有一定的相同之外,但更多的是区别,因为Android系统中的文件存放位置不同,读取方式也不一样.下面将详细介绍Android中的文件读写: 一.资源文件的读取,不需要在Manifest文件中添加权限

【转】VC中对文件的读写

原文网址:http://www.cnblogs.com/LJWJL/archive/2012/10/06/2712466.html 注意: 1.由于C是缓冲写 所以要在关闭或刷新后才能看到文件内容 2.电脑处理文本型和二进制型的不同 (因为电脑只认识二进制格式) 方法一 :用C++的方法 // 写文件ofstream ofs("4.txt"); // 如果我们要用这个类 我们就需要先#include <fstream.h> ofs.write("hello&quo

VC中对文件的读写

http://www.cnblogs.com/LJWJL/archive/2012/10/06/2712466.html 注意: 1.由于C是缓冲写 所以要在关闭或刷新后才能看到文件内容 2.电脑处理文本型和二进制型的不同 (因为电脑只认识二进制格式) 方法一 :用C++的方法 // 写文件ofstream ofs("4.txt"); // 如果我们要用这个类 我们就需要先#include <fstream.h> ofs.write("hello",st

Android内核sysfs中switch类使用实例

Android内核sysfs中switch类使用实例 终于在这个周末,可以干点自己想要干的事了.由我这个二流的内核驱动开发者来解析一下sysfs中的switch类.先推测一下来历,在普通的嵌入式Linux平台上,一般是各自为战,完全不需要遵循什么规则.在Android中Google定义了一些潜移默化的规范,你可以完全不遵守.但是按照规则总归是好的. 先从直观的来看一下/sys/class/switch类中都有些什么吧. 首先可以看到实质是链接到了/sys/device/virtual/switc

在SQL脚本中进行文件的读写

在SQL脚本中进行文件的读写 首先需要开启xp_cmdshell [sql] sp_configure 'show advanced options',1 reconfigure go sp_configure 'xp_cmdshell',1 reconfigure go 然后再SQL中插入: [sql] Declare @Path varchar(5000) Set @Path='E:\Test.txt' declare @Command varchar(5000) set @Command=

Android中的文件读写总结

在Android中,文件主要分为两大类,内部存储和外部存储 内部存储的文件是程序私有的,分为普通文件和Cache文件 外部文件也可以是私有的,也可以是共有的,这要根据文件的目录位置来决定 共有文件可以用JAVA的文件处理方法来处理,但是内部文件必须用openfileinput或者openfileoutput来进行打开和关闭 在对SD卡上的文件进行操作之前需要先检查SD卡的状态(是否可读写,可访问等)

安卓系统中的文件读写操作

权限 <manifest ...> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ... </manifest> WRITE_EXTERNAL_STORAGE 已经隐含了读取权限 得到当前应用下的路径文件 File file = new File(context.getFilesDir(), filename); 写文件 String file

Linux中的文件描述符与打开文件之间的关系

1. 概述 在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文件.链接文件和设备文件.文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符.程序刚刚启动的时候,0是标准输入,1是标准输出,2是标准错误.如果此时去打开一个新的文件,它的文件描述符会是3.POSIX标准要求每次打开文件时(含socket)必须使用当前进程中最小可用的文件描述符号

每天进步一点点——Linux中的文件描述符与打开文件之间的关系

转载请说明出处:http://blog.csdn.net/cywosp/article/details/38965239 1. 概述 在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文件.链接文件和设备文件.文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符.程序刚刚启动的时候,0是标准输入,1是标准输出,2是标准错误.如果此时去打开一个