Chinaunix首页 | 论坛 | 博客
  • 博客访问: 89260
  • 博文数量: 31
  • 博客积分: 15
  • 博客等级: 民兵
  • 技术积分: 142
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-08 13:05
文章分类

全部博文(31)

文章存档

2014年(17)

2013年(11)

2012年(3)

我的朋友

分类: LINUX

2014-01-10 16:06:37

编译中,首先碰到的就是现在头文件已经不存在,搜索看看就知道这么解决了。
另外一个就是中一些函数和结构体已经改变了:

点击(此处)折叠或打开

  1. extern int schedule_delayed_work(struct delayed_work *work, unsigned long delay);
  2. extern int schedule_work(struct work_struct *work);
  3. struct delayed_work {
  4.      struct work_struct work;
  5.      struct timer_list timer;
  6. };
为了尽可能少修改源代码,修改如下:
1)定义一个新的结构体

点击(此处)折叠或打开

  1. static struct delayed_work_struct_ldd3_t {
  2.     struct delayed_work delayed_work;
  3.     void *privatedata;
  4. } delayed_work_struct_ldd3;
在该结构体中,privatedata指向以前的jiq_data结构。而struct delayed_work delayed_work则包含
结构work_struction work.
2)由于使用jiq_data的地方很多,保留该变量,但是在jiq_init()函数中,将该变量已delayed_work_struct_ldd3关联起来。

点击(此处)折叠或打开

  1. delayed_work_struct_ldd3.privatedata = (void*)&jiq_data;
3)源代码中好像还以一个宏定义为

点击(此处)折叠或打开

  1. #define SCHEDULE_QUEUE ((task_queue *) 1)
在此文件中应该没用,可以注释掉。
4)在函数jiq_init中,将以前的INIT_WORK(…)替换为

点击(此处)折叠或打开

  1. 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变化较大:

点击(此处)折叠或打开

  1. static void jiq_print_wq(struct work_struct *ptr) //传入的参数类型不再是void *,而是struct work_struct *
  2. {
  3.      //通过work_struct得到delayed_work,再得到delayed_work_struct_ldd3_t,从而得到jiq_data数据结构。
  4.     struct delayed_work *p_delayed_work = to_delayed_work(ptr);
  5.     struct delayed_work_struct_ldd3_t *p_delayed_work_struct_ldd3 =
  6.             container_of(p_delayed_work, struct delayed_work_struct_ldd3_t,delayed_work);
  7.     struct clientdata *data = (struct clientdata *) (p_delayed_work_struct_ldd3->privatedata);
  8.     if (! jiq_print (data))
  9.           return;

  10.     if (data->delay)
  11.          schedule_delayed_work(p_delayed_work, data->delay);
  12.     else
  13.          schedule_work(ptr);
  14. }
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);
8)
error: ‘system_utsname’ undeclared

System_ustname的定义在较新的kernel中被删掉了。为了编译通过,可直接把这行在源文件中加回来了:

点击(此处)折叠或打开

  1. #define system_utsname init_uts_ns.name


阅读(579) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~