Module 无法加载带有命令行参数的不执行任何操作模块
我们有一个非常简单的无所事事模块,如图所示:Module 无法加载带有命令行参数的不执行任何操作模块,module,linux-kernel,kernel,fedora,kernel-module,Module,Linux Kernel,Kernel,Fedora,Kernel Module,我们有一个非常简单的无所事事模块,如图所示: #include "linux/kernel.h" #include "linux/module.h" static unsigned int hwmode = 0; module_param(hwmode, uint, 0755); static int __init sig_mc_hw_init(void) { printk( " Inside init function, hwmode = %d\n", hw
#include "linux/kernel.h"
#include "linux/module.h"
static unsigned int hwmode = 0;
module_param(hwmode, uint, 0755);
static int __init sig_mc_hw_init(void)
{
printk( " Inside init function, hwmode = %d\n", hwmode);
return 0;
}
static void __exit sig_mc_hw_exit(void)
{
printk( " Inside exit function\n");
}
module_init(sig_mc_hw_init);
module_exit(sig_mc_hw_exit);
modprobe sig_mc_hw.ko
我们可以对其进行modprobe,如图所示:
#include "linux/kernel.h"
#include "linux/module.h"
static unsigned int hwmode = 0;
module_param(hwmode, uint, 0755);
static int __init sig_mc_hw_init(void)
{
printk( " Inside init function, hwmode = %d\n", hwmode);
return 0;
}
static void __exit sig_mc_hw_exit(void)
{
printk( " Inside exit function\n");
}
module_init(sig_mc_hw_init);
module_exit(sig_mc_hw_exit);
modprobe sig_mc_hw.ko
但是,当我们给出一个输入命令行参数时,我们得到一个seg故障:
modprobe sig_mc_hw.ko hwmode=0
dmesg表明我们还没有到达init()。我们如何调试它
通过升级内核头文件,我们从FedoraLinux版本2.6.34.10升级到了2.6.34.15。这样做还需要哪些其他文件
我们正在PowerPC上运行该模块。声明参数时是否需要缓存对齐或任何其他方法
Thanks!
Sarvani Chadalapaka
HPC Systems Engineer
Signalogic Inc
编辑时添加:
这是生成文件
TARGET := sig_mc_hw
EXTRA_CFLAGS := -I/root/adsp2/usr/src/linux/include/linux
KDIR = /root/adsp2/usr/src/linux
PWD = $(shell pwd)
export ARCH=powerpc
export CROSS_COMPILE=ppc_e500v2-target-linux-gnu-
export LINUXROOT=/root/adsp2/usr/src/linux
obj-m += ${TARGET}.o
all:
make -C $(KDIR) ARCH=powerpc CROSS_COMPILE=$(CROSS_COMPILE) M=${PWD} EXTRA_CFLAGS="$(EXTRA_CFLAGS)" modules
uname-a
命令显示以下内容:2.6.34.15-WR4.3.0.0#u标准#1 SMP PREEMPT Tue Jan 20 14:47:40 CST 2015 ppc GNU/Linux
modprobe命令显示:
~# modprobe -v sig_mc_hw.ko
~#
~# modprobe -v sig_mc_hw.ko hwmode=0
Segmentation fault
使用了什么
uname-a
和make
命令(和/或Makefile
使用)?modprobe-v…
有什么显示吗?谢谢你的补充信息。modprobe-v sig_mc_hw
显示了什么?modprobe-v sig_mc_hw hwmode=0显示了什么?很抱歉提出了所有问题,但是内核模块编程非常详细。交叉编译
真的有必要吗?也就是说,您正在构建一个内核模块以在不同的内核/系统上运行?另外,您是否确定额外\u CFLAGS
中的include只包含属于内核的头文件等?Rick,谢谢您的建议。请在我的帖子中找到编辑<代码>交叉编译
是必要的,因为我正在一台服务器上构建驱动程序,并将其加载到没有任何构建工具的ATCA板上。我需要将-I/usr/include
放在额外的\u CFLAGS
中,因为kernel.h和module.h就位于这里。我临时重命名了该位置上的所有其他include文件。您是否在开发服务器上通过交叉编译构建了运行在ATCA板上的内核?我询问的原因是Makefile
中的目录不寻常。