test.c
/*該函數的功能為實作sdelay函數,自己編寫延時函數*/
#include <linux/module.h>
#include <linux/irq.h>
#include <linux/sched.h>
#include <linux/jiffies.h> //包含的頭檔案
#include <linux/delay.h>
void sdelay(unsigned long sec)
{
unsigned long time = jiffies + sec * HZ; //計算出來你要延時多少時間 sec*HZ計算出來你要經過多少時鐘滴答
while(time_is_after_jiffies(time)) //該函數的作用為如果時鐘滴答不等于time,那麼就一直循環于此
;
}
static int __init test_init(void)
{
/*local_irq_disable();*/
printk("jiffies = %lu\n", jiffies); //通過列印此變量,可以知道目前自開機以來經過了多少個時鐘滴答
sdelay(2);
/*mdelay(2000);*/
/*ssleep(2);*/
printk("jiffies = %lu\n", jiffies); //可以看到現在的時鐘滴答确實是延時2s之後的值 +400
/*local_irq_enable();*/
return 0;
}
static void __exit test_exit(void)
{
}
module_init(test_init);
module_exit(test_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("lzc");
Makefile
# Makefile 2.6
ifneq ($(KERNELRELEASE),)
obj-m := test.o
else
#KDIR := /lib/modules/2.6.18-53.el5/build
KDIR := /home/mao/work0630/linux-2.6.32.2
all:
make -C $(KDIR) M=$(PWD) modules
cp *.ko /home/mao/nfsroot
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers
endif