linux驱动开发常用手段

在项目中,有些手段被多个成员频繁使用,统一归纳并被封装成通用接口也是顺理成章的事情。

这里先列个提纲,后面会慢慢讲解,并且贴上封装后的代码。

 

<<用户态>>

 

 时间:

usleep -- 用作延时, 其它的时间段以这个为基础。

gettimeofday用来获取微秒时间计数,使用不方便,需要封装一下。

 

原子操作:

信号量:

 sem_init -- 第二人参数必须是0,因为目前不支持进程间。

sem_wait -- 获取信号量,得到就减1.

sem_post -- 释放信号量,加1

sem_destroy -- 销毁

 

互斥锁:

pthread_mutex_init

pthread_mutex_lock

pthread_mutex_unlock

 

文件锁(TODO):

fcntl

 

线程:

pthread_create -- 线程创建,属性参数为NULL代表抢占式,可以配置为FIFO模式。

pthread_join-- 阻塞方式等待线程结束。

 

 

<<内核态>>

 

 时间:

udelay -- 微秒,不释放CPU。(mdelay, ndelay)

msleep -- 释放CPU(msleep_interruptible)

 

原子操作:

信号量(睡眠阻塞):

sema_init

down_interruptible -- 可打断

up

 

自旋锁(忙等待):

spin_lock_init

spin_lock_irqsave -- (保存中断状态,解锁时恢复)

 

互斥锁:

mutex_init

mutex_lock_interruptible

mutex_trylock

 

等待队列:

sleep_on_timeout

interrupt_sleep_on_timeout

 

内核线程:

kthread_run -- 循环体里面使用schedule调度,msleep里面也是调用schedule

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值