Chinaunix首页 | 论坛 | 博客
  • 博客访问: 110800
  • 博文数量: 40
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2016-09-22 17:28
文章分类

全部博文(40)

文章存档

2021年(2)

2018年(3)

2017年(29)

2016年(6)

我的朋友

分类: LINUX

2016-09-23 15:37:35

原文地址:init_MUTEX 与 sema_init 函数 作者:pally2004

在编译
Linux设备驱动程序学习(1)-字符设备驱动程序
中scull.c程序时,报错:
/linux-2.6.35/mytest/scull/scull/scull.c: 在函数‘scull_init_module’中:
/linux-2.6.35/mytest/scull/scull/scull.c:305:3: 错误:隐式声明函数‘init_MUTEX’
搜索得到结果如下:

    2.6.25及以后的linux内核版本废除了init_MUTEX函数

    新版本使用sema_init函数

平台:X86 32位
内核:2.6.24
定义

点击(此处)折叠或打开

  1. static inline void init_MUTEX (struct semaphore *sem)
  2. {
  3.         sema_init(sem, 1);
  4. }
说明:Init_MUTEX()函数初始化信号量为互斥量。 互斥量为信号量的特例,它可以防止数据被两个不同系统调用读写。

sema_init (sem, 1) 定义为:

点击(此处)折叠或打开

  1. static inline void sema_init (struct semaphore *sem, int val)
  2. {
  3. /*
  4. * *sem = (struct semaphore)__SEMAPHORE_INITIALIZER((*sem),val);
  5. *
  6. * i'd rather use the more flexible initialization above, but sadly
  7. * GCC 2.7.2.3 emits a bogus warning. EGCS doesn't. Oh well.
  8. */
  9.     atomic_set(&sem->count, val);
  10.     sem->sleepers = 0;
  11.     init_waitqueue_head(&sem->wait);
  12. }
sleepers : 指定了允许进入等待进入临界区的进程数,这里初始化为 0 。
init_waitqueue_head() : 初始化一个等待队列头。

这样不难得出,废除 init_MUTEX 后,将原来使用 init_MUTEX(sem)的地方统统替换为sema_init(sem, 1); 即可




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