LINUX 2.6 内核下多C文件模块编译方法

MODULE_NAME :=test
RESMAN_CORE_OBJS :=hello1.o
RESMAN_GLUE_OBJS :=hello2.o
$(MODULE_NAME)-objs := $(RESMAN_CORE_OBJS) $(RESMAN_GLUE_OBJS)
obj-m :=test.o
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD       := $(shell pwd)
all:
 $(MAKE) -C $(KERNELDIR) M=$(PWD)
clean:
 rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions
 
描述:

LINUX 2.6.10的内核下如何编译多个C源文件,问题的实质就是:主C文件里函数如何调用其他的函数或者变量,当然也可以相互调用。

解决方法:

       对于模块中的常用格式还是跟单模块是一致的,函数和变量的使用方法跟正常的应用程序C多文件相互调用没有什么不同,这里关键是Makefile的书写方法是最重要,下面就拿一个例子给大家讲解一下,例子的代码同本文档一起压缩在压缩包内。

Makefile文件关键代码:

MODULE_NAME :=test

RESMAN_CORE_OBJS :=hello1.o

RESMAN_GLUE_OBJS :=hello2.o

$(MODULE_NAME)-objs := $(RESMAN_CORE_OBJS) $(RESMAN_GLUE_OBJS)

obj-m   :=test.o

 

KERNELDIR ?= /lib/modules/$(shell uname -r)/build

PWD       := $(shell pwd)

 

all:

    $(MAKE) -C $(KERNELDIR) M=$(PWD)

 

WARNING::红色的为重要的部分,蓝色的是不能修改的部分,否则不是编译出文件就是编译出的模块不能用,

MODULE_NAME     :该变量指定最终生成的.KO文件的名字,也就是模块的名字。

RESMAN_CORE_OBJS:这个变量指定含有入口函数也就是函数module_init()函数和module_exit()函数的主文件,类似应用程序里面的MAIN.C,

RESMAN_GLUE_OBJS :该变量指定主文件调用的在其他C文件里面实现的函数的C文件对应的.O文件。

obj-m            :指定最终生成模块的名字对应的.O文件,不要漏掉.O否者会有如下错误

make -C /lib/modules/2.6.9-11.EL/build M=/opt/modules

make[1]: Entering directory `/usr/src/kernels/2.6.9-11.EL-i686'

scripts/Makefile.build:194: 目标“/opt/modules/test”不匹配目标模式

  LD      /opt/modules/built-in.o

  CC [M]  /opt/modules/test

gcc: no input files

make[2]: *** [/opt/modules/test] 错误 1

make[1]: *** [_module_/opt/modules] 错误 2

make[1]: Leaving directory `/usr/src/kernels/2.6.9-11.EL-i686'

make: *** [all] 错误 2

 

 

外部函数和变量的使用方法:

函数可以声明也可以不声明,但最好是声明,因为这样逻辑层次关系明显,也方便阅读代码,外部的变量必须声明,否者会提示找不到变量的错误,用extern来声明。

 

 

心得体会:

在开发LINUX的过程中经常遇到源码多,而文档少的问题,对于一些刚刚接触LINUX不久的工程师来说,往往一个小问题也就变成了大问题,如何快速准确的找到问题的正确解决办法并非一日之功,需要大量的经验积累,注意观察和学习,学会查找资料时最好的解决问题的办法,这里推荐一个网站:http//:www.sourceforge.net,这个网站上有很多开放的源码,而且文档也比较全,当自己不会做的时候,当自己找不到直接的资料的时候,去下载别人一个类似的源码的例子是最好的问题的解决方法.

文件:Muilfile-compile.tar.bz2
大小:50KB
下载:下载
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值