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,触摸屏。


你可能感兴趣的:(Linux字符设备驱动程序总结(一))