400-888-5228

课程介绍:

Linux Drivers的开发重点在于架构设计而不是语法细节,如何使用Linux已有的API来设计和实现机制良好的Linux Drivers是其重点所在。

对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) 來设计Drivers,并配合 user application 来设计应用程序是重点;

与 user application 如何互动動,是编写Driver非常重要的一个环节,正确理解和处理user-space 与 kernel-space 的关系,尤其的对当今最为火爆的智能平台Android而言,这一点尤为重要。

 

课程目标:

本课程旨在协助工程师在掌握驱动程序设计和编写最佳实践的前提下,完整的编写出【好】的驱动程序,并以Android最核心的驱动Binder驱动为案例,让学习者一方面彻底掌握嵌入式Linux一个商业级别驱动的完整实现,另一方面也为掌握Android框架打下最坚实的基础;

 

课程长度:

3天

课程对象:

能看懂C语言代码;最好是对Linux内核有所了解;

 

课程大纲:

1:搭建嵌入式Linux Driver开发环境

1,1 虚拟机和Linux

1,2 source insight

2:第一个嵌入式Linux Driver程序开发实战

2,1 Helloworld驱动程序;

2.2 模块参数和模块之间的通信;

2.3 将模块加入到内核;

3:Linux驱动架构和设计流程

3.1 通过案例反思linux驱动的架构;

3.2 Linux驱动程序的最佳设计流程;

4:I/O

4.1 I/O端口的访问与读写函数;

4.2 I/O内存读写;

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 (分层架构) 架构解析;

9.2 Sysfs架构与实战;

9.3 Sysfs Class Driver;

10:Android & Linux Device Driver

10.1  Android 与Linux 整合: HAL 架构 ;

10.2  Kernel Space与User space;

11:次主题的内容是以Android最核心的驱动Binder驱动为案例,让学习者一方面彻底掌握嵌入式Linux一个商业级别驱动的完整实现,另一方面也为掌握Android框架打下最坚实的基础,具体内容如下:

  1. Service Manager是如何成为一个守护进程的?即Service Manager是如何告知Binder驱动程序它是Binder机制的上下文管理者。
  2. Server和Client是如何获得Service Manager接口的?即defaultServiceManager接口是如何实现的。
  3. Server是如何把自己的服务启动起来的?Service Manager在Server启动的过程中是如何为Server提供服务的?即IServiceManager::addService接口是如何实现的。
  4. Service Manager是如何为Client提供服务的?即IServiceManager::getService接口是如何实现的。
  5. Android系统进程间通信Binder机制在应用程序框架层的Java接口源代码分析。