打印

wakeup目前改成wake_up了?

wakeup目前改成wake_up了?

从前用过wakeup,现在是2.4.20-8,在用时候出现unsloved symbol wakeup。搜索后改成wake_up了?

struct wait_queue *wp = NULL;

wake_up(&wp);

编译总是警告:from incompatible pointer type

那么wake_up的参数是什么?

TOP

看sched.h

TOP

大哥,1、在向你咨询前就看了sched.h文件,里面定义的参数和网络上说的有区别,我两个都试了,问题一样的警告,强行执行后结果当然不对,所以没有办法了;怎么办?

2、目前的2.4.8  或 2.6.x等版本存在函数wakeup和sleep吗?怎么在网上搜索出现wake_up和sleep_on?他们是什么关系!

谢谢!

TOP

cat /proc/kallsyms |grep wake_up
看看结果

TOP

没有kallsyms文件,而是ksyms,我版本2.4.8
显示_wake_up_Rb76c5fle不知道什么意思?

TOP

下面是程序片段

#include "/usr/src/linux-2.4.20/include/linux/sched.h"

char buffer[999];

struct wait_queue_head_t *buffer_s = NULL;
struct wait_queue_head_t *buffer_g = NULL;
                                                                                                                                               
static int read_A(struct file *file, char *buf, size_t count, loff_t *p)
{

        while(buffer_flg == 0) sleep_on(&buffer_g);
        while(,,,)
                put_user(buffer, buf+i);
        buffer_flg = 0;
        wake_up(&buffer_g);
        return x;
}

编译时总是
warning: passing arg 1 of `sleep_on' from incompatible pointer type
warning: passing arg 1 of `__wake_up' from incompatible pointer type

十分郁闷:原型就是这个定义的,
struct wait_queue_head_t *
怎么会警告?

(如强制执行会出现内存方面的错误!)
望给予指导!
谢谢!

TOP

[quote:bf6e6b9bbb="林丽"]没有kallsyms文件,而是ksyms,我版本2.4.8
显示_wake_up_Rb76c5fle不知道什么意思?[/quote]
2.6是kallsyms,2.4是ksyms

你得内核符号加了版本信息

重新编译内核,把
[code:1]
Loadable module support  --->
    [*] Enable loadable module support
    [ ]   Set version information on all module symbols
[/code:1]
不要选“Set version information on all module symbols ”

TOP

谢谢大哥!我马上测试一下。
这是内核装载时才引起的,他和编译出现警告有什么联系呢?

TOP

原型定义是__wake_up(wait_queue_head_t *q, unsigned int mode, int nr);
你传进去的是wait_queue_head_t **

struct wait_queue_head_t *buffer_s = NULL;
struct wait_queue_head_t *buffer_g = NULL;
改成
struct wait_queue_head_t buffer_s;
struct wait_queue_head_t buffer_g;

TOP

编译出现:
storage size of 'buffer_s' insn't  known
storage size of 'buffer_g' insn't  known
Error 1

TOP

#include <linux/wait.h>

TOP

我在 compatmac.h 中查到
#define wait_queue_head_t  struct wait_queue *

struct wait_queue_head_t *buffer_s = NULL;
struct wait_queue_head_t *buffer_g = NULL;
改成
struct wait_queue **buffer_s;
struct wait_queue **buffer_g;

换成wake_up(&buffer_s);
一样是警告

我在网上搜索的例子就是这么用的,难道我的版本有问题(是正规发行的)?

TOP

struct wait_queue_head_t *buffer_s = NULL;
struct wait_queue_head_t *buffer_g = NULL;
改成
struct wait_queue *buffer_s;
struct wait_queue *buffer_g;

上帖错了!抱歉!

TOP


struct wait_queue_head_t *buffer_s = NULL;
struct wait_queue_head_t *buffer_g = NULL;
改成
wait_queue_head_t buffer_s;
wait_queue_head_t buffer_g;

编译通过了!谢谢!
看看运行结果怎么样!

TOP

不应该用compactmac.h,看名字就知道了,况且compactmac.h那个根本就不是wait_queue_head_t的定义,只是给它定义了个别名。

#include <linux/wait.h>
wait_queue_head_t的定义就在这里面

TOP