我们有一个非常简单的do-nothing模块,如图所示:
#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,如图所示:
modprobe sig_mc_hw.ko
但是,当我们给出一个输入命令行参数时,我们得到一个seg错误:
modprobe sig_mc_hw.ko hwmode=0
dmesg表明我们还没有到达init()。我们如何调试?
我们通过升级内核头文件从Fedora Linux版本2.6.34.10升级到2.6.34.15。为了做到这一点还需要哪些其他文件?
我们正在PowerPC上运行该模块。在声明参数时是否需要缓存对齐或任何其他方法?
Thanks!
Sarvani Chadalapaka
HPC Systems Engineer
Signalogic Inc
在编辑时添加:
这是Makefile
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_standard#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