将多个源文件编译成一个ko

有三个文件,分别是proc_rw.c、test.c和test.h,现在把这三个文件编译成proc.ko

1、proc_rw.c

#include <linux/module.h>
#include <linux/proc_fs.h>
#include <linux/sched.h>
#include <linux/uaccess.h>  //copy_to|from_user

#include "test.h"
//在str中存储用户态write到文件的字符串
static char *str;

//proc文件的读函数
static int my_proc_read(char *page, char **start, off_t off, int count, int *eof, void *data)
{
	int ret = 0,val = 0;
	
	//先输出时间,后输出从外部写入的内容
	//ret = sprintf(page, "kernel time: %ld\n", jiffies);
	val = test_func();
	ret = sprintf(page, "test func: %d\n", val);
	ret += sprintf(page+ret, "str is %s\n", str);

	return ret;
}

//proc文件的写函数
static int my_proc_write(struct file *filp, const char __user *buf, unsigned long count, void *data)
{
	//为从用户态拷贝字符串分配空间
	char *tmp = kzalloc(count, GF
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
多个源文件放在同一个编译模块中,需要进行以下步骤: 1. 创建一个文件,其中包含所有源文件的函数原型和变量声明,以及必要的宏定义和类型定义。 2. 在每个源文件中,包含这个头文件。 3. 编译每个源文件,生成对应的目标文件。 4. 将所有目标文件链接在一起,生成最终的可执行文件或库文件。 具体实现方式如下: 1. 创建一个文件(例如,mylib.h),包含所有源文件的函数原型和变量声明,以及必要的宏定义和类型定义。例如: ``` #ifndef MYLIB_H #define MYLIB_H // 函数原型和变量声明 int add(int a, int b); int sub(int a, int b); extern int global_var; #endif // MYLIB_H ``` 2. 在每个源文件中,包含这个头文件,并实现对应的函数和变量。例如,在 add.c 中实现 add 函数: ``` #include "mylib.h" int add(int a, int b) { return a + b; } ``` 在 sub.c 中实现 sub 函数: ``` #include "mylib.h" int sub(int a, int b) { return a - b; } ``` 在 global_var.c 中声明全局变量 global_var: ``` #include "mylib.h" int global_var = 0; ``` 3. 编译每个源文件,生成对应的目标文件。例如,在 Linux 系统下,可以使用以下命令: ``` gcc -c add.c gcc -c sub.c gcc -c global_var.c ``` 4. 将所有目标文件链接在一起,生成最终的可执行文件或库文件。例如,在 Linux 系统下,可以使用以下命令: ``` gcc add.o sub.o global_var.o -o mylib ``` 这样就可以将多个源文件放在同一个编译模块中了,可以方便地进行管理和维护。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值