ldd3源码jiq.c编译出现的问题
来源:互联网 发布:java图书管理系统报告 编辑:程序博客网 时间:2024/05/01 10:56
此博客转载于:http://blog.csdn.net/makethyme/article/details/6940203
本人使用的环境是uname -r 为2.6.35.6-45.fc14.i686
编译中,首先碰到的就是现在头文件<linux/config.h>已经不存在,搜索看看就知道这么解决了。
另外一个就是<linux/workqueue.h>中一些函数和结构体已经改变了:
extern int schedule_delayed_work(struct delayed_work *work, unsigned long delay);
extern int schedule_work(struct work_struct *work);
struct delayed_work {
struct work_struct work;
struct timer_list timer;
};
为了尽可能少修改源代码,修改如下:
1)定义一个新的结构体
static struct delayed_work_struct_ldd3_t {
struct delayed_work delayed_work;
void *privatedata;
} delayed_work_struct_ldd3;
在该结构体中,privatedata指向以前的jiq_data结构。而struct delayed_work delayed_work则包含
结构work_struction work.
2)由于使用jiq_data的地方很多,保留该变量,但是在jiq_init()函数中,将该变量已delayed_work_struct_ldd3关联起来。
delayed_work_struct_ldd3.privatedata = (void*)&jiq_data;
3)源代码中好像还以一个宏定义为
#define SCHEDULE_QUEUE ((task_queue *) 1)
在此文件中应该没用,可以注释掉。
4)在函数jiq_init中,将以前的INIT_WORK(…)替换为
INIT_DELAYED_WORK(&(delayed_work_struct_ldd3.delayed_work),jiq_print_wq);
如果仍然使用INIT_WORK,则/proc/jiqwq能够正常工作。但是/proc/jiqwqdelay不能正常工作。即
schedule_delayed_work需要INIT_DELAYED_WORK而不是INIT_WORK配合。
5)此情况下jiq_print_wq变化较大:
static void jiq_print_wq(struct work_struct *ptr) //传入的参数类型不再是void *,而是struct work_struct *了
{
//通过work_struct得到delayed_work,再得到delayed_work_struct_ldd3_t,从而得到jiq_data数据结构。
struct delayed_work *p_delayed_work = to_delayed_work(ptr);
struct delayed_work_struct_ldd3_t *p_delayed_work_struct_ldd3 =
container_of(p_delayed_work, struct delayed_work_struct_ldd3_t,delayed_work);
struct clientdata *data = (struct clientdata *) (p_delayed_work_struct_ldd3->privatedata);
if (! jiq_print (data))
return;
if (data->delay)
schedule_delayed_work(p_delayed_work, data->delay);
else
schedule_work(ptr);
}
6)函数jiq_read_wq中
schedule_work(&jiq_work)修改为schedule_work(&(delayed_work_struct_ldd3.delayed_work.work));
7)函数jiq_read_wq_delayed中
schedule_delayed_work(&jiq_work,delay)修改为schedule_delayed_work(&(delayed_work_struct_ldd3.delayed_work),delay);
编译运行可得到:
cat /proc/jiqwqdelay
time delta preempt pid cpu command
3385115 1 0 6 0 events/0
3385116 1 0 6 0 events/0
3385117 1 0 6 0 events/0
3385118 1 0 6 0 events/0
3385119 1 0 6 0 events/0
cat /proc/jiqwq
time delta preempt pid cpu command
3403777 1 0 6 0 events/0
3403777 0 0 6 0 events/0
3403777 0 0 6 0 events/0
3403777 0 0 6 0 events/0
3403777 0 0 6 0 events/0
3403777 0 0 6 0 events/0
- ldd3源码jiq.c编译出现的问题
- ldd3源码jiq.c编译出现的问题
- 编译ldd3的scullc模块出现的问题
- 编译ldd3的scullc模块出现的问题
- fedora14 编译ldd3的源码
- 对ldd3 中jiq程序的一点笔记
- ldd3 misc-progs/setlevel.c编译问题的解决
- jiq.c
- jiq.c
- 编译LDD3的scull驱动问题总结
- 【Linux】LDD3中sbull源码编译问题梳理
- 源码环境下编译出现的问题
- android源码模块编译出现的问题
- ldd3 sbull编译遇到的问题 解决(部分)方法
- Linux设备驱动程序(LDD3)中snull的编译问题
- ldd3 sbull编译遇到的问题 解决(部分)方法
- Linux设备驱动程序(LDD3)中snull的编译问题
- Android源码编译出现问题
- Leetcode:Single Number II
- 深拷贝、浅拷贝
- 2014/12/15
- 20141215-Amazon Intern F2F Interview Experence
- c++各种类型数据所占字节数
- ldd3源码jiq.c编译出现的问题
- JFreeChart--柱状图
- Reverse Nodes in k-Group leetcode
- Golden32 for oracle 下载,附注册码
- iOS开发快速入门教程——3.1节~3.5节
- 我要做一个什么样的程序员
- 数字图像处理之配置opencv中遇到的问题
- iOS开发快速入门教程——3.6节~3.10节
- const char*, char const*, char*const的区别