内核态写文件--多文件

一、module模块test.c

#include <linux/module.h>
#include "savefile.h"
 
#define DIRNAME "/home/snail" 
#define FILENAME "my_log_a_core.bin"
 
static char buf[] = "你好1234213";
 
 int __init hello_init(void)
 {
	 savefile(DIRNAME,FILENAME,buf,strlen(buf));
	 return 1;
 }

 void __exit hello_exit(void)
 {
     printk("hello exit\n");
 }
  
 module_init(hello_init);
 module_exit(hello_exit);


 

二、savefile.c 与 savefile.h

#include <linux/module.h>
#include <linux/init.h>
#include <linux/fs.h>
#include <linux/uaccess.h>
#include "savefile.h"


int savefile(char *dirName,char *fileHeader,char *address,unsigned long length)
{
	 struct file *filp;
	 mm_segment_t fs;
	 loff_t pos;

	 char filename[512]={'\0'};
	 unsigned int i=0;
	 while(*dirName)
	 {
	 filename[i]=*dirName;
	 i++;
	 dirName++;
	 }
	 filename[i]='/';
	 i++;
	 while(*fileHeader)
	 {
	 filename[i]=*fileHeader;
	 i++;
	 fileHeader++;
	 }
	 filename[i]='\0';
	 
	filp = filp_open(filename, O_RDWR| O_APPEND| O_CREAT, 0644);

	if(IS_ERR(filp))
	 {
	 printk("open error...\n");
	 return 0;
	 }
	 fs=get_fs();
	 set_fs(KERNEL_DS);
	 pos = 0;
	 vfs_write(filp, address, length, &pos);
		set_fs(fs);
	 filp_close(filp, NULL);
	return 1;
}

#ifndef __SAVEFILE_H
#define __SAVEFILE_H


int savefile(char *dirName,char *fileHeader,char *address,unsigned long length);

#endif


 

#ifndef __SAVEFILE_H
#define __SAVEFILE_H


int savefile(char *dirName,char *fileHeader,char *address,unsigned long length);

#endif


 

三、makefile

obj-m := mytest.o   //生成模块名
mytest-objs := test.o savefile.o  //依赖文件

KDIR := /lib/modules/`uname -r`/build
	PWD := $(shell pwd)
 
all:
	make -C $(KDIR) M=$(PWD) modules
 
clean:
	rm -rf *.o .cmd *.ko *.mod.c .tmp_versions
 


 

 

 

 

 

你可能感兴趣的:(内核态写文件--多文件)