#include <linux/init.h>
#include <linux/module.h>
static int __init hello_init(void)
{
printk(KERN_ALERT "Hello world! %s, %d\n", __FILE__, __LINE__);
return 0;
}
static void __exit hello_exit(void)
{
printk(KERN_ALERT "Hello world! %s, %d\n", __FILE__, __LINE__);
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Mikcy Liu");
MODULE_DESCRIPTION("A simple Module");
MODULE_ALIAS("a simple module");
#define KERN_EMERG "<0>" /* system is unusable */ #define KERN_ALERT "<1>" /* action must be taken immediately */ #define KERN_CRIT "<2>" /* critical conditions */ #define KERN_ERR "<3>" /* error conditions */ #define KERN_WARNING "<4>" /* warning conditions */ #define KERN_NOTICE "<5>" /* normal but significant condition */ #define KERN_INFO "<6>" /* informational */ #define KERN_DEBUG "<7>" /* debug-level messages */
/* printk's without a loglevel use this.. */ #define DEFAULT_MESSAGE_LOGLEVEL 4 /* KERN_WARNING */ #define DEFAULT_CONSOLE_LOGLEVEL 7 /* anything MORE serious than KERN_DEBUG */
obj-m := hello.o
KERNEL_BUILD := /lib/modules/$(shell uname -r)/build
all:
make -C $(KERNEL_BUILD) M=$(shell pwd) modules
clean:
-rm -rf *.o *.ko *.mod.c .*.cmd *.order *.symvers .tmpversions
KERNELBUILD :=/lib/modules/$(shell uname -r)/
insmod hello.ko
lsmod | grep hello
filename: hello.ko alias: a simple module description: A simple Module author: Mikcy Liu license: GPL srcversion: 875C95631F4F336BBD4216C depends: vermagic: 3.5.0-17-generic SMP mod_unload modversions 686
rmmod hello
static int __init initialization_function(void) {
//初始化代码
}
module_init(initialization_function);
static void __exit cleanup_function(void) {
//释放代码
}
module_exit(cleanup_function);
#include <linux/jiffies.h> #define time_after(unknown, known) // unknow > known #define time_before(unknown, known) // unknow < known #define time_after_eq(unknown, known) // unknow >= known #define time_before_eq(unknown, known) // unknow <= known
unsigned long timeout = jiffies + HZ/2; /* 0.5秒后超时 */
...
if(time_before(jiffies, timeout)){
/* 没有超时,很好 */
}else{
/* 超时了,发生错误 */
u64 j2;
j2 = get_jiffies_64();
struct timeval {
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* microseconds */
};
struct timespec {
time_t tv_sec; /* seconds */
long tv_nsec; /* nanoseconds */
};
#include <linux/time.h>
void do_gettimeofday(struct timeval *tv);
#include <linux/time.h>
struct timespec current_kernel_time(void);
#include <linux/delay.h> /* 实际在<asm/delay.h> */ void ndelay(unsigned long nsecs); /*延迟纳秒 */ void udelay(unsigned long usecs); /*延迟微秒 */ void mdelay(unsigned long msecs); /*延迟毫秒 */
while(time_before(jiffies, j1))
schedule();
#include <linux/sched.h>
signed long schedule_timeout(signed long timeout);
set_current_state(TASK_INTERRUPTIBLE); schedule_timeout(2*HZ); /* 睡2秒 */
#include <linux/init.h>
#include <linux/module.h>
#include <linux/time.h>
#include <linux/sched.h>
#include <linux/delay.h>
static int __init test_init(void)
{
set_current_state(TASK_INTERRUPTIBLE);
schedule_timeout(5 * HZ);
printk(KERN_INFO "Hello Micky\n");
return 0;
}
static void __exit test_exit(void)
{
}
module_init(test_init);
module_exit(test_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Micky Liu");
MODULE_DESCRIPTION("Test for delay");
#include <linux/wait.h>
struct __wait_queue_head {
spinlock_t lock;
struct list_head task_list;
};
typedef struct __wait_queue_head wait_queue_head_t;
DECLARE_WAIT_QUEUE_HEAD(name);
wait_queue_head_t my_queue;
init_waitqueue_head(&my_queue);
#include <linux/wait.h>
long wait_event_timeout(wait_queue_head_t q,condition, long timeout);
long wait_event_interruptible_timeout(wait_queue_head_t q, condition, long timeout);
wait_queue_head_t wait;
init_waitqueue_head(&wait);
wait_event_interruptible_timeout(wait, 0, 2*HZ);
/*当前进程在等待队列wait中睡2秒 */
struct timer_list{
struct list_head entry; /* 定时器链表 */
unsigned long expires; /* 以jiffies为单位的定时值 */
spinlock_t lock;
void(*function)(unsigned long); /* 定时器处理函数 */
unsigned long data; /* 传给定时器处理函数的参数 */
}
struct timer_list my_timer;
init_timer(&my_timer);
/* 填充数据结构 */
my_timer.expires = jiffies + delay;
my_timer.data = 0;
my_timer.function = my_function; /*定时器到期时调用的函数*/
void my_timer_function(unsigned long data);
add_timer(&my_timer);
mod_timer(&my_timer, jiffies+ney_delay);
del_timer(&my_timer);
del_time_sync(&my_timer);
#include <linux/init.h>
#include <linux/module.h>
#include <linux/time.h>
#include <linux/sched.h>
#include <linux/delay.h>
#include <linux/timer.h>
struct timer_list my_timer;
static void timer_handler(unsigned long arg)
{
printk(KERN_INFO "%s %d Hello Micky! arg=%lu\n",__func__, __LINE__, arg );
}
static int __init test_init(void)
{
init_timer(&my_timer);
my_timer.expires = jiffies + 5 * HZ;
my_timer.function = timer_handler;
my_timer.data = 10;
add_timer(&my_timer);
return 0;
}
static void __exit test_exit(void)
{
del_timer(&my_timer);
}
module_init(test_init);
module_exit(test_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Micky Liu");
MODULE_DESCRIPTION("Test for timer");
#include <linux/init.h>
#include <linux/module.h>
#include <linux/time.h>
#include <linux/sched.h>
#include <linux/delay.h>
#include <linux/timer.h>
struct timer_list my_timer;
static void timer_handler(unsigned long arg)
{
printk(KERN_INFO "%s %d Hello Micky! arg=%lu\n",__func__, __LINE__, arg );
}
static int __init test_init(void)
{
init_timer(&my_timer);
//my_timer.expires = jiffies + 5 * HZ;
my_timer.function = timer_handler;
my_timer.data = 10;
//add_timer(&my_timer);
mod_timer(&my_timer, jiffies + 5 * HZ);
return 0;
}
static void __exit test_exit(void)
{
del_timer(&my_timer);
}
module_init(test_init);
module_exit(test_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Micky Liu");
MODULE_DESCRIPTION("Test for timer");
void wait_event(
wait_queue_head_t q,
int condition);
int wait_event_interruptible(wait_queue_head_t q, int condition);
void wake_up(
wait_queue_head_t *queue);
void wake_up_interruptible(
wait_queue_head_t *queue);
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有