以两个C文件为例:

将本该被分别编译成adc_device.ko和adc_driver.ko的adc_device.c、adc_driver.c编译成一个ko文件!

采用方法:

第一步、修改C文件
1、去掉adc_device.c文件里module_init(xxx)、module_exit(yyy)中xxx、yyy 函数原型的关键字static
2、注销adc_device.c文件里module_init(xxx)、module_exit(yyy)函数
3、在adc_driver.c文件里添加用关键字extern声明的上述xxx、yyy函数
4、在adc_driver.c文件里module_init(mmm)、module_exit(nnn)中mmm、nnn 函数原型合适地方调用xxx、yyy函数
注意:当把多个C文件编译成一个.ko文件时, C文件里的module_init、module_exit 会提示重定义,
故一个ko里边只能有一个module_init和一个module_exit!

第二步、编写Makefile文件(关键部分)

obj-m += adc.o
adc-objs := adc_device.o adc_driver.o

就这样,将本该被分别编译成adc_device.ko和adc_driver.ko的adc_device.c、adc_driver.c

编译成一个adc.ko文件!

原文:https://blog.csdn.net/dcx1205/article/details/39041461

以上是经过查询的结果,现在是实践结果,只是作为练习使用:
<first.c>

#include <linux/init.h>
#include <linux/module.h>
#include "second.h"extern int second_func(void);
static inline int __init
first_init(void)
{printk("this is in %s\n", __func__);second_func();return 0;
}static inline void __exit
first_exit(void)
{printk("this is in %s\n", __func__);second_func();
}module_init(first_init);
module_exit(first_exit);

<second.c>

#include "second.h"int
second_func(void)
{printk("this is in %s\n", __func__);return 0;
}EXPORT_SYMBOL(second_func);

<second.h>

#ifndef __SECOND_H__#define __SECOND_H__#include <linux/init.h>
#include <linux/module.h>                   extern int second_func(void);#endif

Makefile

KERN_DIR = /lib/modules/`uname -r`/build/
obj-m := alex.o
alex-objs:=first.o second.o
all:make -C $(KERN_DIR) M=$(shell pwd) modules
clean:make -C $(KERN_DIR) M=$(shell pwd) modules clean

经过验证,可用

多个.c文件编译成.ko文件相关推荐

  1. java虚拟机编译文件,理解Java虚拟机(1)之一个.java文件编译成.class文件发生了什么...

    理解Java虚拟机(1)之一个.java文件编译成.class文件发生了什么 最近在看<深入理解Java虚拟机>弄明白了很多java的底层知识,决定分几部分总结下,从.java文件编译,到 ...

  2. C#.NET如何将cs文件编译成dll文件 exe文件 如何调用dll文件

    比如我要把TestDLL.cs文件编译成dll文件,则在命令提示符下,输入下面的命令,生成的文件为TestDLL.dll csc /target:library TestDLL.cs 注意前提是你安装 ...

  3. 什么是pyc文件,把python的py文件编译成pyc文件,把pyc文件反编译成py文件。以及python编译的如何设置不生成pyc文件

    文章目录 1 什么是pyc文件 1.1 什么是pyc文件 1.2 pyc文件是怎么生成的,有什么好处 2 把python的py文件编译成pyc文件 2.1 使用python内置库py_compile把 ...

  4. aspx文件编译成DLL文件的原理

    前言 Asp.net不是asp的简单升级,而是微软.Net计划中的一个重要组成部分,它依托.Net的多语言与强大的类库支持,引进了服务端HTML控件与WEB控件,自动处理控件的客户端与服务端的 交互, ...

  5. 【转载】把aspx文件编译成DLL文件-.NET教程,Asp.Net开发

    前言 asp.net不是asp的简单升级,而是微软.net计划中的一个重要组成部分,它依托.net的多语言与强大的类库支持,引进了服务端html控件与web控件,自动处理控件的客户端与服务端的 交互, ...

  6. 将pyx文件编译成pyd文件(很多坑,已解决)

    项目场景: Faster R-CNN项目,将pyx文件编译成pyd文件(很多坑,请注意) 项目环境 python 3.6 – conda的虚拟环境 TensorFlow 1.15.0 win 10 问 ...

  7. 把CS文件编译成dll文件

    编译方法如下: 一.打开VS.NET的C命令提示 二.进入目录 三.输入如下命令: csc /t:library /out:F:\MD5.dll  F:\MD5.cs(常用) 如图: 如何做才能够把c ...

  8. jcreator把class字节码文件转成.java源文件_如何将.JAVA文件编译成.CLASS文件.说明方法和工具,或用JCreator如何操作?...

    http://www.newiter.com/showart.asp?id=33 由于比较长,建议点击上面链接进入继续浏览 对于很多应用系统,常常需要动态装载和执行类和代码片断,这有利于部署的简易性和 ...

  9. Python代码加密,将python文件编译成so文件

    Python程序(.py文件)是公开的,容易被别人拿去使用,为了更好保护知识产权,可以对python文件加密为.so文件. 首先,我们需要在Ubuntu系统中安装一些准备工具,包括python3-de ...

最新文章

  1. PTA数据结构与算法题目集(中文)7-15
  2. CentOS7下Docker Storage Pool扩容
  3. 剑指offer-调整数组顺序使奇数位于偶数前面
  4. 抽象方法可以有方法体_抽象类和模板方法设计模式
  5. big sur卡第二阶段无限重启_2019百大球员第67:克林特卡佩拉,一张饼一辈子
  6. Helm V3 新版本发布
  7. Python——函数 8、可变长参数
  8. 灰色系统与灰色预测模型
  9. 深入剖析ORACLE数据库备份与恢复的原理
  10. Java基本数据类型及其包装类
  11. 专科python应届生工资多少-Python这么火热,本科应届生薪资这么高?
  12. 几种简单的负载均衡算法及其 Java 代码实现
  13. 数据科学常用Python库介绍--Numpy、Scipy、Pandas、Matplotlib、Plotly、SciKit-Learn等
  14. JNA (Java 本地访问)理论概述与入门
  15. 基础集合论 第三章 2 自然数集
  16. Arduino uno LED灯实验
  17. 高效维持网络长连接:手把手教你实现 自适应的心跳保活机制
  18. Linux内核启动流程详解
  19. 重发布实验、路由策略实验
  20. 使用Docker安装Redis并设置自启动

热门文章

  1. 汇编语言:从XX单元开始的连续30个单元中存放有30个无符号数,从中找出最大者送入yy单元中
  2. go 环境下载- win764位
  3. 软件测试 (一) 软件测试方法大汇总
  4. Android 前沿UI
  5. 瑞芯微RK3566 简单介绍与Android11.0 固件编译
  6. matlab函数内定义常量,matlab 里定义全局变量,常量
  7. android 在窗口中启动应用程序,Android中使用am命令实现在命令行启动程序详解
  8. 松下A6伺服驱动器X4端子50Pin针引脚说明
  9. 系统选Linux还是mac,如何选择一款适合自己操作系统、Windows、Mac还是Linux?
  10. 简单的小学生试卷组卷系统