文档章节

单独编译某个内核模块

认真即可
 认真即可
发布于 2015/12/31 14:21
字数 572
阅读 482
收藏 3

对开发内核驱动和文件系统的人来说,经常需要编译某个内核模块。 当然从编译角度,有built-in kernel module和external kernel module之分。 怎么编译一个外部内核模块,google一下“hello world kernel module Makefile”吧。 这里我说下编译内核自带模块的坑... 我用的是SUSE Linux

  1. 安装源代码包和开发包

    #zypper in kernel-source kernel-devel

    开发包里面放的是头文件和Makefile文件,用RPM命令来查看下:

    # rpm -qa|grep kernel-devel
    kernel-devel-4.1.27-27.1.noarch
    # rpm -ql kernel-devel-4.1.27-24.1.noarch|more
    /usr/share/doc/packages/kernel-source-4.1.27-24
    /usr/share/doc/packages/kernel-source-4.1.27-24/README.SUSE
    /usr/share/doc/packages/kernel-source-4.1.27-24/config-options.changes.txt
    /usr/src/linux
    /usr/src/linux-4.1.27-24
    /usr/src/linux-4.1.27-24/Documentation
    /usr/src/linux-4.1.27-24/Documentation/DocBook
    /usr/src/linux-4.1.27-24/Documentation/DocBook/Makefile
    ....

     

  2. 重要参考文件

#ls -l /usr/src/linux/README.SUSE
lrwxrwxrwx 1 root root 61 Dec 31 10:41 /usr/src/linux/README.SUSE -> ../../share/doc/packages/kernel-source-3.12.49-11/README.SUSE

这个文档介绍编译内核以及模块所需的软件包,概念,方法和步骤。 基本上也适用于其他Linux发型版。

贴出相关的一段:

The second method involves the following steps:

  (1)  Install the kernel-devel package.

  (2)  Install the kernel-$FLAVOR-devel package. This is necessary for
       symbol version information (CONFIG_MODVERSIONS).

  (3)  Compile the module(s) by changing into the module source directory
       and typing ``make -C /usr/src/linux-obj/$ARCH/$FLAVOR M=$(pwd)''.
       Substitute $ARCH and $FLAVOR with the architecture and flavor
       for which to build the module(s).

       If the installed kernel sources match the running kernel, you
       can build modules for the running kernel by using the path
       /lib/modules/$(uname -r)/build as the -C option in the above
       command. (build is a symlink to /usr/src/linux-obj/$ARCH/$FLAVOR).

  (4)  Install the module(s) with
       ``make -C /usr/src/linux-obj/$ARCH/$FLAVOR M=$(pwd) modules_install''.

   3.坑

但是按照上面的步骤总是编译不出来.ko内核模块, 原因是当前的发行版默认没有打开ocfs2模块编译选项:

eric1211:/usr/src/linux/fs/ocfs2 # make -C /lib/modules/3.12.49-11-default/build M=`pwd` modules
make: Entering directory '/usr/src/linux-3.12.49-11-obj/x86_64/default'
make[1]: Entering directory `/usr/src/linux-3.12.49-11-obj/x86_64/default'
  Building modules, stage 2.
  MODPOST 0 modules
make: Leaving directory '/usr/src/linux-3.12.49-11-obj/x86_64/default'

原因是配置文件默认没有选择OCFS2,所以要手动make menuconfig,把ocfs2选上, 再试就可以了。具体步骤:

  1. cd /usr/src/linux

  2. make menuconfig 选择ocfs2

  3. cd /usr/src/linux/fs/ocfs2

  4. make -C /lib/modules/3.12.49-11-default/build M=`pwd` modules

© 著作权归作者所有

共有 人打赏支持
认真即可
粉丝 5
博文 86
码字总数 46278
作品 0
朝阳
程序员
Linux学习记录--内核|内核模块编译

内核|内核模块编译 (对于内核的知识觉得了解不够,等学习完LFS再来详细整理下这方面的知识) 内核:系统上面的一个文件,这个文件包含了驱动主机各项硬件的检测程序和驱动模块。 计算机真正...

tiankefeng0520
2014/04/09
0
0
字符设备驱动基础篇1——简单的驱动源码分析

以下内容源于朱有鹏嵌入式课程的学习,如有侵权,请告知删除。 参考资料:http://www.cnblogs.com/biaohc/p/6575074.html module_test.c代码 snippetid="2488637" snippetfilename="blog201...

oqqHuTu12345678
2017/07/19
0
0
怎么样把内核代码中已有的模块提取出来单独make

RT 比方说,我现在需要把libata/libsas模块的源码从内核中拿出来,然后在编译内核的时候不编译此模块。 并将内核中提取出来的libata/libsas源码单独作为模块手动编译,再加载。 做过很多尝试...

enull
2013/01/04
466
2
浅谈Linux内核动态模块的编译(转)

作者:冯建,华清远见嵌入式学院讲师。 Linux内核给开发者提供了灵活的模块加载方式,开发者可根据需要适当地选择静态或动态的方式将模块加入内核当中。静态加载的时候我们只需将驱动文件添加...

nothingfinal
2012/05/16
0
0
linux内核模块的版本检查机制

linux内核对插入的内核模块进行严格的版本检查,即使一个小版本号不一致也会导致加载的不成功,这完全是为了内核本身运行安全。由于linux内核的发布是基于版本号的,而所有的内核模块的开发必...

晨曦之光
2012/04/10
941
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Go语言_通神之路(2)

1、包 每个Go程序都是由包构成,从main包开始运行,就是我上一篇讲到的,都是从main函数开始执行,但是必须在main包下面! package mainimport ( "fmt" "math/rand")func ...

木九天
昨天
2
0
51.php-fpm的pool 慢日志 open_basedir 进程管理

12.21 php-fpm的pool 12.22 php-fpm慢执行日志(测试时报错) 12.23 open_basedir 12.24 php-fpm进程管理 12.21 php-fpm的pool: php-fpm里的pool也叫池子,咱们之前加入过www的配置,这个w...

王鑫linux
昨天
0
0
java内存模型概述

1、Java虚拟机运行时数据分区图 程序计数器:线程私有,是一块较小的内存空间,它是当前线程所执行的字节码文件的行号指示器 java虚拟机栈:线程私有,其生命周期与线程相同,这也就是我们平...

京一
昨天
0
0
shell学习之test语法

因为if-then语句不能测试退出状态码之外的条件,所以提供了test, 如果test命令中列出的条件成立,test命令就会退出并返回退出状态码0;如果条件不成立,test命令就会退出并返回非零的退出状态...

woshixin
昨天
0
0
openJDK之如何下载各个版本的openJDK源码

如果我们需要阅读openJDK的源码,那么需要下载,那么该去哪下载呢? 现在JDK已经发展到版本10了,11已经处于计划中,如果需要特定版本的openJDK,它们的下载链接在哪呢? 1.openJDK的项目 链接...

汉斯-冯-拉特
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部