分类: LINUX
2009-03-02 00:43:05
************************************************************** #include <linux/module.h> #include <linux/sched.h> #include <linux/kernel.h> #include <linux/init.h> #include <linux/list.h> #include <linux/types.h> void mps(void); static int __init my_init(void) { printk("Hello, myps!..........\n"); mps(); return 0; } static void __exit my_cleanup(void) { printk("Goodbye, myps!\n"); } module_init(my_init); module_exit(my_cleanup); void mps(void) { struct list_head task_list_head = current->tasks; struct list_head *pos; list_for_each(pos, &task_list_head) { printk("%s,", list_entry((pos), struct task_struct, tasks)->comm ); //这里我用break让其之运行了一次,则是可以从dmesg看出其打印出来的内容的。 break; } } 编译之后,加载模块之后 [root@localhost error]# insmod mps.ko [root@localhost error]# dmesg Hello, myps!.......... udevd, [root@localhost error]# rmmod mps Goodbye, myps! ************************************************************* 如果我把上面的代码修改成如下的形式(其实就是把刚才的break注释掉),则当我再次加载模块的时候,系统就会崩溃。 ************************************************************* #include <linux/module.h> #include <linux/sched.h> #include <linux/kernel.h> #include <linux/init.h> #include <linux/list.h> #include <linux/types.h> void mps(void); static int __init my_init(void) { printk("Hello, myps!..........\n"); mps(); return 0; } static void __exit my_cleanup(void) { printk("Goodbye, myps!\n"); } module_init(my_init); module_exit(my_cleanup); void mps(void) { struct list_head task_list_head = current->tasks; struct list_head *pos; list_for_each(pos, &task_list_head) { printk("%s,", list_entry((pos), struct task_struct, tasks)->comm ); //break; } } ************************************************************* [root@localhost error]#insmod mps.ko //系统就会死在这里面,需要重启才行。 ************************************************************* |