ARM嵌入式Linux系统驱动开发工程师班课程介绍
课程背景
嵌入式软件开发无疑是当今最热门的行业,嵌入式软件工程师的薪资比普通的软件工程师的薪资平均高50%以上。随着智能电网、物联网的建设,社会对嵌入式人才的需求越来越多。
很多同学或在职人员已经意识到了嵌入式开发的重要性,已经开始自学嵌入式开发技术,但是因为嵌入式开发不同于普通的纯软件开发,它是综合了计算机软、硬件的一门综合*,涉及模拟电路,数字电路,C语言、计算机组成原理,微机控制技术,网络技术,数据结构等课程,很多同学面对嵌入式涉及的这么多课程和知识点,往往不知道从何处下手开始学习嵌入式。
嵌入式Linux开发主要分为2大部分,即嵌入式Linux应用程序开发和嵌入式Linux底层驱动程序开发。嵌入式Linux应用程序开发是指在现有的嵌入式Linux平台上进行应用层程序开发,应用程序开发人员不用关心底层的硬件平台和设备驱动程序,只是在应用层实现相关的业务流程和逻辑即可,从这个角度看,嵌入式Linux应用程序开发和普通的基于桌面版Linux和服务器Linux的应用程序开发基本类似。 相比嵌入式Linux应用程序开发,嵌入式Linux驱动开发无论是从技术的难度,还是对开发人员的要求都要高一个层次,嵌入式驱动开发人员主要为具体硬件设备开发相应的设备驱动程序,构建嵌入式底层开发平台,这就要求嵌入式驱动开发人员不但要懂应用的开发,还需要非常理解具体硬件设备的工作原理以及linux系统内核的原理,这样才能开发出高效,稳定的设备驱动程序。因此,一个优秀的嵌入式系统驱动工程师非常难找,年薪一般可达15万 ~ 30万以上。
本课程即是针对有兴趣学习嵌入式Linux系统驱动开发又不知道从何处着实开始学习嵌入式Linux开发的在校同学以及社会在职人员。
课程目标
本课程采用理论教学与实验相结合的方式,系统地介绍嵌入式Linux系统开发的流程,嵌入式Linux系统移植的方法,Bootloader的原理,嵌入式Linux下设备驱动程序开发过程。通过本课程的学习,学员可以掌握嵌入式Linux下字符设备、块设备、网络设备、LCD显示屏、触摸屏,USB设备等嵌入式硬件的设备的驱动开发,同时掌握嵌入式Linux的系统驱动开发和分析的一般方法,达到举一反三,灵活运用的效果。
培养对象
ARM嵌入式Linux初学者
ARM嵌入式Linux爱好者
有志于从事ARM嵌入式Linux系统驱动程序开发的工程师
入学要求
学员学习本课程应具备下列基础知识:
具备计算机基础知识;
具备C语言编程基础;
具备嵌入式linux应用程序开发基础
电子类、计算机类、通信类、自动化类高年级本科生或研究生
培训教材
《ARM嵌入式Linux系统驱动研发工程师培训讲义》
《ARM嵌入式Linux系统驱动研发工程师培训实验教程》
课时费用
课时: 共20天,160课时
培训费用(含教材费用 + 开发板费用):4900元
实验环境
为了保证培训效果,增加互动环节,我们坚持小班授课,每期报名人数限10人,多余人员安排到下一期进行。每个学员配备一套嵌入式飞凌ARM9学习开发板。
课程大纲 (2011-02-12更新)
详情登陆
时间 课程大纲
*部分 ARM嵌入式Linux设备驱动开发基础
第 一 天
上午 嵌入式系统的开发模型
ARM体系架构及编程基础
ADS开发工具的使用
S3C2440微处理器介绍及接口设计
S3C2440的地址空间、时钟系统、中断系统及GPIO编程
FL2440开发板电路原理图介绍
下午 实验目的:
练习裸机环境下ARM9的中断及GPIO编程
任务描述:
当用户按下某一个按键时,对应的LED灯亮,再次按下该按键时,对应的LED灯灭。要求不使用操作系统,按键采用中断机制实现。
第 二 天
上午 Bootloader的概念及功能
UBOOT的结构及源码组织
UBOOT的配置、编译及连接过程
UBOOT加载内核过程源码分析
UBOOT的常用命令
UBOOT的移植
下午 实验目的:
练习UBOOT的使用及移植
任务描述:
移植UBOOT的FL2440开发板上,FL2440开发板上电后,UBOOT能正常运行并能正常引导启动linux内核。
第 三 天
上午 Linux2.6内核的内存管理机制
Linux系统的内核空间和用户空间
Linux内核的虚拟地址和物理地址
Linux虚拟内存到物理内存的映射机制
ARM存储管理单元MMU,页表介绍,段页式存储管理
Linux内核编程常用存储管理函数介绍
下午 实验目的:
练习如何建立页表,深入理解MMU,,页表是如何完成虚拟地址到物理地址的映射过程。
任务描述:
在裸机环境下建立一个页表,启用MMU,将不同的虚拟地址空间映射到同一个物理地址空间(LED的物理地址),映射完成后,在应用程序中操作2个虚拟地址,都可以来操作该LED.。
第 四 天
上午 Linux内核中断管理系统
Linux内核中断响应流程分析
Linux内核中断管理相关函数解析
Linux中断处理的上半部分和下半部分
Linux定时器管理
Linux硬件定时器及软件定时器的使用
下午 实验目的:
练习linux系统下的中断编程及硬件定时器编程
任务描述:
编写一个硬件定时器驱动程序,在其中一个PIN脚上周期性输出PWM波形,应用程序可以启动,停止PWM波形的输出,同时可以改变PWM波的频率和占空比。
第 五 天
上午 Linux2.6 设备驱动模型
Linux2.6 总线、设备及设备驱动的概念及关系
Linux2.6 sysfs文件系统
Linux2.6 设备及设备驱动程序架构
下午 实验目的:
练习基于Linux2.6 的设备驱动模型开发设备驱动;
任务描述:
基于Linux2.6的platform设备驱动模型重写LED字符设备驱动。
第 六 天
上午 Linux设备驱动程序中的并发控制、信号量;
Linux设备驱动程序中的阻塞与非阻塞IO
Linux设备驱动程序中的轮询操作
Linux设备驱动程序中的异步通知和异步IO;
下午 实验目的:
练习在Linux设备驱动程序中使用并发控制、阻塞和非阻塞、轮询和异步通知
任务描述:
在Linux LED驱动中增加并发控制
在Linux globlemem驱动中增加阻塞和非阻塞,并支持轮询操作;
在Linux 按键驱动中增加异步通知
第二部分 ARM嵌入式Linux设备驱动程序开发
第 七 天
上午 LCD屏设备驱动程序设计
TFT LCD屏硬件工作原理分析
S3C2440 LCD接口控制信号及相关寄存器分析
TFT LCD控制信号时序分析
下午 实验目的:
练习S3C2440 LCD接口的硬件编程
任务描述:
裸机环境下编写LCD驱动程序,在LCD屏上显示一幅给定的图片
第 八 天
上午 嵌入式Linux下LCD屏驱动程序框架
嵌入式Linux下LCD屏驱动源码分析
嵌入式Linux下LCD屏驱动的移植
下午 实验目的:
深入理解嵌入式Linux LCD屏设备驱动,练习嵌入式Linux LCD屏设备驱动的移植与开发;
任务描述:
在移植的Linux内核上增加对LCD屏驱动的支持.
读Linux内核LCD屏驱动源码,完成LCD屏驱动源码分析笔记
第 九 天
上午 嵌入式Linux网卡驱动程序设计
S3C2440与网络芯片DM9000的接口电路分析
网络芯片DM9000的硬件工作原理
下午 实验目的:
深入理解S3C2440与DM9000的接口电路及DM9000的硬件工作原理,练习DM9000的硬件编程。
任务描述:
裸机环境下完成DM9000驱动程序,完成ARP报文的收发。
第 十 天
上午 嵌入式Linux下网卡驱动程序框架
Linux下网络协议栈分析
嵌入式Linux网络驱动源码分析
嵌入式Linux网卡驱动移植
下午 实验目的:
深入理解嵌入式Linux网卡驱动框架,练习嵌入式linux环境下网卡驱动的移植
任务描述:
在移植的Linux内核上增加对DM9000网卡驱动的支持。
读linux DM9000网卡驱动源码,完成源码分析理解笔记;
第十一天
上午 嵌入式Linux Nor Flash驱动程序设计
嵌入式Linux Nor Flash硬件工作原理及电路原理图分析
嵌入式Linux MTD子系统框架及源码分析
嵌入式Linux Nor Flash驱动程序源码分析
下午 实验目的:
深入理解嵌入式Linux环境下MTD子系统的工作原理,练习嵌入式Linux环境下NorFlash驱动编程。
任务描述:
在移植的Linux内核上增加对NOR FLASH驱动的支持;
读Linux NorFlash驱动源码,完成源码分析理解笔记
第十二天
上午 嵌入式Linux NAND FLASH驱动程序设计
NAND FLASH硬件工作原理及NAND FLASH操作流程
S3C2440 NAND FLASH控制器接口及电路原理图分析
NAND FLASH读写时序分析
下午 实验目的:
深入理解NAND FLASH的操作流程,练习NAND FLASH硬件编程
任务描述:
裸机环境下完成FL2440上NAND FLASH驱动程序,实现对NAND FLASH的读、写、擦除操作。
第十三天
上午
嵌入式Linux NAND FLASH驱动程序框架
嵌入式Linux NAND FLASH驱动程序源码组织
嵌入式Linux NAND FLASH驱动程序源码分析
嵌入式Linux NAND FLASH 函数调用流程
下午
实验目的:
深入理解嵌入式Linux NAND FLASH驱动框架,练习嵌入式Linux下NAND FLASH驱动程序开发
任务描述:
在移植的Linux内核上增加对NAND FLASH的支持;
读Linux nand flash驱动源码,完成源码分析理解笔记
第十四天
上午
嵌入式Linux 触摸屏驱动程序设计
电阻式触摸屏硬件工作原理
S3C2440触摸屏接口电路原理图分析
嵌入式Linux触摸屏驱动程序框架
下午 实验目的:
深入理解触摸屏硬件工作流程,练习S3C2440下触摸屏硬件工作编程
任务描述:
裸机环境下完成基于S3C2440的触摸屏驱动程序,实现对触摸上位置坐标的测量
第十五天
上午 嵌入式Linux触摸屏驱动程序源码分析
嵌入式Linux输入子系统框架
嵌入式Linux输入子系统工作原理
嵌入式Linux输入子系统源码分析
下午 实验目的:
深入理解嵌入式Linux触摸屏、输入子系统程序框架,练习嵌入式Linux下触摸屏及其他输入设备的驱动程序开发。
任务描述:
在移植的Linux内核上增加对触摸屏驱动的支持
读Linux触摸屏驱动源码,完成源码分析笔记
第十六天
上午 嵌入式Linux I2C总线驱动程序设计
I2C总线硬件工作原理及电路原理图分析
I2C总线时序分析
S3C2440 I2C总线控制器工作原理
下午 实验目的:
深入理解I2C总线硬件工作原理,练习I2C总线硬件编程
任务描述:
裸机环境下完成S3C2440 I2C总线硬件编程,通过I2C总线驱动读写EEPROM AT24C02
第十七天
上午 嵌入式Linux I2C总线驱动程序框架及源码组织
嵌入式Linux I2C 控制器驱动
嵌入式Linux I2C 核心
嵌入式 Linux I2C 设备驱动程序源码分析
下午 实验目的:
深入理解嵌入式Linux I2C总线驱动程序框架,练习嵌入式Linux下I2C设备驱动程序的开发
任务描述:
在移植的linux内核上增加对I2C设备AT24C02的驱动支持
读I2C总线驱动源码,完成I2C总线设备驱动源码分析笔记
第十八天
上午 USB设备基本概念,USB设备,接口,端口,传输模式
USB主控制器,USB设备,
S3C2440 USB主控制器介绍及USB主控制器接口
USB总线控制器驱动框架
下午 USB主控制器源码分析
第十九天
上午 USB设备驱动程序框架及源码组织
USB核心子系统
USB设备驱动程序开发一般方法
USB请求块
下午 EZ-USB Cy7c68013a-56 USB2.0 开发板介绍及原理
EZ-USB Cy7c68013a-56 USB2.0 开发板的使用
第二十天
实验目的:
深入理解linux下USB设备驱动框架,练习嵌入式Linux下USB设备驱动程序开发。
任务描述:
开发EZ-USB Cy7c68013a-56 USB2.0 开发板的嵌入式Linux设备驱动程序,在FL2440开发板上通过USB接口控制EZ-USB Cy7c68013a-56 USB2.0 开发板的LED灯。
读Linux USB设备驱动源码,完成源码分析笔记