- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
尝试来自 LDD3 的最简单的内核模块无需对带有 BusyBox v1.23.0 的 Beagle Bone 板的自定义构建内核 v4.1.0-rc6 进行任何修改。该模块的代码如下:
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
printk(KERN_ALERT "Hello, world\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye, cruel world\n");
}
module_init(hello_init);
module_exit(hello_exit);
Makefile 是:
ARCH := arm
CROSS_COMPILE := arm-cortex_a8-linux-gnueabi-
obj-m := hello.o
all:
make ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) -C /path/to/linux/source/tree M=$(PWD) modules
clean:
make ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) -C /path/to/linux/source/tree M=$(PWD) clean
该模块正在 rootfs 上正常编译和安装。它也在加载:
$ insmod hello.ko
[ 30.692404] Hello, world
但是在尝试删除它时,我得到:
$ rmmod hello.ko
Segmentation fault
$modprobe -r hello.ko
Segmentation fault
$ lsmod
hello 813 0 - Live 0xbf000000 (O)
内核是在启用模块卸载(常规和强制)支持的情况下编译的。
此问题的可能原因是什么?调查的途径是什么?
更新:
正如评论中所建议的,我已经尝试包括 linux/kernel.h
,定义 MODULE
、LINUX
和 __KERNEL__
符号。为函数添加了 __init
和 __exit
前缀。删除了 static
修饰符。删除了 printk
行。结果一样。 dmesg
仅显示初始问候语。加载和卸载内核模块,如 gpio_keys
或 crypto/ccm
正在 工作,令人惊讶。所以唯一值得怀疑的是模块的编译方式。
更新 2
将内核更新到最新的快照没有帮助。使用不同的优化设置编译模块没有帮助。下一步,我想,我将修改 BusyBox 的 rmmod 以指示问题位置..
最佳答案
看看这些教程:
http://www.tldp.org/HOWTO/Module-HOWTO/x839.html http://www.tldp.org/LDP/lkmpg/2.4/html/x281.htm
尝试添加:
#define MODULE
#define LINUX
#define __KERNEL__
#include <linux/kernel.h> /* Needed for KERN_ALERT */
关于c - "Segmentation fault"当 `rmmod` 或 `modprobe -r`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30781040/
#include #include #include #include #include #include #include #include #include #include
我在网上搜索过,但仍然没有找到答案。我按照http://ubuntuforums.org/showthread.php?t=800251上的指示进行操作。它编译正常,我可以进行 insmod 操作。消
我失败了 rmmod lcd_module.ko错误:删除“lcd_module”:设备或资源忙 lssmod 给我结果:lcd_module [永久] 如何取消这个选项?我想多次加载我的模块以进行测
我写了一个SPI设备驱动程序。由于某种原因,每次我使用 rmmod 时都会出现此错误。 root@am3517-evm:~# rmmod spi2.ko
你好,我是内核开发的新手, 创建了一个简单的程序: #include #include #include #include MODULE_LICENSE("Dual BSD/GPL"); in
我正在使用涉及内核和用户空间代码的大型嵌入式软件(ARM 处理器、嵌入式 linux 2.6.31、busybox)。通常首先加载一个内核模块,守护进程与该模块建立网络链接套接字。 这里的问题是,在终
我正在制作一个每秒进行一次 acpi 调用的 Linux 模块(目前仅持续 20 秒)。我希望它继续每秒进行 acpi 调用,直到它被删除。正如我所拥有的,我将模块放入循环中,如果我确实设置了此循环永
当设备在文件描述符(另一个 C++ 程序)中打开时,我尝试使用 rmmod 删除内核模块。当我关闭 C++ 程序时,我有这个: Unable to handle kernel paging reque
我写了下面的代码来创建一个内核线程: #include #include #include #include #include struct task_struct *task; int data;
我正在为 Linux 中的 block 设备驱动程序编写一个小示例。这个例子不完整,我一步一步来。我用blkdev_register注册了 block 设备,用alloc_disk分配了gendisk
尝试来自 LDD3 的最简单的内核模块无需对带有 BusyBox v1.23.0 的 Beagle Bone 板的自定义构建内核 v4.1.0-rc6 进行任何修改。该模块的代码如下: #includ
我是一名优秀的程序员,十分优秀!