Linux驱动开发错误:module license 'unspecified' taints kernel.

原创 2016年02月22日 00:05:37

前言

今天我要来说说在Linux驱动开发中Makefile编写规则的问题。其实这是驱动开发中的基础性的问题,怪自己基础不够扎实啊,犯了这样的低级错误。写这篇文章让自己巩固一下基础吧,唯有厚积,才能薄发!扎实的编程基础,是一个底层软件工程师应该具备的素质,这样才能年薪百万,迎娶白富美,走上人生巅峰!麻痹,老子又在意淫了,女朋友在哪里都还不知道,说多了都是泪,言归正传!别装逼了!讲正事!

1 Linux驱动Makefile编写规则介绍

1.1 Linux驱动Makefile实例讲解

这里,我们简单的举一个hello驱动的Makefile,来讲解驱动开发中,makefile的编写规则
obj-m := hello.o  
hello-obj := hello_main.o file1.o file2.o
KERNELDR := /usr/src/linux-2.6.26  
PWD := $(shell pwd)  
modules:  
    $(MAKE) -C $(KERNELDR) M=$(PWD) modules  
moduels_install:  
    $(MAKE) -C $(KERNELDR) M=$(PWD) modules_install  
clean:  
    rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions  
(1)obj-m := hello.o
表面驱动模块从目标文件hello.o建立,从目标文件建立后,模块的名字为hello.ko。
  (2) module-objs:如果模块由N个文件组成,那么其他文件就应该描述如下:module-objs:= file1.o file2.o,由于我们的模块叫做hello,在这个例子中应该写为hello-objs 。
(3)KERDIR  := /usr/src/linux-2.6.26
用来定位用于编译驱动的内核源码的目录位置。
(4)-C表示kernel source目录,在/lib/modules/<uname -r'>/build,在那里可以找到kernel的最高lenvel的makefile,M=表示在建立模块target的时候,makefile回归到我  们模块程序的目录。

2 驱动加载错误:module license 'unspecified' taints kernel

当时我的液晶驱动是由多个C文件组成的一个模块,但是由于多个C文件当中的一个xxx.o文件和模块目标文件xxx.o重名了,所以导致这个错误的,当时加载驱动的时候如下错误:
root@Phoenix /root#insmod mxc_elcdif_fb.ko 
mxc_elcdif_fb: module license 'unspecified' taints kernel.
Disabling lock debugging due to kernel taint
mxc_elcdif_fb: Unknown symbol self_pid (err 0)
mxc_elcdif_fb: Unknown symbol gpio_free (err 0)
mxc_elcdif_fb: Unknown symbol drv_version (err 0)
mxc_elcdif_fb: Unknown symbol reset_gpio (err 0)
mxc_elcdif_fb: Unknown symbol disp_init_gpio (err 0)

2.1 解决办法

如果我们有多个c文件,可以在test-objs参数中加入他们的obj文件。接下来就是make了,编译后,生成hello.o文件和hello.ko,还有hello.mod.c及其obj文件,Module.markers Module.sysvers Modules.order 文件。

  我们对多个*.c文件情况做一个说明:我们希望创建一个模块的名字叫做hello,我们有三个*.c文件,分别为hello.c, file1.c和file2.c。这样是有问题的,因为在Makefile中obj-m := hello.o,这是指定模块的名称, hello-objs := file1.o file2.o hello.o,这里是说hello模块包括的的obj文件,如果我们在里面不填写hello.o,那么实际并没有编译hello.c,而是在CC[M] file1.o和file2.o,通过LD[M]得到模块hello.o,如果我们在这里填写了hello.o,那么在obj-m和hello-objs中都含有hello.o,对make来讲会产生循环和混淆,因此也不能这样书写。如果我们由多个C文件来构造一个模块,那么C文件的名字不能和模块名字一样,在这个例子中我们可以将hello.c改名为hello_main.c,在Makefile中obj-m := hello.o,hello-objs = file1.o file2.o hello_main.o。




版权声明:本文为博主原创文章,未经博主允许不得转载。

kernel module编程(一):建立一个小例子

  这是一个很简单的小例子hello world。也是《Linux Device Drivers》一书第二章的书读笔记。需要开发环境  为了使得内核模块可以编译,我们需要安装kernel-devel的...
  • flowingflying
  • flowingflying
  • 2009年07月23日 10:20
  • 12207

module license 'unspecified' taints kernel解决

在驱动时出现module license 'unspecified' taints kernel,要加入MODULE_LICENSE("GPL");就不会出现这个错误。...
  • chenbang110
  • chenbang110
  • 2012年08月16日 14:25
  • 1999

insmod出现loading out-of-tree module taints kernel

你好!这里是风筝的博客,欢迎和我一起交流。 如果本篇博客对您有帮助,或许可以在下方评论给我留个言。 之前把Linux Kernel移植好,就把驱动程序加载进去 结果发现: / # ls...
  • Guet_Kite
  • Guet_Kite
  • 2017年06月13日 14:45
  • 2540

insmod时出现module license 'unspecified' taints kernel

insmod时出现module license 'unspecified' taints kernel
  • zanget
  • zanget
  • 2010年06月16日 02:14
  • 3908

编写模块时的声明(含MODULE_LICENSE等)

编写模块必须先声明下面两句:#include               //这个头文件包含了许多符号与函数的定义,这些符号与函数多与加载模块有关#include                 ...
  • lihaoweiV
  • lihaoweiV
  • 2011年07月13日 10:50
  • 15246

MODULE_LICENSE

1.GPL是GNU General Public License(GNU通用公共许可证);GPL的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用,但不允许修改后和衍生的代码做为闭源...
  • gufuguang
  • gufuguang
  • 2013年08月11日 21:11
  • 1741

字符设备驱动--interrupt

驱动文件/******************************************* 使用linux3.2.81内核 ***********************************...
  • u012041204
  • u012041204
  • 2017年03月22日 10:49
  • 109

Linux内核模块编程与内核模块LICENSE -《详解(第3版)》预读

Linux内核模块编程与内核模块LICENSE——《Linux设备驱动开发详解(第3版)》预读...
  • 21cnbao
  • 21cnbao
  • 2014年07月02日 11:38
  • 12486

Linux Module详解

Module的一个例子: 创建两个文件hello.c文件#include #include MODULE_LICENSE("Dual BSD/GPL");static int hello_ini...
  • hongzg1982
  • hongzg1982
  • 2017年02月02日 16:44
  • 304

MODULE_AUTHOR、MODULE_DESCRIPTION、MODULE_LICENSE宏

在阅读Linux Driver源代码时,我们经常会在文件的结尾处看到诸如:MODULE_AUTHOR、MODULE_DESCRIPTION、MODULE_LICENSE等宏定义,这些宏主要是定义了一些...
  • LinuxEngineer
  • LinuxEngineer
  • 2014年07月30日 15:14
  • 2507
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux驱动开发错误:module license 'unspecified' taints kernel.
举报原因:
原因补充:

(最多只允许输入30个字)