400-888-5228

課程介紹:

Linux Drivers的開發(fā)重點(diǎn)在于架構(gòu)設(shè)計而不是語法細(xì)節(jié),如何使用Linux已有的API來設(shè)計和實現(xiàn)機(jī)制良好的Linux Drivers是其重點(diǎn)所在。

對Linux Driver Developer而言,要做的工作主要分為2個層面:

1,Virtual Device Driver: 往上層支持 Linux kernel 所提供的 Virtual File System 層,并實作 system calls。使用者可透過 system call interface 與 device driver 溝通;

2,Physical Device Driver: 往下層使用 Linux kernel 所提供的 device interface 操作硬件。 Virtual device driver 的主題的重要性大于 physical device driver,如何善用 Linux 所提供的介面 (interface) 來設(shè)計Drivers,并配合 user application 來設(shè)計應(yīng)用程序是重點(diǎn);

與 user application 如何互動動,是編寫Driver非常重要的一個環(huán)節(jié),正確理解和處理user-space 與 kernel-space 的關(guān)系,尤其的對當(dāng)今最為火爆的智能平臺Android而言,這一點(diǎn)尤為重要。

 

課程目標(biāo):

本課程旨在協(xié)助工程師在掌握驅(qū)動程序設(shè)計和編寫最佳實踐的前提下,完整的編寫出【好】的驅(qū)動程序,并以Android最核心的驅(qū)動Binder驅(qū)動為案例,讓學(xué)習(xí)者一方面徹底掌握嵌入式Linux一個商業(yè)級別驅(qū)動的完整實現(xiàn),另一方面也為掌握Android框架打下最堅實的基礎(chǔ);

 

課程長度:

3天

課程對象:

能看懂C語言代碼;最好是對Linux內(nèi)核有所了解;

 

課程大綱:

1:搭建嵌入式Linux Driver開發(fā)環(huán)境

1,1 虛擬機(jī)和Linux

1,2 source insight

2:第一個嵌入式Linux Driver程序開發(fā)實戰(zhàn)

2,1 Helloworld驅(qū)動程序;

2.2 模塊參數(shù)和模塊之間的通信;

2.3 將模塊加入到內(nèi)核;

3:Linux驅(qū)動架構(gòu)和設(shè)計流程

3.1 通過案例反思linux驅(qū)動的架構(gòu);

3.2 Linux驅(qū)動程序的最佳設(shè)計流程;

4:I/O

4.1 I/O端口的訪問與讀寫函數(shù);

4.2 I/O內(nèi)存讀寫;

5:read/write與wait queue

5.1? read/write;

5.2? wait queue;

6: Kernel Timer、Task Queue 與 Work Queue

6.1 Kernel Timer;

6.2 Task Queue;

6.3 Work Queue

7:中斷處理(Interrupt handling) 與 Bottom Half

7.1 Interrupt handling;

7.2 Bottom Half;

8:Memory Mapped I/O 與 User-space driver

8.1 Memory Mapped I/O;

8.2 User-space driver;

9: Virtual File System

9.1 Subsystem (分層架構(gòu)) 架構(gòu)解析;

9.2 Sysfs架構(gòu)與實戰(zhàn);

9.3 Sysfs Class Driver;

10:Android & Linux Device Driver

10.1? Android 與Linux 整合: HAL 架構(gòu) ;

10.2? Kernel Space與User space;

11:次主題的內(nèi)容是以Android最核心的驅(qū)動Binder驅(qū)動為案例,讓學(xué)習(xí)者一方面徹底掌握嵌入式Linux一個商業(yè)級別驅(qū)動的完整實現(xiàn),另一方面也為掌握Android框架打下最堅實的基礎(chǔ),具體內(nèi)容如下:

  1. Service Manager是如何成為一個守護(hù)進(jìn)程的?即Service Manager是如何告知Binder驅(qū)動程序它是Binder機(jī)制的上下文管理者。
  2. Server和Client是如何獲得Service Manager接口的?即defaultServiceManager接口是如何實現(xiàn)的。
  3. Server是如何把自己的服務(wù)啟動起來的?Service Manager在Server啟動的過程中是如何為Server提供服務(wù)的?即IServiceManager::addService接口是如何實現(xiàn)的。
  4. Service Manager是如何為Client提供服務(wù)的?即IServiceManager::getService接口是如何實現(xiàn)的。
  5. Android系統(tǒng)進(jìn)程間通信Binder機(jī)制在應(yīng)用程序框架層的Java接口源代碼分析。