我正在尝试在启动时加载内核模块.
如果我跑insmod /path/to/module.ko,它运作正常.但每次重新启动时都必须重复此操作.
如果我跑modprobe /path/to/module.ko,它找不到模块.我知道modprobe使用配置文件,但即使将/path/to/module.ko添加到/ etc/modules之后我也无法加载模块.
什么是正确的配置?
我很好奇有没有办法确定是否加载/安装了特定的模块.
$ lsmod列出所有模块(加载设备驱动程序).
有没有办法检查或在轮询模块名称时返回true/false布尔输出的命令.例如.如果keyboard.o存在则返回true,否则返回false.我需要这个提示来完成我的驱动程序自动刷新程序.
PS:试过modinfo.我在我的测试DUT中使用busybox客户端,那么除了modinfo之外你能给出一些替代方案吗?
我在Ubuntu工作.我正在尝试制作两个使用彼此功能的内核模块.我的问题是我正确编译了模块,但是其中一个符号没有得到解决.
为简单起见,我们将这些模块称为m1和m2.
m2是出口功能void func_m2(void).在m1调用此函数.两个模块都正确编译.
在它全部编译之后,我需要先加载m2模块(因为它有导出的func_m2函数)和之后的m1模块.所以,让我们做到:
volodymyr@sv1:~/development/kmodules/m2$ sudo insmod ./m2.ko
Run Code Online (Sandbox Code Playgroud)
现在,让我们m1尝试使用的加载模块func_m2:
volodymyr@sv1:~/development/kmodules/m1$ sudo insmod ./m1.ko
insmod: error inserting './m1.ko': -1 Unknown symbol in module
Run Code Online (Sandbox Code Playgroud)
以下是我在日志中看到的内容:
volodymyr@sv1:~/development/kmodules/m1$ dmesg | tail
[ 3938.166616] Loading m2 module ...
[ 3963.078055] m1: no symbol version for func_m2
[ 3963.078059] m1: Unknown symbol func_m2
Run Code Online (Sandbox Code Playgroud)
因此,似乎func_m2没有解决对符号的引用.有趣.让我们检查它是否存在于符号表中:
volodymyr@sv1:~/development/kmodules$ cat /proc/kallsyms | grep 'func_m2'
ffffffffa00530d0 r __ksymtab_func_m2 [m2]
ffffffffa00530e8 …Run Code Online (Sandbox Code Playgroud) 我正在尝试在Raspberry Pi上使用C和Bash 创建一个hello_world内核模块.
我成功使用make命令生成hello_world.ko文件.
但是,当我尝试使用该insmod hello_world.ko命令时,我收到以下错误:
错误:无法插入模块hello_world.ko:模块格式无效
我尝试按照Raspberry Pi论坛上描述的步骤进行操作,但我没有太多运气.
我认为这可能是由于我的内核和Linux标头之间的版本不匹配.这些标题在此过程中起什么作用?如何获得与我的内核匹配的版本?
我正在编写一个Linux块设备驱动程序,我有很多初始化工作.但是,当我最终打电话时add_disk(),模块会挂起insmod.
有问题的片段在这里:
set_capacity(gendisk, dev->nsectors);
add_disk(gendisk);
//this line is never reached
Run Code Online (Sandbox Code Playgroud) 我正在编写一个可加载的内核模块并尝试测试它.插入后,我试图使用rmmod xxx命令删除它,但我得到一个错误说module xxx is in use,模块卡住,我无法删除它.知道如何在不重启整个机器的情况下移除模块吗?(linux Kernel v.3.5.0)
注意:rmmod -f打印Error: device or resource busy
我有一个非常大的驱动程序模块,我正在尝试编译最近的Linux内核(3.4.4).我可以insmod使用2.6.27.25内核成功编译和使用相同的模块.GCC版本也不同,4.7.0对4.3.0.请注意,此模块非常复杂,我不能简单地浏览所有代码和所有makefile.
当"插入"模块时,我得到一个Cannot allocate memory带有以下痕迹:
vmap allocation for size 30248960 failed: use vmalloc=<size> to increase size.
vmalloc: allocation failure: 30243566 bytes
insmod: page allocation failure: order:0, mode:0xd2
Pid: 5840, comm: insmod Tainted: G O 3.4.4-5.fc17.i686 #1
Call Trace:
[<c092702a>] ? printk+0x2d/0x2f
[<c04eff8d>] warn_alloc_failed+0xad/0xf0
[<c05178d9>] __vmalloc_node_range+0x169/0x1d0
[<c0517994>] __vmalloc_node+0x54/0x60
[<c0490825>] ? sys_init_module+0x65/0x1d80
[<c0517a60>] vmalloc+0x30/0x40
[<c0490825>] ? sys_init_module+0x65/0x1d80
[<c0490825>] sys_init_module+0x65/0x1d80
[<c050cda6>] ? handle_mm_fault+0xf6/0x1d0
[<c0932b30>] ? spurious_fault+0xae/0xae
[<c0932ce7>] ? do_page_fault+0x1b7/0x450
[<c093665f>] sysenter_do_call+0x12/0x28
-- clip --
Run Code Online (Sandbox Code Playgroud)
显而易见的答案似乎是模块分配了太多内存,但是:
因此,我怀疑新内核的问题与有限的内存没有直接关系.
新内核抱怨 …
我正在尝试通过以下方式启动驱动程序模块
insmod path/to/module.ko
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
> init_module 'path/to/module.ko' failed <File exists>
Run Code Online (Sandbox Code Playgroud)
我试图了解这是否意味着该模块已经启动并正在运行,还是完全无法初始化。
我正在寻找 的含义<File exists>,这是否意味着它已经初始化?
我从a.ko(内核模块)导出函数foo()和foo1(),foo1()接受输入参数,一个函数指针.我从b.ko调用foo1(),并传递foo()作为输入参数.
我看到b.ko(未知符号foo)的insmod失败,即使a.ko已经在b.ko之前被破坏了.
任何解释/解决方案?
谢谢,幸运
为什么这个内核模块在加载它时什么都不做?
#include <linux/init.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#define DEVICE_NAME "hello-1.00.a"
#define DRIVER_NAME "hello"
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(struct platform_device *pdev){
printk(KERN_ALERT "Hello, world\n");
return 0;
}
static int hello_exit(struct platform_device *pdev){
printk(KERN_ALERT "Goodbye, cruel world\n");
return 0;
}
static const struct of_device_id myled_of_match[] =
{
{.compatible = DEVICE_NAME},
{},
};
MODULE_DEVICE_TABLE(of, myled_of_match);
static struct platform_driver hello_driver =
{
.driver = {
.name = DRIVER_NAME,
.owner = THIS_MODULE,
.of_match_table = myled_of_match
},
.probe = hello_init,
.remove = hello_exit
};
module_platform_driver(hello_driver);
Run Code Online (Sandbox Code Playgroud)
它必须打印 …
insmod kernel-module linux-device-driver linux-kernel device-tree
我正在尝试使用depmod和modprobe实用程序插入内核模块以解决任何依赖关系。当我构建模块时,它会抛出“警告:modules_install:缺少‘System.map’文件。跳过depmod。 ”
后来当我尝试执行modprobe它时会抛出一个错误,说
“modprobe:致命:在目录/lib/modules/4.19.58-v7+中找不到模块i2c_eeprom_client.ko”
下面是我正在使用的make文件:
obj-m += i2c_eeprom_client.o
KDIR = /lib/modules/$(shell uname -r)/build
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
make -C $(KDIR) M=$(PWD) modules_install
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
Run Code Online (Sandbox Code Playgroud)
以下是构建的输出:
make -C /lib/modules/4.19.58-v7+/build M=/home/pi/work/eeprom modules
make[1]: Entering directory '/usr/src/linux-headers-4.19.58-v7+'
Building modules, stage 2.
MODPOST 1 modules
make[1]: Leaving directory '/usr/src/linux-headers-4.19.58-v7+'
make -C /lib/modules/4.19.58-v7+/build M=/home/pi/work/eeprom
modules_install
make[1]: Entering directory '/usr/src/linux-headers-4.19.58-v7+'
INSTALL /home/pi/work/eeprom/i2c_eeprom_client.ko
DEPMOD 4.19.58-v7+
Warning: modules_install: missing 'System.map' file. …Run Code Online (Sandbox Code Playgroud) insmod ×11
linux-kernel ×5
c ×4
kernel ×3
linux ×3
android ×1
device-tree ×1
makefile ×1
module ×1
raspberry-pi ×1
unix ×1
vmalloc ×1