3.x 内核新工作队列kworker/n ;current头文件,unrecognized ELF data encoding 0:
来源:互联网 发布:常州淘宝模特兼职 编辑:程序博客网 时间:2024/06/08 10:39
今天在linux-3.9.5上想用current ->comm,current->pid时,编译不通过,
需添加:
#include <linux/kthread.h>
#include<asm/current.h>
之后可以正常编译通过,但是重复多次编译时,会出下如下错误:
unrecognized ELF data encoding 0:
这是编译器cache的问题:
需执行:
ccache -c
工作队列:
虽然自从2.6.0之后,Linux对work queue进行了优化,但是kernel用到create_workqueue的模块越来越多,而调用create_workqueue会在每个cpu上都创建一个work_thread, 每个cpu都分配一个cpu_workqueue_struct以及workqueue_struct,而如果没被queue_work的话根本没机会工作,这样仍然相当浪费内存资源,而且加重了cpu loading。另外,同一个work queue上的每个work都是按照串行执行的,假如其中一个work的调度程序睡眠了,那么后面的work也将无法工作。
自从2.6.36以后,work queue的机制发生了很大变化,所有的work queue都被合并成
一个work queue,work thread也不是和work queue一一关联,work何时工作紧紧按照工作的重要性以及时间紧迫性来划分。也就是说新机制是按照cpu数量来创建work thread,而不是work queue。
例:工作队列(打印默认工作队列)--linux-3.9上默认工作线程名是kworker/n ,不再是2.6系列上的 event/n
#include <linux/init.h>#include <linux/module.h>#include <linux/fs.h>#include <linux/kernel.h>#include <linux/slab.h>#include <linux/workqueue.h>#include <asm/current.h>#include <linux/kthread.h>#include <linux/sched.h>static void do_declarework(struct work_struct *work){ printk(KERN_EMERG "declarework: [%s:%d]\n",current->comm,current->pid);}static void do_work(struct work_struct *work){ printk(KERN_EMERG "init_work: [%s:%d]\n",current->comm,current->pid);}static void do_delaywork(struct work_struct *work){ printk(KERN_EMERG "delaywork: [%s:%d]\n",current->comm,current->pid); }struct work_struct cgmwork;struct delayed_work cgmdelaywork;struct workqueue_struct *mywq;static int __init kerneladdr(void){ DECLARE_WORK(cgmdeclarework,do_declarework); INIT_WORK(&cgmwork,do_work); INIT_DELAYED_WORK(&cgmdelaywork,do_delaywork); schedule_work(&cgmdeclarework); schedule_work(&cgmwork); schedule_delayed_work(&cgmdelaywork,5); flush_scheduled_work();mywq=alloc_workqueue("mywq",0,0);queue_work(mywq,&cgmwork);flush_workqueue(mywq); return 0;}static void __exit kerneladdr_exit(void){ printk(KERN_ALERT"Entry kerneladdr_exit!\n");destroy_workqueue(mywq);}module_init(kerneladdr);module_exit(kerneladdr_exit);
- 3.x 内核新工作队列kworker/n ;current头文件,unrecognized ELF data encoding 0:
- kworker内核工作队列详解
- ELF头文件学习
- ELF文件头分析
- ELF文件头结构
- ELF文件格式(一)--ELF文件头
- ELF文件头读取修改
- 编程读取ELF文件头
- 第一章 内核模块 elf文件
- linux 内核 工作队列
- Linux内核工作队列
- 内核工作队列workqueue
- Linux内核:工作队列
- 内核工作队列 赏析
- 内核工作队列使用方法
- Linux 内核工作队列
- Linux内核:工作队列
- linux内核工作队列
- spring 与 mybatis 整合笔记
- XML 和 java对象相互转换
- java 对xml 基本操作
- ACM取石子问题
- dtd 学习笔记
- 3.x 内核新工作队列kworker/n ;current头文件,unrecognized ELF data encoding 0:
- 动态给table 添加 tr(行),实现添加多个对象
- Grid多行tbar
- js数组的操作
- jquery.validate 学习笔记(验证form表单工具)
- 将CSV文件导入到数据的办法
- sprintf用法
- dhtmlxtree学习笔记一(快速入门)
- ios开发中一些常用API总结