原创 arm驅動程序——按鍵程序1(韋東山的視頻總結及針對linux-2.6.30)

相關代碼在資源中下載。 按鍵程序是以中斷方式寫的,至於中斷的內核相關的知識看中斷框架和註冊一節, 所用到的函數和結構: /*用來註冊中斷*/ /*irq:中斷號,handler:中斷處理函數,flags:中斷觸發方式,  *name:中斷

原创 輸入服務子系統實例分析(韋東山的視頻總結及針對linux-2.6.30.4)

根據韋東山視頻講解,和自己理解總結的: 1.分配一個input_dev結構體, 2.設置input_dev。 3.註冊input_dev結構體。 4.硬件相關的操作。 /*參考/keyboard/corgikbd.c*/ static

原创 linux中斷機制及中斷註冊1(韋東山的視頻總結及針對linux-2.6.30.4)

自己的總結有錯誤請評論,我們共同進步。 下面的以天嵌 用戶模式下 按下按鍵k1 產生中斷EINT1爲例進行分析的,內核代碼只是摘錄中斷相關的。 下面爲流程圖, traps.c中early_trap_init(void)被用來設置各種異

原创 arm驅動程序——按鍵程序3_定時器消抖(韋東山的視頻總結及針對linux-2.6.30)

相關代碼在資源中下載。 按鍵利用定時器消抖: 1.定義timer_list結構體的變量。 2.初始化定時器, 3.增加定時器,啓動定時器。 所用到的結構體和函數等: /*初始化時一般設置,expires,function,data*/ s

原创 linux中斷機制及中斷註冊2(韋東山的視頻總結及針對linux-2.6.30.4)

自己的總結有錯誤請評論,我們共同進步 中斷註冊使用函數request_irq來註冊,request_irq究竟做了什麼,下面來分析:   以註冊外部中斷1 觸發方式是雙邊沿 爲例 request_irq(IRQ_EINT1,buttons

原创 輸入服務子系統框架代碼分析(韋東山的視頻總結及針對linux-2.6.30.4)

自己的總結有錯誤請評論,我們共同進步。 static struct input_handler *input_table[8]; /*入口函數*/ static int __init input_init(void){     /*註

原创 arm驅動程序——按鍵程序2(韋東山的視頻總結及針對linux-2.6.30)

相關代碼在資源中下載。 用到的結構及,函數及其他: /*用於產生一個等待隊列的頭文件,定義在wait.h中*/ #define DECLARE_WAIT_QUEUE_HEAD(name) \       wait_queue_head_t

原创 POLL機制分析(韋東山的視頻總結及針對linux-2.6.30.4)

此爲部分內核代碼。 應用程序的poll   ->  sys_poll  ->  do_sys_poll   ->   (poll_initwait,和do_poll) 應用程序的部分代碼: int main(int argc,char *

原创 arm驅動程序——按鍵程序6_互斥—信號量(韋東山的視頻總結及針對linux-2.6.30)

相關源碼在資源中下載。 信號量實現互斥的一個方法。 只有得到信號量的進程才能執行臨界區的代碼,當得不到信號量時,進程會進入休眠等待狀態。 用到的函數,結構體及其他: /*定義並初始化信號量*/ DECLARE_MUTEX(name) /*

原创 arm驅動程序——手動設備節點 (韋東山的視頻總結及針對linux-2.6.30.4)

驅動學的越到感覺知識越亂,從頭開始理清。 下面是看韋東山老師的視頻總結的: 寫驅動程序主要是搞清楚驅動的框架, 下面是寫驅動的步驟: 1. 寫驅動的讀寫等函數,一般應用程序用到哪些就寫哪些 。 2.     2.1 定義一個file_o

原创 arm驅動程序——點亮led(韋東山的視頻總結及針對linux-2.6.30)

上面兩節只是驅動程序的框架,下面就是點亮led了。 目的:點亮led 步驟:     1.寫框架。     2.完善硬件相關操作。 a.看原理圖 b.看2440手冊 c.寫代碼 下面是所用到的函數及結構: /*由於用戶空間中的指針,數據不

原创 arm驅動程序——按鍵程序4_poll(韋東山的視頻總結及針對linux-2.6.30)

相關代碼在資源中下載。 poll機制分析在以前的都有說明了,要是不理解可以看poll機制   測試程序中都是用while(1)死循環查詢,而利用poll函數可以睡眠固定時間,然後返回,也可以發生中斷時喚醒 要在測試程序中用poll函數時,

原创 arm驅動程序——自動創建設備節點 (韋東山的視頻總結及針對linux-2.6.30)

相關代碼在資源中下載。 mdev機制根據/sys/下的系統信息來創建設備節點。 自動創建節點的步驟: 1.入口函數中:     a.創建一個類。     b.在類下面創建一個設備。 2.出口函數中:     a.註銷類下的設備。    

原创 arm驅動程序——按鍵程序6_互斥1—原子操作(韋東山的視頻總結及針對linux-2.6.30)

相關代碼在資源中下載。 互斥:指一個執行單元在訪問共享資源的時候,其他的執行單元被禁止。 所謂的原子操作一般是由多步組成的操作,執行過程中不會被其它的代碼操作打斷,從而實現互斥。 用到的函數,結構體及其他: /*用於設置原子變量的值*/

原创 arm驅動程序——點亮led-利用次設備號(韋東山的視頻總結及針對linux-2.6.30)

相關代碼在資源中下載。 主設備號標識設備對應的驅動程序;而次設備號則用來標識同一類設備中的某個唯一的設備。 利用到的函數及結構在上面幾節中都有說出,在此不再敘述。 驅動設備:  #include <linux/module.h>  #in