有些需求需要在kernel下面保存文件,可以参考一下:
void sava_battery(int val)
{
struct file *file = NULL;
mm_segment_t old_fs;
char val_str[10] = {0};
sprintf(val_str, "%d", val);
if(file == NULL)
file = filp_open("/data/battery.txt", O_RDWR|O_CREAT, 0644);
if (IS_ERR(file)) {
return 0;
}
old_fs = get_fs();
set_fs(KERNEL_DS);
file->f_op->write(file, (char *)val_str, sizeof(val_str), &file->f_pos);
set_fs(old_fs);
filp_close(file, NULL);
file = NULL;
return ;
}
int get_battery_value()
{
printk("Linc get_battery_value start");
mm_segment_t curr_fs = get_fs();
set_fs(KERNEL_DS);
filp = filp_open("/data/battery.txt", O_RDONLY, 0777);
if (IS_ERR(filp)) {
printk("Linc get_battery_value fuck\n");
return -1;
}
filp->f_op->llseek(filp, 0, SEEK_SET);
filp->f_op->read(filp, (char*)val_str, sizeof(val_str), &filp->f_pos);
filp_close(filp, NULL);
set_fs(curr_fs);
printk("Linc get_battery_value val_str1=%s\n",val_str);
sscanf(val_str, "%d", &val);
printk("Linc get_battery_value val=%d\n",val);
return val;
}