如何将多个源文件编译为一个.ko

陆陆续续也写了几个Linux内核模块了,但每次都是把代码写在一个源文件中,上次尝试了写在两个.c文件中,结果没有编译通过。 无奈之下,将其中一个.c文件重命名成.h文件,再include当另一个当中。但是,在.h文件中写函数的实现总感觉怪怪的。 今天查看了以下Kbuild的文档,有如下描述

[c-sharp] view plaincopy
  1. If a kernel module is built from several source files, you specify  
  2.  that you want to build a module in the same way as above.  
  3.   
  4.  Kbuild needs to know which the parts that you want to build your  
  5.  module from, so you have to tell it by setting an  
  6.  $(<module_name>-objs) variable.  
  7.   
  8.  Example:  
  9.      #drivers/isdn/i4l/Makefile  
  10.      obj-$(CONFIG_ISDN) += isdn.o  
  11.      isdn-objs := isdn_net_lib.o isdn_v110.o isdn_common.o  
  12.   
  13.  In this example, the module name will be isdn.o. Kbuild will  
  14.  compile the objects listed in $(isdn-objs) and then run  
  15.  "$(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改成如下内容:

[c-sharp] view plaincopy
  1. obj-m +=simpLB.o   
  2. simpLB-objs:=sahu_lb_tools.o  
  3. all:  
  4.   make -C /lib/modules/`uname -r`/build M=`pwd`  
  5. clean:  
  6.   make -C /lib/modules/`uname -r`/build M=`pwd` clean  
  7. install:  
  8.   /sbin/insmod simpLB.ko  
  9. remove:  
  10.   /sbin/rmmod simpLB  

编译没有问题,但是安装后模块的功能没有实现,就连我在init_module()中打印的提示信息都没有。lsmod却有simpLB。

只好再上网查了查,发现如下文章:

http://www.linuxquestions.org/questions/programming-9/linking-multiple-files-kernel-module-programming-701735/

按照文章的的建议,我把Makefile修改成如下内容:

 

[c-sharp] view plaincopy
  1. obj-m +=sahuLB.o   
  2. sahuLB-objs:=simpLB.o sahu_lb_tools.o  
  3. all:  
  4.   make -C /lib/modules/`uname -r`/build M=`pwd`  
  5. clean:  
  6.   make -C /lib/modules/`uname -r`/build M=`pwd` clean  
  7. install:  
  8.   /sbin/insmod sahuLB.ko  
  9. remove:  
  10.   /sbin/rmmod sahuLB  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/432740.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

未来计算机将具有图像识别 定理证明,[单选] 低温计与高温计所测温度的分界线为()。...

[单选] 低温计与高温计所测温度的分界线为()。更多相关问题【单选题】向一个栈顶指针为 HS 链式栈中插入一个 s 所指结点时,则执行( )。A. HS next s &#xff1b; B. s nextHS next &#xff1b; HS nexts &#xff1b; C.【判断题】每年10月是青海湖观鸟的最好季节。【单…

[nodejs]国内npm安装nodejs modules失败的几个解决方案

使用npm安装node模块时经常有卡住安装失败的情况&#xff0c;如图所示。原因在于npm服务器在美国&#xff0c;还有就是某强大的防火墙作用。这样的问题导致很多新手放弃使用node&#xff0c;几乎每天都有新手再问这个问题。现在分享一下解决这个问题的解决方案 1.可以通过一劳永…

linux2.6内核Makefile详解

熟悉内核的Makefile对开发设备驱动、理解内核代码结构都是非常重要的linux2.6内核Makefile的许多特性和2.4内核差别很大&#xff0c;在内核目录的documention/kbuild/makefiles.txt中有详细的说明。给大家一个中文版的翻译 目录 1 概述 2 用户与作用 3 Kbuild文件--- 3.1 目标定…

phpstudy编写html,phpStudy简介

PHP(“PHP: Hypertext Preprocessor”&#xff0c;超文本预处理器的字母缩写)是一种被普遍应用的开放源代码的多用途脚本语言&#xff0c;它可嵌入到 HTML中&#xff0c;尤为适合 web 开发。下面是用 PHP 编写了一个 HTML 脚本&#xff0c;其中嵌入了一些代码来作一些事情(例如…

mysql command line client闪一下消失

在启动MySQL后&#xff0c;通过软件可以操作数据库。在windows程序下找到MySQL-MySQL Server 5.6-mysql command line client&#xff0c;本来可以出现一个界面让用户输入密码。 但是在按上面的操作安装后&#xff0c;打开mysql command line client却发现它闪一下后消失。 解决…

java 合并单元格 把数据合并没了_合并单元格

合并单元格同样也是在表格中进行&#xff0c;关于合并单元格我们需要了解的两个概念&#xff1a;colspan 合并列&#xff0c;rowspan 合并行。colspan(跨列)合并列&#xff1a;colspan属性常用在 td 中&#xff0c;用来指定单元格横向跨越的列数。比如&#xff1a;将下面表格的…

一步步学习微软InfoPath2010和SP2010--第九章节--使用SharePoint用户配置文件Web service(2)--在事件注册表单上创建表单加载规则...

下面练习中&#xff0c;你将添加表单加载规则&#xff0c;将四个文本框域和图片控件与用户配置文件web service连接。当使用用户配置文件web service时&#xff0c;你需要将控件和来自web service合适的域绑定。这个过程需要用户配置文件架构的导航和筛选&#xff0c;来抽取合适…

.config 和 kconfig以及 makefile的关系

当我们编写完一个驱动后&#xff0c;我们要把它以模块形式编译或者直接编译进内核时&#xff0c;需要修改相关文件&#xff0c;其中最重要的便是kconfig ,makefile。主要是分析一下三者之间的关系&#xff0c;然后就其语法简要的谈一下。当我们在内核源码目录下执行make &#…

光耦驱动单向可控硅_华越国际一文带路:可控硅触发设计技巧

序可控硅(Silicon Controlled Rectifier,简称SCR)&#xff0c;是可控硅整流元件的简称&#xff0c;是一种具有三个PN结的四层结构的大功率半导体器件&#xff0c;亦称为晶闸管。具有体积小、结构相对简单、功能强等特点&#xff0c;是比较常用的半导体器件之一。家用电器中的调…

华为计算机网络基础知识,华为HCNE专题一:网络基础知识

华为HCNE专题一&#xff1a;网络基础知识对应章节&#xff1a;第一章重点&#xff1a;理解网络结构&#xff0c;掌握OSI参考模型的基本结构难点&#xff1a;OSI各层次名字及其概念的理解亮点/应用/重要性&#xff1a;网络入门的基础&#xff0c;重中之重。主要内容&#xff1a;…

Servlet JSP系列文章总结

前言 谢谢大家的捧场&#xff0c;真心感谢我的阅读者。 all 下一期&#xff0c;重点在 数据结构和算法 &#xff0c;希望给大家带来开心。已经出了几篇&#xff0c;大家爱读就是我的开心。 Servlet & JSP系列总结 博客&#xff0c;呵呵&#xff01;很开心&#xff0c;认识…

一般通话记录能保存多少条_鸡蛋放冰箱,能保存多少天?正确保存方法是什么?...

鸡蛋是我们经常吃的食物&#xff0c;很多家庭都会经常的买鸡蛋吃。相信大家买回来鸡蛋之后&#xff0c;普遍都是把鸡蛋放入冰箱里&#xff0c;什么时候想吃什么时候拿一个。但是大家可能不知道的是&#xff0c;鸡蛋就算是放在冰箱里保存&#xff0c;也是有保质期的&#xff0c;…

电气技术应用和计算机应用,电气技术应用专业介绍-1.ppt

(自我结构理论Company Logo LOGO 电气技术应用专业介绍 主讲&#xff1a; 2017年4月24日 熟悉电气技术应用专业的就业方向 电气技术应用专业介绍 了解电气技术应用专业的培养目标 掌握电气技术应用专业的课程设计 分析电气技术应用专业的就业前景和发展前景 1 2 3 4 电气技术应…

A20 加载 so

将so文件放到android4.2/device/softwinner/wing-mbox203下 修改此目录下的wing-mbox203.mk文件 增加 PRODUCT_COPY_FILE \ 文件路径(以android4.2为相对路径):文件要打入android镜像的路径 如果文件被正确打到镜像里的话&#xff0c;在编译的后&#xff0c;文件会出现在 …

基本矩阵运算的Java实现

基本矩阵运算的Java实现 分类&#xff1a; 图像处理2012-09-18 10:36 2537人阅读 评论(3) 收藏 举报javamatrixparametersstringclassnull一&#xff1a; 矩阵的加法与减法 规则&#xff1a;矩阵的加法与减法要求两个矩阵的行列完全相等&#xff0c;方可以完成两个矩阵的之间的…

json返回页面读取data里的值都是object_【一】尤大神都说Vite香,让我来手把手分析Vite原理...

戳蓝字"前端优选"关注我们哦&#xff01;一.什么是Vite&#xff1f;法语Vite(轻量&#xff0c;轻快)vite 是一个基于 Vue3单文件组件的非打包开发服务器&#xff0c;它做到了本地快速开发启动、实现按需编译、不再等待整个应用编译完成的功能作用。对于Vite的描述&am…

item name=android:width,Android:形状中的笔划创建笔划宽度的边距

我创建了一个矩形形状&#xff0c;以便将其用作列表项背景。 我的问题是笔划不遵循视图边框但是让笔划宽度为/-。这是我的形状的xml&#xff1a;<?xml version"1.0" encoding"utf-8"?>android:innerRadiusRatio"1"android:shape"re…

shell脚本报错:[: =: unary operator expected

shell脚本报错&#xff1a;"[: : unary operator expected" 在匹配字符串相等时&#xff0c;我用了类似这样的语句&#xff1a; if [ $STATUS "OK" ]; then echo "OK" fi 在运行时出现了 [: : unary operator expected 的错误&#xff…

discuz 标签详解

Discuz 模板标签说明 Discuz! 的模板采用近似 PHP 表达式的语法&#xff0c;基本都是可识别的HTML&#xff0c;但涉及到变量和动态内容时&#xff0c;基本形式下: <!-{ 代码内容 }-> 逻辑元素包围符&#xff0c;该符号用于包含条件和循环元素 条件判断 <!-{if …

ppp在linux下的编译和安装

我的编程环境是vmware fedora9, ARM目标板为ATMEL 9G45&#xff0c;LINUX内核2.6.30&#xff0c; GPRS模块为TELIT公司的GC864-DUAL-V2&#xff0c;使用3线制串口连接&#xff08;TXD RXD GND&#xff09; 1.修改2.6.30内核选项 &#xff0c;make menuconfigDevice drivers -…