Linux字符设备驱动程序总结(一)

在这之前我们已经把字符设备驱动框架和模型,包括一些机制我们都讲的非常清楚了,在这里我在给大家总结一下。

首先大家理解几个概念,像物理地址和虚拟地址,IO映射和内存映射,操作IO我总结了有以下三种方法:

第一种方法:用的时候加上 *
volatile unsigned long  *adccon=NULL;
volatile unsigned long  *adcdat=NULL;
adccon=(volatile unsigned long *)ioremap(0x58000000,8);
adcdat=adccon+4;
iounmap(adccon);
iounmap(adcdat);

第二种方法:
 __raw_readl(S3C2410_GPBCON);//S3C2410_GPBCON你可以看作是物理地址,本质是一个对IO管教的基地址加上一些偏移量。
  __raw_writel(temp, S3C2410_GPBCON);//_raw_write
 //自动将地址转化成虚拟地址

第三种方法:


static unsigned long led_table [] = {
S3C2410_GPB5,
S3C2410_GPB6,
S3C2410_GPB8,
S3C2410_GPB10,
};

static unsigned int led_cfg_table [] = {
S3C2410_GPB5_OUTP, //0x01<<10 defined in refg-gpio.h
S3C2410_GPB6_OUTP,
S3C2410_GPB8_OUTP,
S3C2410_GPB10_OUTP,
};

s3c2410_gpio_setpin(unsigned int pin,unsigned int to)
s3c2410_gpio_getpin(unsigned int pin)
s3c2410_gpio_cfgpin(unsigned int pin,unsigned int function)


这三种后两种其实是一样的,自己一定要深入去理解。

然后我们来总结按键驱动程序:

第一:查询方法,read一直去读,这样是非常消耗cpu的。

第二:中断方法,我们还是去读,当没有按键发生的时候,我在此休眠,挂进队列,当按键发生了我们唤醒休眠,在去读按键。

第三:poll机制法,我们去读的时候,如果没有按键发生,开始的时候我们是让进程一直休眠下去,但是poll机制可以提供给定一个时间去读一次数据。

第四:异步通知,当我们没有按键按下的时候,应用程序不会来读取,当按键发生中断函数里面就通知应用程序来读。

紧接着我们讲了同步机制:信号量,自旋锁,互斥锁,原子变量,顺序锁,阻塞,非阻塞,RCU,完成接口等,(这些自己不懂得在去网上看看资料)

前面有几种常用的我在前面也讲得非常详细了。

最后一个是对定时器的理解,注意观察udelay.mdelay,sleep  timer_list,这些我只是在这里提出来,给你们一些思路,全部写下来的话东西太多了。

在下一篇文章中我准备总结下我对input输入子系统,分离的理解,还有LCD,触摸屏。


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值