- 论坛徽章:
- 0
|
本帖最后由 nuclearxin 于 2017-02-21 11:25 编辑
insmod运行 初始化函数。rmmod 运行 c退出函数 。
这个是模块调用的方式: 你如果 init 不返回 就卡哪里~ 相当于你自己的ismod的pid 。
这个例子使用了kthread 所以 不需要等待返回 所有工作在 thread里面运行。insmod马上就结束就是个安装过程。module的工作在thread里面
如果你不用kthread的话。。。。你的codea都写子init里面 那么insmod就是你的task啦~~ 一般没这么做的!
这个code是我自己写着玩的
可以看到自己的task pid
- static struct task_struct * thp;
- //static struct task_struct * mthp[MAX_T];
- //thread function
- static int thread_f(void *non)
- {
- pid_t tid = current->pid;
- while(!kthread_should_stop()){
- printk(KERN_INFO "Thread id : %d start loop running 3sec sleep! \n",tid);
- ssleep(1);
- }
-
- printk(KERN_INFO "Thread id : %d is going to stop \n",tid);
- do_exit(0);
- return 0;
- }
- static int create_jerry_thread(void)
- {
- printk(KERN_INFO "start to create one thread");
- thp = kthread_run(thread_f,NULL,"JERRH_THREAD: %d ",1);
- if(thp)
- printk(KERN_INFO " create thread !\n");
- else
- printk(KERN_ERR "Error on create thread !\n");
- return 0;
- }
- static int __init jerry_init(void)
- {
- printk(KERN_INFO "Hello, world 2\n");
- printk(KERN_INFO "Hello, world my pid is %d \n",current->pid);
- create_jerry_thread();
- return 0;
- }
- static void __exit jerry_exit(void)
- {
-
- printk(KERN_INFO "try to stop the thread\n");
- if(thp)
- {
- kthread_stop(thp);
- printk(KERN_INFO "send the kill pendding , should stoped\n");
- }
- else
- printk(KERN_INFO "Failed !\n");
- printk(KERN_INFO "Goodbye, world 2\n");
-
- }
- module_init(jerry_init);
- module_exit(jerry_exit);
- MODULE_LICENSE("GPL");
- MODULE_AUTHOR("JERRY ");
复制代码
这个是 加载和删除的 效果
insmod jerry.ko
rmmod jerry
- [1010859.359699] Hello, world 2
- [1010859.359707] Hello, world my pid is 19289
- [1010859.359709] start to create one thread
- [1010859.360115] create thread !
- [1010859.360144] Thread id : 19291 start loop running 3sec sleep!
- [1010860.364112] Thread id : 19291 start loop running 3sec sleep!
- [1010861.368129] Thread id : 19291 start loop running 3sec sleep!
- [1010862.372116] Thread id : 19291 start loop running 3sec sleep!
- [1010863.376112] Thread id : 19291 start loop running 3sec sleep!
- [1010864.380098] Thread id : 19291 start loop running 3sec sleep!
- [1010865.384115] Thread id : 19291 start loop running 3sec sleep!
- [1010865.631066] try to stop the thread
- [1010866.388106] Thread id : 19291 is going to stop
- [1010866.388146] send the kill pendding , should stoped
- [1010866.388148] Goodbye, world 2
复制代码
|
评分
-
查看全部评分
|