免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6822 | 回复: 12
打印 上一主题 下一主题

[内核模块] 如何获知linux是否支持内核模块动态加载 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2017-01-22 19:39 |只看该作者 |倒序浏览
如何获知linux是否支持内核模块动态加载?如果不支持内核模块动态加载,会出现什么样的错误提示?

论坛徽章:
0
2 [报告]
发表于 2017-01-23 11:08 |只看该作者
.............................

论坛徽章:
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
3 [报告]
发表于 2017-01-24 15:23 |只看该作者
回复 1# kallytin
这个问题问得好。你先看下 Linux 内核的编译选项中有木有禁用动态加载模块的配置吧。

论坛徽章:
0
4 [报告]
发表于 2017-01-24 18:51 |只看该作者
Godbach 发表于 2017-01-24 15:23
回复 1# kallytin
这个问题问得好。你先看下 Linux 内核的编译选项中有木有禁用动态加载模块的配置吧。
...

你是指在 “/boot/config-版本号-generic”文件里看吗?

论坛徽章:
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
5 [报告]
发表于 2017-01-24 23:35 |只看该作者
kallytin 发表于 2017-01-24 18:51
你是指在 “/boot/config-版本号-generic”文件里看吗?

都可以。或者你在内核源代码下,make menuconfig 看下。

论坛徽章:
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
6 [报告]
发表于 2017-01-24 23:38 |只看该作者
回复 4# kallytin
我看了下编译内核的选项:

  │ Symbol: MODULES [=y]                                                                                                 │
  │ Prompt: Enable loadable module support                                                                               │
  │   Defined at init/Kconfig:1131

这个选项应该是控制内核是否可以加载模块的。

论坛徽章:
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
7 [报告]
发表于 2017-01-24 23:44 |只看该作者
回复 4# kallytin

  │ │                      --- Enable loadable module support                                                          │ │
  │ │                     
  •    Forced module loading                                                                 │ │
      │ │                     
  •    Module unloading                                                                      │ │
      │ │                      [ ]     Forced module unloading                                                             │ │
      │ │                     
  •    Module versioning support                                                             │ │
      │ │                     
  •    Source checksum for all modules

    这是整个内核编译选项,关于控制 moudle 动态加载的
  • 论坛徽章:
    1
    15-16赛季CBA联赛之新疆
日期:2017-03-09 12:33:45
    8 [报告]
    发表于 2017-01-25 11:16 |只看该作者
    回复 1# kallytin

    其实还有一种方法,就是调用 /proc/kallsysms 中查找是不是有 sys_init_module函数,如果有这个函数,就表示当前的系统是支持module加载了。如果没有就不支持module
    但这个文件的查看是要有超级用户权限的.

    论坛徽章:
    0
    9 [报告]
    发表于 2017-01-25 11:42 |只看该作者
    本帖最后由 kallytin 于 2017-01-25 11:54 编辑
    Godbach 发表于 2017-01-24 23:44
    回复 4# kallytin

      │ │                      --- Enable loadable module support                 ...

    谢谢你的回复。

    我重新查看了我机器上的 /boot/config-版本号-generic,里面信息如下 :
    1. 信息1:

    2. ............................
    3. CONFIG_MODULES=y
    4. # CONFIG_MODULE_FORCE_LOAD is not set
    5. CONFIG_MODULE_UNLOAD=y
    6. # CONFIG_MODULE_FORCE_UNLOAD is not set
    7. ............................
    复制代码

    我自己在 www.kernel.org 上下载了另一个内核代码,然后编译,在make menuconfig 的时候,选上了 force module loading、module unloading、force module unloading 这3项,在内核编译成功后(make 命令),我打开里面的 .config,里面的信息如下:
    1. 信息2:

    2. ............................
    3. CONFIG_MODULES=y
    4. CONFIG_MODULE_FORCE_LOAD=y
    5. CONFIG_MODULE_UNLOAD=y
    6. CONFIG_MODULE_FORCE_UNLOAD=y
    7. ............................
    复制代码

    可见,信息1 和 信息2 的区别只是 CONFIG_MODULE_FORCE_LOAD 和 CONFIG_MODULE_FORCE_UNLOAD 的设置 。

    这让我感到很疑惑,因为我之前得到的信息是CONFIG_MODULE_FORCE_LOAD 和 CONFIG_MODULE_FORCE_UNLOAD都要设置了,才能实现内核模块动态加载,即如果我的系统可以实现内核模块动态加载,则他的/boot/config-版本号-generic 里面的信息就该是 “信息2”,而不是“信息1”。

    事实上,目前我的系统(/boot/config-版本号-generic 为“信息1”)是可以支持 内核模块动态加载的,即我写一个简单的 helloworld.ko,我是可以做:
    1、在命令行使用 insmod helloworld.ko进行加载
    2、在命令行使用 dmesg是可以查看其输出信息
    3、并且可以使用 rmmod helloworld 对该模块进行动态卸载的

    问题:
    1、是否我对“内核模块动态加载”的概念(简单的,我认为,在命令行可以使用 insmod、rmmod进行内核模块的加载、卸载,则可以称为“支持”内核模块动态加载)理解错了?

    2、我目前的系统是ubuntu16.04,内核为4.4,我当初是使用缺省安装的(安装的时候没有任何内核配置选择的,就是合适所有人的那种傻瓜式的ubuntu安装界面),那是否表明目前的linux内核是“缺省支持”内核模块动态加载?之所以有这个问题,是因为我之前baidu搜索时,发现有一个说法是 linux内核2.6.19之后,是“缺省不支持”内核模块动态加载.......

    3、我另外做了一个实验,再次在www.kernel.org 上下载了一个内核代码,这次make menuconfig的时候,我是连“Enable loadable module support”都“不选择”,即:
    1. 信息3:

    2. # CONFIG_MODULES is not set
    复制代码
    这个应该是“彻底的”不支持内核模块动态加载的,我编译通过后(make),当我进行 make modules 的时候,提示出错:
    1. The present kernel configuration has modules disabled.
    2.                 Type 'make config' and enable loadable module support.
    3.                 Then build a kernel with module support enabled.

    4.                 Makefile:1154: recipe for target 'modules' failed
    5.                 make: *** [modules] Error 1
    复制代码
    当我跳过make modules 和 make modules_install这2步,直接执行  mkinitramfs,提示出错:
    1. > sudo mkinitramfs 4.4.0-un-support-mod-dy-load -o /boot/img-4.4.0-un-support-mod-dy-load

    2. WARNING: missing /lib/modules/4.4.0-un-support-mod-dy-load
    3. Ensure all necessary drivers are built into the linux image!
    4. depmod: ERROR: could not open directory /lib/modules/4.4.0-un-support-mod-dy-load: No such file or directory
    5. depmod: FATAL: could not search modules: No such file or directory
    6. depmod: WARNING: could not open /var/tmp/mkinitramfs_fnKZxj/lib/modules/4.4.0-un-support-mod-dy-load/modules.order: No such file or directory
    7. depmod: WARNING: could not open /var/tmp/mkinitramfs_fnKZxj/lib/modules/4.4.0-un-support-mod-dy-load/modules.builtin: No such file or directory
    复制代码
    其实mkinitramfs的错误是源自 make modules_install 没成功,而make modules_install 没成功是因为 make modules 失败,而 make modules 失败是因为 make menuconfig 的时候“没有”选择 Enable loadable module support”........

    论坛徽章:
    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
    10 [报告]
    发表于 2017-01-25 11:53 |只看该作者
    回复 9# kallytin

    kernel 发展到现在,大量的功能依赖于动态加载。所以,我估计只是简单地把选项去掉是不够的。你可以尝试下把所有编译选项都是 y 的方式,直接编译到内核试试。

    还有,你研究该问题的目的是什么?

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

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

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP