免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: lofeng410

[内核模块] 分享两个很简单的编译问题(1)对ko进行strip -S(2)使用KBUILD_EXTRA_SYMBOLS [复制链接]

论坛徽章:
0
发表于 2010-12-11 12:06 |显示全部楼层
我之前也测试过一个模块导出符号,另一个模块调用。并不存在你说的情况。顶多内核版本不一样。
你可以不用 ...
Godbach 发表于 2010-12-11 09:29



    strip -S并没有什么关系,我之前都是不适用strip -S的,不行

只能这样解决
我们使用是SLES11 SP1,可能是跟内核版本相关的一个东西

现在使用strip -S,是因为有些模块编译出来后太大,最大的快接近10M,从而使得制作的文件系统太大

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 2010-12-27 11:55 |显示全部楼层
看到内核版另外一个帖子也在问类似的问题,我也测试了一下。
用的是 LZ 的两个源码文件,分别为 a.c 和 b.c,编译情况如下:
[root@Godbach module_export]# make
make -C /lib/modules/`uname -r`/build M=/mnt/hgfs/wine/src/km/module_export modules
make[1]: Entering directory `/data/work/linux-2.6.24.4'
  CC [M]  /mnt/hgfs/wine/src/km/module_export/a.o
  CC [M]  /mnt/hgfs/wine/src/km/module_export/b.o
  Building modules, stage 2.
  MODPOST 2 modules
  CC      /mnt/hgfs/wine/src/km/module_export/a.mod.o
  LD [M]  /mnt/hgfs/wine/src/km/module_export/a.ko
  CC      /mnt/hgfs/wine/src/km/module_export/b.mod.o
  LD [M]  /mnt/hgfs/wine/src/km/module_export/b.ko
make[1]: Leaving directory `/data/work/linux-2.6.24.4'


没有 warning。

Makefile 如下:
# To build modules outside of the kernel tree, we run "make"
# in the kernel source tree; the Makefile these then includes this
# Makefile once again.
# This conditional selects whether we are being included from the
# kernel Makefile or not.
ifeq ($(KERNELRELEASE),)

    # Assume the source tree is where the running kernel was built
    # You should set KERNELDIR in the environment if it's elsewhere
    KERNELDIR ?= /lib/modules/`uname -r`/build
    # The current directory is passed to sub-makes as argument
    PWD := $(shell pwd)

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

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

clean:
        rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions

.PHONY: modules modules_install clean

else
    # called from kernel build system: just declare what our modules are
    obj-m += a.o b.o
endif

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 2010-12-27 11:56 |显示全部楼层
本帖最后由 Godbach 于 2010-12-27 12:02 编辑

两个模块加载之后,日志信息如下:
[root@Godbach module_export]# insmod a.ko
[root@Godbach module_export]# insmod b.ko
[root@Godbach module_export]# tail -f /var/log/messages
Dec 27 11:52:17 localhost kernel: a: module license 'unspecified' taints kernel.
Dec 27 11:52:17 localhost kernel: Module 1,Init!
Dec 27 11:52:19 localhost kernel: Module 2,Init!
Dec 27 11:52:19 localhost kernel: In Func: func1...
Dec 27 11:52:19 localhost kernel: In Func: func2...

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 2010-12-27 12:04 |显示全部楼层
13 楼给出的日志信息中,之所以会出现下面这行信息:
Dec 27 11:52:17 localhost kernel: a: module license 'unspecified' taints kernel.

是因为写的内核模块没有明确指出 LISENCE 的问题,两个文件都添加一行
MODULE_LICENSE("GPL");

应该就可以了。

论坛徽章:
1
技术图书徽章
日期:2013-11-12 10:33:00
发表于 2011-12-17 10:31 |显示全部楼层
各位大侠,借地儿问一相关问题。
用楼主的两个文件,mod_a编译到kernel,mod_b编译成模块,编译进行到链接的时候报错,这是为什么啊?

在kernel里面usb目录下的Makefile里面添加编译如下:
obj-y += module_a.o
obj-m += module_b.o

编译的时候mod_a.o和mod_b.o都生成了,链接时提示如下,然后就退出编译了
WARNING: "func1" [drivers/usb/serial/module_b.ko] undefined!
make[2]: *** [__modpost] Error 1
make[1]: *** [modules] Error 2

论坛徽章:
0
发表于 2011-12-17 12:44 |显示全部楼层
nice

论坛徽章:
0
发表于 2013-11-22 14:47 |显示全部楼层
回复 13# Godbach


    版主你好,我在虚拟机中,用ubuntu10.04,用楼主给的两个段代码,放到同一个文件夹下(在虚拟机和win7系统的共享目录下随便找了一个文件夹),明明为a.c和b.c,然后用你的makefile,make之后没问题,生成a.ko和b.ko,然后在当前目录下我执行insmod a.ko,提示错误如下“insmod: error inserting 'a.ko':  -1 Operation not permitted”,
然后我把生成的a.ko放到我的板子上(运行的是安卓系统),用insmod a.ko,也是提示错误如下“insmod: init_module 'a.ko' failed(Exec format error)”,是我make使用的编译工具不行还是我应该把代码放到我的板子源码的目录中?请指教。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 2013-11-22 14:50 |显示全部楼层
回复 17# qiankunhuanying
  1. 也是提示错误如下“insmod: init_module 'a.ko' failed(Exec format error)”,
复制代码
这个提示怎么赶脚是生成的 a.ko 的格式问题呢。你在 Linux 下的文件系统中编译试下。

   

论坛徽章:
0
发表于 2013-11-22 15:50 |显示全部楼层
回复 18# Godbach
我就是在linux下make出来的。我的板子是用跑的安卓系统,有源码。我把a.c b.c makefile放到ko目录下,然后放到了虚拟机里的随便一个目录下,make出两个.ko文件来的。
按理说我编译板子源码的时候也是直接make的,现在生成的a.ko b.ko应该也是可以在板子上用的吧?
可是放到板子里的时候就出刚才那个问题。
我是用adb把a.ko和b.ko push到板子中的;

   

论坛徽章:
0
发表于 2013-11-22 16:03 |显示全部楼层
回复 18# Godbach

我刚才把ko/这个目录放到我的板子的源码根目录/kernel/下,并修改了kernel层的makefile,然后在kernel下make,用adb push到板子中之后,insmod a.ko就ok了。看来之前把ko文件夹随便放一个目录下make出来的结果和用源码make的工具链不匹配?呵呵。。。
谢谢版主。
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

PostgreSQL中国大会,早鸟票抢购!

PostgreSQL中国大会,早鸟票抢购!
2019年11月29~11月30日,由 PostgreSQL中文社区与ITPUB联合主办的第九届《PostgreSQL 中国技术大会》将在北京隆重召开。PostgreSQL 作为功能最强的的开源关系型数据库之一,得到了越来越多企业的推广和运用,也越来越受到广大技术爱好者的欢迎和重视。这将是 PostgreSQL 的又一次交流盛会。




----------------------------------------

点击报名>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP