频道栏目
首页 > 资讯 > Linux > 正文

解决Ubuntu安装无线网卡驱动因”init_mutex”被废除编译不过的问题

11-08-12        来源:[db:作者]  
收藏   我要投稿

买无线网卡的时候我特意找了一个同时具备win,linux和mac三个平台的驱动的的网卡。但是Ubuntu11.04中安装无线网卡的时候,发现驱动模块的代码编译不过。原因定位到了init_mutex的地方。

error: implicit declaration of function ‘init_MUTEX’

后来一查,在新版本的linux内核中,init_mutex已经被废除了。

查了一下早期版本的定义。

平台:X86 32位

内核:2.6.24

定义:

static inline void init_MUTEX (struct semaphore *sem)

{

        sema_init(sem, 1);

}

 

说明:Init_MUTEX()函数初始化信号量为互斥量。 互斥量为信号量的特例,它可以防止数据被两个不同系统调用读写。

 

static inline void sema_init (struct semaphore *sem, int val)

{

/*

*    *sem = (struct semaphore)__SEMAPHORE_INITIALIZER((*sem),val);

*

* i'd rather use the more flexible initialization above, but sadly

* GCC 2.7.2.3 emits a bogus warning. EGCS doesn't. Oh well.

*/

    atomic_set(&sem->count, val);

    sem->sleepers = 0;

    init_waitqueue_head(&sem->wait);

}

 

sleepers : 指定了允许进入等待进入临界区的进程数,这里初始化为0 。

init_waitqueue_head() : 初始化一个等待队列头。

 

根据代码判断,只要在init_mutex的地方直接使用sema_init来替换,试了一些,果然可以成功make。驱动成功安装也可以正常使用。

代码大概是这样的init_MUTEX(&wl->sem); 手动修改为sema_init(&wl->sem,1); 然后再进行编译就可以。

本文出自 “ArthurChen” 博客

相关TAG标签
上一篇: linux kickstart 无人职守安装
下一篇:windows 2003扩展分区
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站