utils.h 文件:

#ifndef __UTILS_H__
#define __UTILS_H__ void a2f(const char *s, ...); #endif

utils.c 文件:

#include <linux/fs.h>
#include <asm/segment.h>
#include <asm/uaccess.h>
#include <linux/buffer_head.h>
#include <linux/string.h> #include "utils.h" #define FILE_PATH "/hzh" static struct file *fp; static int open_it() {
if (fp) return ;
mm_segment_t oldfs;
int err = ; oldfs = get_fs();
set_fs(get_ds());
fp = filp_open(FILE_PATH, O_CREAT|O_RDWR|O_APPEND, ); // 以追加方式写入文件
set_fs(oldfs);
if (IS_ERR(fp)) {
err = PTR_ERR(fp);
return ;
} return ;
} static void close_it() {
if (!fp) return;
filp_close(fp, );
fp = ;
} static int read_it(unsigned long long offset, unsigned char *data, unsigned int size) {
if (!fp) return ;
mm_segment_t oldfs;
int ret; oldfs = get_fs();
set_fs(get_ds()); ret = vfs_read(fp, data, size, &offset); set_fs(oldfs);
return ret;
} static int write_it(unsigned long long offset, unsigned char *data, unsigned int size) {
if (!fp) return ;
mm_segment_t oldfs;
int ret; oldfs = get_fs();
set_fs(get_ds()); ret = vfs_write(fp, data, size, &offset); set_fs(oldfs);
return ret;
} static int sync_it() {
if (!fp) return ;
vfs_fsync(fp, );
return ;
} void a2f(const char *fmt, ...) {
if (open_it()) return; char print_buf[];
va_list args;
int printed;
//初始化args,使其指向可变参数的第一个参数,fmt是可变参数的前一个参数
va_start(args, fmt);
printed = vsprintf(print_buf, fmt, args);
va_end(args); write_it(, print_buf, printed);
sync_it(); // close_it();
}

linux 内核驱动加载过程中 向文件系统中的文件进行读写操作的更多相关文章

  1. linux内核被加载的过程

    二,linux内核被加载的过程 一,linux安装时遇到的概念解析 内核必须模块vmlinz(5M左右)不认识硬盘,原本是需要写跟loader中一样的内容,来加载非必要模块. 内核非必要的功能被编译为 ...

  2. 动态符号链接的细节 与 linux程序的加载过程

    转: http://hi.baidu.com/clivestudio/item/4341015363058d3d32e0a952 值得玩味的一篇分析程序链接.装载.动态链接细节的好文档 导读: by ...

  3. linux 设备驱动加载的先后顺序

    Linux驱动先注册总线,总线上可以先挂device,也可以先挂driver,那么究竟怎么控制先后的顺序呢. 1.初始化宏 Linux系统使用两种方式去加载系统中的模块:动态和静态. 静态加载:将所有 ...

  4. [driver]linux内核动态加载模块

    问题: 1. 把编译好的模块放到板子/lib/modules对应文件夹下,并且执行了depmod -a, 比如pl2303.ko, 那么下一次插入pl2303的串口线,是否可以识别,也就是自动加载pl ...

  5. Linux基础: 系统加载过程和运行级别含义

    BIOS 有固化代码指向mbr,mbr指向grub(/boot/grub/下有很多引导配置信息),grub里可以配置多种linux内核vmlinux文件. 启动内核以后就开始加载各种驱动模块并进行系统 ...

  6. Linux内核模块驱动加载与dmesg调试

    因为近期用到了Linux内核的相关知识,下面随笔将给出内核模块的编写记录,供大家参考. 1.运行环境 Ubuntu 版本:20.04 Linux内核版本:5.4.0-42-generic gcc版本: ...

  7. Unix/Linux环境C编程入门教程(12) openSUSECCPP以及Linux内核驱动开发环境搭建

    1. openSUSE是一款优秀的linux. 2.选择默认虚拟机 3.选择稍后安装操作系统 4.选择linux  opensuse 5. 选择默认虚拟机名称 6.设置处理器为双核. 7.内存设置为2 ...

  8. 重温.NET下Assembly的加载过程 ASP.NET Core Web API下事件驱动型架构的实现(三):基于RabbitMQ的事件总线

    重温.NET下Assembly的加载过程   最近在工作中牵涉到了.NET下的一个古老的问题:Assembly的加载过程.虽然网上有很多文章介绍这部分内容,很多文章也是很久以前就已经出现了,但阅读之后 ...

  9. NET下Assembly的加载过程

    NET下Assembly的加载过程 最近在工作中牵涉到了.NET下的一个古老的问题:Assembly的加载过程.虽然网上有很多文章介绍这部分内容,很多文章也是很久以前就已经出现了,但阅读之后发现,并没 ...

随机推荐

  1. iBATIS缓存cacheModel属性浅析

    iBATIS缓存cacheModel属性的应用使得在Mapped Statement中缓存常用的数据,那么本文将会给你介绍iBATIS缓存cacheModel属性的信息. AD:2013云计算架构师峰 ...

  2. Struts2单文件上传

    第一步:首先写个上传文件的页面(简单的一个form表单) <html> <head> <meta http-equiv="Content-Type" ...

  3. jquery table的隔行变色 鼠标事件

    一.鼠标事件 mouseover(function(){}); 鼠标移动到目标事件 mouseout(function(){}); 鼠标离开目标的事件 二.具体应用代码 <body> &l ...

  4. 简单的背包变形HDU1203,HDU2955

    今天一直在写背包,不过中间停了一段时间在写shell. 一直在做01背包.今天做了这两题很相似的背包 首先是HDU1203 Speakless很早就想出国,现在他已经考完了所有需要的考试,准备了所有要 ...

  5. ACM YTU 《挑战编程》第一章 入门 Problem E: Graphical Editor

    Description Graphical editors such as Photoshop allow us to alter bit-mapped images in the same way ...

  6. Ext.String 方法

    1.Ext.String.htmlEncode(value); 编码字符串,对其中特殊字符进行转义 xt.String.htmlEncode("hello'world"); //& ...

  7. WPF2D绘制图形方法

    我们先看看效果如何: xaml文件: <Window x:Class="WPF2D绘制图形方法.MainWindow" xmlns="http://schemas. ...

  8. 【产品体验】echo回声

    本人产品新人,学习中,希望大家用过该产品的给点意见,不吝赐教哦~~ 先来两张echo的界面图镇楼——        echo简介: “echo”是一款做声音社交的APP,在这里,你可以感受到声音无限的 ...

  9. "_OBJC_CLASS_$_WeiboApi", referenced from: objc-class-ref in libtuyoo.a(TuYoo.o)

    Undefined symbols for architecture i386: "_OBJC_CLASS_$_WeiboApi", referenced from: objc-c ...

  10. MacOS快捷键