天天看點

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

繼續閱讀