天天看點

timer定時器驅動3(s3c2440)

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

           

繼續閱讀