文档章节

单独编译某个内核模块

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

码上生花,ECharts 作品展示赛正式启动!>>>

对开发内核驱动和文件系统的人来说,经常需要编译某个内核模块。 当然从编译角度,有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/`uname -r`/build M=`pwd` modules

© 著作权归作者所有

认真即可
粉丝 5
博文 108
码字总数 48423
作品 0
朝阳
程序员
私信 提问
加载中
请先登录后再评论。
Linux Lab 推出十大精彩使用案例

Linux Lab 是一款即时 Linux 实验环境,但是其作用远不止于此!本文从使用案例的角度介绍了另外 10 大难以抗拒 Linux Lab 的理由! Linux Lab 是一套用于 Linux 内核学习、开发和测试的即时实...

tinylab
05/18
3.6K
4
字符设备驱动基础篇1——简单的驱动源码分析

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

oqqHuTu12345678
2017/07/19
0
0
Linux学习记录--内核|内核模块编译

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

tiankefeng0520
2014/04/09
0
0
怎么样把内核代码中已有的模块提取出来单独make

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

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

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

nothingfinal
2012/05/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

自媒体文章原创度检测,可以试一下蚁小二工具

自媒体文章原创度检测,可以试一下蚁小二工具,现在的自媒体人对文章原创度检测这一块还是挺看重的,因为文章的原创度不仅仅和推荐量有关还和质量分值有关,这个时候就可以用到蚁小二工具。 ...

一键分发工具-蚁小二
18分钟前
15
0
Cannot import Sklearn from sklearn.externals.joblib

使用: from sklearn.externals import joblib 报错:Cannot import Sklearn from sklearn.externals.joblib 解决方法: python -m pip install sklearn --upgrade python -m pip install jobli......

hc321
18分钟前
8
0
编程语言那么多,为何建议学习python呢?

  随着互联网技术的发展,大家对于编程的认识越来越系统化了,现在学习编程的年龄越来越小,而编程也成为了我们学习的重要知识。   当然,学习编程知识不分早晚的,也有很多26岁左右才转...

osc_ix000whh
19分钟前
5
0
kubectl的使用

https://kubernetes.io/docs/reference/kubectl/overview/

osc_n1fa9m3z
20分钟前
10
0
2020上海锁博会

上海锁博会将于2020年12月22日至24日在上海新国际博览中心举办“第六届上海国际锁博会”,上海锁博会本来就致力于展现中国作为亚洲最活跃、最具发展潜力的锁具市场之一的独特魅力。 锁博会坚...

osc_uvparld2
22分钟前
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部