如何在 C/C++ 程序中加载内核模块

How to load kernel modules in C/C++ program

我正在使用 ds18b20 温度传感器,我正在努力将一些 python 代码转换为 C++,以帮助更好地学习这门语言。我 运行 遇到一个问题,我需要加载 w1-gpio 和 w1-therm 模块。我在堆栈溢出中发现了很多提到应该使用 init_module 的东西,并且在同一个线程中其他人提到在 exec() 旁边使用 fork()。经过大量谷歌搜索和阅读手册页后,我找不到任何有关如何完成这些任务的示例。有人可以指点我 and/or 举例说明我将如何使用这些方法中的任何一种加载这两个模块吗?或者提供一个不涉及系统的替代方案("modprobe w1-gpio")?

uname -a

产生:

Linux raspberrypi 4.1.13-v7+ #826 SMP PREEMPT Fri Nov 13 20:19:03 GMT 2015 armv7l GNU/Linux

我仍然认为 system("modprobe ...") 是针对这种情况的完美解决方案。不这样做只会给自己带来额外的问题。

如果您确切知道要加载哪些内核模块,则使用 init_module 或其兄弟 finit_module。但是您需要以正确的顺序加载模块。当然,需要知道保存文件的所有相关位置、它们需要什么参数等。

并且在您自己清理后不要忘记颠倒 delete_module 的顺序。

modprobe和朋友的来源可以在这里找到: https://github.com/vadmium/module-init-tools

insmod 很短,但是 modproble 代码超过 2300 行。