#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/interrupt.h>
#include <linux/jiffies.h>
static void hello_printk(struct softirq_action *h)
{
int i = 0;
printk(KERN_ERR "softirq hello,world!!\n");
while(i++ < 1000)
printk(KERN_ERR "haha jiffies = %lu \n" , jiffies);
}
static int hello_init(void)
{
open_softirq(HI_SOFTIRQ, hello_printk);
raise_softirq(HI_SOFTIRQ);
return 0;
}
static void hello_exit(void)
{
raise_softirq_irqoff(HI_SOFTIRQ);
printk(KERN_ERR "softirq bye!\n");
}
module_init(hello_init);
module_exit(hello_exit);
Makefile:
#obj-m += time.o obj-m += softirq.o KERNEL_DIR=/home/jimmychen/work/git/ws/fs3000/trunk/linux-3.10.1/ #KERNEL_DIR=/lib/modules/2.6.32-5-amd64/build/ all: $(MAKE) -C $(KERNEL_DIR) M=$(PWD) modules clean: $(MAKE) -C $(KERNEL_DIR) M=$(PWD) clean
在linux-3.10.1/kernel/softirq.c
加上
EXPORT_SYMBOL(raise_softirq);
EXPORT_SYMBOL(raise_softirq_irqoff);
EXPORT_SYMBOL(open_softirq);
不然會有下列錯誤
WARNING: "raise_softirq_irqoff" [/home/jimmychen/work/git/ws/trunk/time/softirq.ko] undefined!
WARNING: "raise_softirq" [/home/jimmychen/work/git/ws/trunk/time/softirq.ko] undefined!
WARNING: "open_softirq" [/home/jimmychen/work/git/ws/trunk/time/softirq.ko] undefined!
沒有留言:
張貼留言