免费注册 查看新帖 |

Chinaunix

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

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

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

论坛徽章:
0
2 [报告]
发表于 2017-01-23 11:08 |显示全部楼层
.............................

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

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

论坛徽章:
0
4 [报告]
发表于 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”........

论坛徽章:
0
5 [报告]
发表于 2017-01-25 12:02 |显示全部楼层
Godbach 发表于 2017-01-25 11:53
回复 9# kallytin

kernel 发展到现在,大量的功能依赖于动态加载。所以,我估计只是简单地把选项去掉是 ...

你所指的所有选项都选y,是指什么?是指除了“Enable loadable module support”这个选项(这个选项“不选择”)外,其他所有的选项都选 y,是这个意思吗?你的想法是将所有的内核模块都编译进内核(内核是否会很大)?

另,我的目的很简单,我就是想搞清楚linux内核模块动态加载到底是怎样的(很多时候碰到某某函数是需要在内核态下运行,或某些信息并不在用户空间,而又不想写系统调用.....).....

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP