如何将多个源文件编译为一个.ko
陆陆续续也写了几个Linux内核模块了,但每次都是把代码写在一个源文件中,上次尝试了写在两个.c文件中,结果没有编译通过。 无奈之下,将其中一个.c文件重命名成.h文件,再include当另一个当中。但是,在.h文件中写函数的实现总感觉怪怪的。 今天查看了以下Kbuild的文档,有如下描述
- If a kernel module is built from several source files, you specify
- that you want to build a module in the same way as above.
- Kbuild needs to know which the parts that you want to build your
- module from, so you have to tell it by setting an
- $(<module_name>-objs) variable.
- Example:
- #drivers/isdn/i4l/Makefile
- obj-$(CONFIG_ISDN) += isdn.o
- isdn-objs := isdn_net_lib.o isdn_v110.o isdn_common.o
- In this example, the module name will be isdn.o. Kbuild will
- compile the objects listed in $(isdn-objs) and then run
- "$(LD) -r" on the list of these files to generate isdn.o.
整理自己的源文件成两个.c文件(simpLB.c和sahu_lb_tools.c)、一个.h文件(sahu_lb.h)和Makefile文件。两个.c文件都包含了sahu_lb.h
按照Kbuild的文档所述,把Makefile改成如下内容:
- obj-m +=simpLB.o
- simpLB-objs:=sahu_lb_tools.o
- all:
- make -C /lib/modules/`uname -r`/build M=`pwd`
- clean:
- make -C /lib/modules/`uname -r`/build M=`pwd` clean
- install:
- /sbin/insmod simpLB.ko
- remove:
- /sbin/rmmod simpLB
编译没有问题,但是安装后模块的功能没有实现,就连我在init_module()中打印的提示信息都没有。lsmod却有simpLB。
只好再上网查了查,发现如下文章:
http://www.linuxquestions.org/questions/programming-9/linking-multiple-files-kernel-module-programming-701735/
按照文章的的建议,我把Makefile修改成如下内容:
- obj-m +=sahuLB.o
- sahuLB-objs:=simpLB.o sahu_lb_tools.o
- all:
- make -C /lib/modules/`uname -r`/build M=`pwd`
- clean:
- make -C /lib/modules/`uname -r`/build M=`pwd` clean
- install:
- /sbin/insmod sahuLB.ko
- remove:
- /sbin/rmmod sahuLB
如何将多个源文件编译为一个.ko相关推荐
- 编译内核模块生成ko驱动文件
1.加载内核简介 Linux内核的整体架构本就非常庞大,其包含的组件也非常多.而我们怎样把需要的部分都包含在内核中呢?一种方法是把所有需要的功能都编译到Linux内核中.这会导致两个问题,一是生成的内 ...
- 运行单个源文件_使用一个命令执行单个Java源文件
运行单个源文件 JDK增强提案 ( JEP ) 草案于2017年末创建,名为" 启动单文件源代码程序 "(其相关的JDK问题为JDK-8192920 ). 顾名思义,该JEP草案旨 ...
- java源文件编译成jar_从源文件和JAR文件构建Java代码模型
java源文件编译成jar 最近,我花了一些时间来研究有效java ,该方法正在GitHub上达到300星(可以免费帮助实现目标:D). Effectivejava是在您的Java代码上运行查询的工具 ...
- python编译so_Mac上把python源文件编译成so文件
把python源文件编译成so文件 前言 实际上属于一种代码混淆/加密的技术,大家知道python的源文件放在那里,大家是都可以看的,不像C语言编译出来可以拿编译后的东西去运行,所以就出现了这种需求. ...
- [重点!]头文件源文件编译链接
[重点!]头文件&源文件&编译&链接 C/C++支持分离式编译:一个程序可以分成多个部分保存在各个文件(头文件.源文件)中,在链接之前,各个文件(无论源文件还是头文件)是相互独 ...
- python文件编译为so_Mac上把python源文件编译成so文件
把python源文件编译成so文件 前言 实际上属于一种代码混淆/加密的技术,大家知道python的源文件放在那里,大家是都可以看的,不像C语言编译出来可以拿编译后的东西去运行,所以就出现了这种需求. ...
- Linux下静态编译的一个TIP
Linux下静态编译的一个TIP | 素包子 Linux下静态编译的一个TIP 2010年3月28日 baoz 阅读评论 linux下静态编译好处很多,一来是可以跨发行版(debian redhat ...
- code ro rw zi 编译的一个ARM的程序,编译结果中的一句话
code ro rw zi 编译的一个ARM的程序,编译结果中的一句话 Program Size: Code=8044 RO-data=52 RW-data=56 ZI-data=5184 其中: C ...
- 编译运行一个java程序_如何从另一个Java程序编译和运行Java程序
编译运行一个java程序 Have you ever thought if it's possible to compile and run a java program from another j ...
最新文章
- 阿里云centos 6.5 32位安装可视化界面的方法
- 必须要熬夜的时候的最佳伴侣是什么?亲测有效
- wxWidgets:wxEventFilter类用法
- 云原生应用程序运行时 Kyma 简介
- oracle symonym_Oracle的同义词(synonyms)
- linux samba安装失败,用aptitude安装samba失败
- 怎么通过MQTT查看数据是否上云端_设备工程师们的福利来啦!JSON数据采集网关帮你实现云端对接~...
- 为什么你的年薪只是别人的月薪?你需要技术专家帮你「充电」
- H3C AP当无线路由器静态IP上网配置
- 论文笔记--用于人体姿势估计的深度双连续网络(Deep Dual Consecutive Network for Human Pose Estimation)
- Invalid bound statement (not found): com.zheng.mapper.UserMapper.login
- Android中的临时文件
- Yolov5进阶之一摄像头实时采集识别
- 弱网测试学习记录(1)
- 舰船知识科普-有图有真相(附PPT)
- 打地鼠小游戏 版本一
- Apache中间件漏洞深析
- 高校bbs或者科研论坛
- MySQL学习记录(11.9更新)
- 类似蘑菇街、迷尚的流瀑布图片展示Demo
热门文章
- 软件测试用例项目写作,通用测试用例写作方法
- laravel框架的数据库链接
- 产品管理:启示录 - 特约客户、产品验证、原型测试
- 【Immutable】拷贝与JSON.parse(JSON.stringify()),深度比较相等与underscore.isEqual(),性能比较...
- Redis实现之对象(三)
- Linux 普通用户拿到root权限及使用szrz命令上传下载文件
- python selenium T3
- coco2dx c++ HTTP实现
- HTML5 Canvas 高仿逼真 3D 布料图案效果
- IIS 7.0探索用于 Windows Vista 的 Web 服务器和更多内容