参考培训机构
D-UEA嵌入式开发教学大纲-标准化-201001
就业课程 2010-07-29 15:15:49 阅读2 评论 字号:大中小 订阅
嵌入式Linux内核驱动核心开发者 - 长期就业课程
■ 课程描述:市场上嵌入式培训鳞次栉比,什么是真正的嵌入式培训?众所周知嵌入式开发包含至少两个级别,一个是嵌入式内核驱动级别,另外一个是嵌入式应用层开发,而薪酬高的,最具价值的无疑是嵌入式内核驱动级别的开发者。识别一个嵌入式培训的好坏的标准就是,学生能不能真正进行内核驱动的编程。尚观嵌入式内核驱动核心开发者让学员从零开始自己写至少5种驱动程序,完全Linux下进行实际代码开发,绝不按照所谓的PPT进行照本宣科,尚观配备2440开发板+触摸屏+仿真器,让学员编程立竿见影。共18周授课,每天面授6小时,有辅导老师帮助下自习4小时,强制晚上9点回家
■ 教学目标:强调从零开始写至少5种Linux驱动,让学员真正掌握ARM平台的Linux内核驱动的核心编程能力,让学员可以熟练掌握ARM汇编、ARM体系结构、ARM平台的直接控制程序(裸驱动)。同时学员将会在ARM开发板上直接自己动手书写硬件控制程序以及Bootloader等,一定不是简单的移植,而是真正理解并且亲自书写。
■ 面向行业及岗位:
消费类电子(手机、PDA、游戏机)、数字多媒体(网络点播、机顶盒)、汽车电子(导航仪)、医疗电子、工业控制等行业的研发工程师,软件工程师,嵌入式软件工程师,
■ 培养对象
希望掌握ARM平台底层编程技术的学员;以及希望从事移动终端开发的爱好者、工程师、程序员、已及相关行业的工程技术人员;有志于从事嵌入式核心研发的软件开发技术人员和正在学习计算机、软件、通信专业的学生,以下是主要应用方向
◆ 手机内核驱动软件开发;
◆ 智能设备的驱动软件开发;
◆ 芯片公司的操作系统级开发;
◆ 智能操作系统平台驱动研发
■ 课程特 {MOD}
◆全国唯一,从零开始手写至少5款驱动,绝非驱动的普通移植,真正的嵌入式核心培训,触摸屏驱动、LCD驱动、音频驱动、网卡驱动、Watch Dog(看门狗)驱动及相应的DMA驱动的编写。能否写出驱动是衡量嵌入式培训水平的唯一标准
◆全程实际开发产品伴随,最后学员做一个真正的设备,核心部分使用自己的编码,可以作为求职时的项目经验,高强度授课,全部项目型教学,每个环节都有案例
◆从零开始手写Linux驱动和控制程序,直接用自己的代码控制处理器
◆三星2440开发板+触摸屏+仿真器,让学员的程序立刻可见
◆全部Linux平台开发环境,真正真实工作环境开发,拒绝Windows下模拟,拒绝照PPT照本宣科
◆全程不下20个实际的案例,包括手写驱动,网络攻击程序分析等
◆共18周授课,每天面授6小时,有辅导老师值班下自习4小时,强制晚上9点回家
■ 全真项目设计
基于ARM9 S3C 2440芯片的智能手持设备(PDA)开发项目(嵌入式开发板+触摸屏)或者是一个手持的VOD视频点播系统,二者选其一。所有内容都围绕实际项目,本设备可以直接作为MP4/MPM使用,也可以转为网络智能播放器,智能手机,GPS。我们的设备不只有开发板还有触摸屏,尚观会让学员完成一个完整设备,真正让学员拥有一个工作经验,对找工作具有直接的推动作用。同时这个设备可以作为面试时的项目经验。以下为ARM手持平台的VOD项目:系统结构图 、UML活动图、UML类图、UML用例图:
■ 课程大纲:(共17周授课,每天面授6小时)
◆嵌入式高级部分
第一、C++程序设计
第二、Linux系统程序 POSIX等 设计
第三、Linux网络程序 Socket套接字 程序设计
第四、ARM平台开发与ARM体系结构、ARM汇编 裸板驱动(手写驱动的第一部分)
第五、Linux移植、Linux驱动在ARM平台下的移植 、Linux内核原理与结构,Linux设备驱动(手写驱动第二部分)、从零手写5种以上的驱动程序、基于S3C2440 ARM平台的 PDA智能大型项目全真开发项目
嵌入式高级部分案例实践(根据地区及老师的不同,案例略有不同):
C++程序设计
a、成绩管理系统(STL实现)
b、模板库的实现(MyTL
c. 编写自己的图片浏览器
Linux系统程序设计
a、串口监听程序
b、图片浏览器
c、MP3播放器
Linux网络程序设计
a、聊天程序
b、ftp程序
c、音频广播程序
d、ping的实现
e、DDos攻击程序
f、ARP攻击程序
ARM嵌入式开发
1. ARM模拟器开发
2. Watchdog控制程序
3. RTC时钟控制程序
4. Uart控制程序
5. LCD控制程序
6. 触摸屏控制程序
7. DMA控制程序
8. 音频控制程序
9. 网卡控制程序
10. 文件系统制作
11. ARM-Linux移植
Linux设备驱动程序
1. GPIO驱动
2. RTC时钟驱动
3.WatchDog驱动
4. Udev移植
5.触摸屏输入设备驱动
6. LCD显示设备驱动
7. DMA驱动
8.音频设备驱动
9. Nand Flash块设备驱动
10.网络设备驱动
◆嵌入式基础部分
第一、Linux操作系统基础
第二、Shell编程
第三、C语言程序提高,专为让C语言提升到可以实用而设计
第四、数据结构与C语言结合成为实际开发实例
嵌入式基础部分案例实践(根据地区及老师的不同,案例略有不同):
嵌入式C强化部分案例
a. 自己设计一个指法练习的游戏程序
b. 自己设计一个汉诺塔游戏
数据结构部分案例
a.成绩管理系统
b、计算器
c、电子词典
d、文件压缩器
■详细教学内容及目标
------------------- 第二部分 高级部分-----------------------
(第一部分 基础部分大纲在后部)
一、C++程序设计(3天)
教学目标: 能够利用C++的特性编写各种数据结构算法
案例实践:
1、成绩管理系统(STL实现)
2、模板库的实现(MyTL)
1、C++基础
. 面向对象思想
. C语言的面向对象
. C++的类
. C语言与C++面向对象实现方式的对比
. 友元
. 构造, 拷贝构造函数
. C++的编译原理, 与C、汇编的互相调用
2、高级特性
. 继承
. 多重继承
. 虚函数与纯虚类
. 操作符重载
. 命名空间
. 静态函数
3、泛型技术
. 模板函数
. 模板类
. STL的使用
. STL的实现
项目实践(5天):俄罗斯方块
用VT控制码结合数据结构的知识来实现。
二:linux系统程序设计(7天)
教学目标: 熟悉应用各种系统调用
教学案例:
1、串口监听程序
2、图片浏览器
3、MP3播放器
1、系统I/O
. 文件操作
. 终端
. 规范及非规范模式
. select与poll
. mmap
2、进程
. 进程的创建
. 进程地址空间
. 进程的控制终端
. 僵尸进程
. 孤儿进程
3、进程组与信号
. 进程组
. 会话的建立
. 守护进程
. 常见的系统信号
. 信号的注册
. 信号处理
4、进程间通信
. FIFO
. PIPE
. 共享内存
. 信号灯
. 消息队列
5、线程
. 线程的创建
. 线程的属性
. 取消状态与取消点
. 线程的退出及状态检测
. pthread_mutex
. pthread_cond
6、图形程序设计
. Frame Buffer的操作
. 位图原理与显示
. 矢量图形操作的实现
. Freetype操作与矢量文字的显示
. Xlib/QT/GTK简介
7. 音频处理与事件获取
. 音频原理
. OSS音频程序设计
. 键盘事件获取
. 鼠标事件获取
. Unicode字符获取
七、嵌入式网络程序设计(3天)
教学目标: 熟悉TCP/IP, 熟悉一般的网络服务器程序
教学案例:
1、聊天程序
2、ftp程序
3、音频广播程序
4、ping的实现
5、DDos攻击程序
6、ARP攻击程序
1、TCP程序设计
2、网络程序进阶
. UDP传输
. 广播程序设计
. 多播程序设计
3、网络攻击
. 原始套接口程序设计
. DDos攻击原理
. ARP攻击原理
项目实践(5天):网络视频播放系统
利用所学的网络、图形、声频知识构建一个完整的网络点播系统,核心解码部分
可用MPlayer的相关部分。
八、ARM嵌入式开发 (20天)
教学目标: 熟悉ARM微处理结构、指令和常用外围器件
教学案例:
1. ARM模拟器开发
2. Watchdog控制程序
3. RTC时钟控制程序
4. Uart控制程序
5. LCD控制程序
6. 触摸屏控制程序
7. DMA控制程序
8. 音频控制程序
9. 网卡控制程序
10. 文件系统制作
11. ARM-Linux移植
1、嵌入式系统移植
. 仿真器的使用
. Bootloader的烧写
. 内核的烧写
. 根文件系统的制作
. 文件系统的烧写
. NFS文件系统
. 开发板串口通信
2、ARM体系结构
. IP核、芯片与开发板
. 处理器结构
. 处理器模式
. 寄存器
. 流水线结构
. C语言内嵌汇编格式
3、ARM指令系统
. 算术逻辑指令
. 指令对状态寄存器的影响
. 比较分支指令
. 数据总线与地址总线
. 内存访问指令
. 指令位图
. 识别机器指令
4、ARM过程调用标准
. LDM/STM
. 反汇编
. APCS
. C语言函数与汇编的互相调用
5、ARM 汇编与GPIO
. AT&T汇编语法详解
. gas工具的使用
. label标签的作用
. 数据与代码的分布
. 链接脚本ld-script
. 的外围器件结构
. GPIO操作
6、时钟与UART
. 总线标准
. 频率分配与设置
. Watchdog计时操作
. RTC时钟操作
. UART操作
7、ARM中断体系
. 异常向量表
. ARM模式切换
. ARM中断控制器
. 软中断
. Linux系统调用的实现
8、 Nand Flash
. . Flash原理
. Nand控制器原理
. 时序分析
9、SDRAM
. 物理地址分布
. SDRAM原理与时序
. 内存控制器的物理连接
. 地址对齐
. SRAM访问
. 软中断
. Linux系统调用的实现
10、内存管理单元(MMU)
. MMU的原理
. ARM协处理器指令
. section模式
. small page模式
. I & D TLBs
. I & D Cache
. 哈佛结构的原理与实现
11、触摸屏与ADC
. ADC原理
. 触摸屏接口与控制
12、LCD
. 图形显示原理
. LCD控制器
. LCD时序
13、音频与DMA
. 音频硬件原理
. UDA1341
. L3总线
. 音频总线时序
. DMA原理与应用
14、网卡
. 逻辑链路层与MAC层
. CS8900原理与时序分析
15、Bootloader开发
. u-boot的配置、编译
. u-boot启动过程分析
. ARM-Linux的启动要求
. ARM-Linux kernel的ld-sript分析
. u-boot到ARM-Linux的跳转代码分析
项目实践 (5天):Bootloader开发
完全自主开发一个能够引导Linux的Bootloader,需具备tftp、nand烧写等功能。
九、Linux设备驱动程序 (20天)
教学目标: 熟悉内核的裁剪、移植及设备驱动开发
教学案例:
1). GPIO驱动
2). RTC时钟驱动
3).WatchDog驱动
4). Udev移植
5).触摸屏输入设备驱动
6). LCD显示设备驱动
7). DMA驱动
8).音频设备驱动
9). Nand Flash块设备驱动
10).网络设备驱动
1、ARM-Linux启动过程
. ARM-Linux的配置、编译
. ARM-Linux启动代码分析
. ARM-Linux 地址映射;
. Busybox的配置、编译
2、内核配置与内核模块
. 内核配置编译
. 补丁的制作
. 内核补丁
. 内核Makefile
. Kconfig的编写
. 模块的编译与加载
. 导出符号
. 引用计数
. 内核空间与用户空间的区别
. printk
. 模块参数
3、设备驱动初步
. Linux的VFS简介
. 设备文件与设备号
. 字符设备
. cdev结构
. 用户空间的操作与设备操作关系
. open、release、read、write、lseek、ioctl等
4、进程调度
. 定时器中断
. task_struct的作用
. thread_info
. 抢占与非抢占
. 进程睡眠
. 等待队列
. 阻塞I/O与非阻塞I/O
. select/poll
5、并发控制
. 原子操作
. 自旋锁
. 禁用抢占
. 中断屏蔽
. 信号量
. completion
6、内存管理
. 虚拟地址空间与MMU
. 内核页管理机制
. 内核内存分配
. 高端内存
. vmalloc
. 统一编址与独立编址
. I/O端口与I/O内存
. I/O静态映射
. mmap
7、内核计时
. 内核计时jiffies
. timer
. tasklet
. work_struct
. Linux信号
. fasync的实现
. RTC时钟驱动
8、中断系统
. 中断机制
. 异常向表相关代码分析
. 中断号的确定
. 上半部与下半部
. 中断共享
9、设备驱动模型
. kobject、kset、class、subsystem与sysfs的原理和关系
. udev的原理与移植
. bus_type
. device与device_driver原理
. platform_device的应用
10、触摸屏驱动
. ARM-Linux Input设备详解
. 触摸屏控制
11、LCD驱动
. Frame Buffer驱动详解
. LCD控制
12、音频设备驱动
. OSS驱动详解
. I2S控制
13、块设备驱动
. 块设备的注册
. 块设备的I/O的特点
. I/O请求
14、网卡驱动
. 设备注册
. 驱动层数据收发
. 地址解析
15、ARM-Linux裁剪与移植
. 新版内核移植
. 驱动整合
项目实践(5天):ALSA音频驱动开发
开发ALSA音频驱动,并移植相应的ALSA LIB,再编写相应的应用程序。
本设备可以直接作为智能手持VOD、MP4/MPM使用,也可以转为网络智能播放器,智能手机,GPS
S3C2440芯片是目前几乎市面上所有正在销售GPS等设备的ARM芯片,有大量的实际智能设备基于这款芯片,我们使用S3C2440作为主要的ARM9平台智能PDA设备有非常重要的意义。可以让学员的就业非常广阔。尚观作为对嵌入式有5年经验的最早嵌入式职业培训机构,该项目经过专门的设计。
我们的项目在ARM9 S3C2440上实现,全程Linux平台开发设计,全程开发板实验,整个项目涉及到核心为Linux内核驱动、ARM体系结构、ARM汇编,网络数据传输、QT图形界面、mplayer移植、触摸屏驱动、LCD驱动、音频驱动、网卡驱动、Watch Dog(看门狗)驱动及相应的DMA驱动。除了mplayer解码器部分外,其它所有应用程序和驱动程序全部由我们从零编写,而不是简单的"移植驱动程序", 并且几乎含盖了嵌入式软件中的各个方面。可以从根本上学习整个嵌入式产品从硬件选型、电路设计、Bootloader开发、操作系统移植、驱动开发、应用开发、网络传输的各个细节,并能锻炼项目领导和团队合作能力。
以下为ARM手持平台的VOD项目:系统结构图 、UML活动图、UML类图、UML用例图:
项目优势
. 监控设备公司 监控设备方面的公司一般应用嵌入式对多个监控区域进行实时监测、录像。而一般的公司基于成本考虑,都要自行设计硬件,主流用ARM.所以上面就会涉及到触摸屏驱动、LCD驱动、音频驱动、网卡驱动、Watch Dog(看门狗)驱动及相应的DMA驱动的编写, 另外还会涉及到应用部分图象的显示等。也就是说,在上述项目稍作变更就成为一个GPS设备、智能手机、MPM播放器。
从事该项目的学员的目标职位:
目标职位: 驱动开发工程师 智能手机公司
智能手机是典型的嵌入式系统,随着用户对功能需要的增加、网络应用在手上的普极,手机大多采用ARM. 因为ARM最大的优势就在移动消费性电子领域而对于手机来讲,最常规的需求就是图形、声音和操作。而上述项目正好涉及到这些驱动以及相关应用的开发。可以毫不费力的胜任这些工作.
目标职位: 驱动开发工程师 . 数码影音产品公司
数码影音产品(mp3/mp4/MPM)很大程度就是一个不带通信模块的智能手持设备
目标职位: 驱动/应用开发工程师. 数字机顶盒公司
数字机顶盒的操纵界面和图像数据的输出,都离不开上述驱动和应用。而且在技术日趋成熟,机顶盒对联网功能的需求越来越明显,特别是网络电视等新兴媒体的出现,所以在机顶盒中也越来越多的采用网络,所以网络驱动及网络应用程序开发在这些产品中同是核心功能.
目标职位: 驱动/应用开发工程师 . GPS导航仪公司
GPS的一个重要的功能就是用户界面操作、图形显示及语音提示,上述项目完整包含此类驱动开发及相关应用开发,上述开发经验非常容易胜任此类工作.
目标职位: 驱动/应用开发工程师 . 游戏机公司
90年代产生的街机几乎陪伴了一代人的成长,也造就了许多经典游戏的出现。那时的街机都专用主板。一个街机只能玩一个游戏。后来发展到GVD,可以一机兼容多个游戏,但游戏必须是同一公司的同类产品。到了90年代末,新的街机直接采用pc机,内嵌模拟器的形式,通过装载不同的游戏文件,就能运行不同公司的游戏,直接解决游戏的平台问题。但是PC平台价格昂贵(这也是嵌入式系统出现的原因), 所以越来越的游戏机厂商采用ARM来做了运行模拟器,以节约成本,提高竞争力。因为游戏也是依靠交互性、图形和声音的体现的一类产品,所以游戏机模拟器的开发和移植都离不开上述驱动和应用开发的经验。另外还有掌机以及电视家用机也越
来越多的采用ARM平台以降低成本.
目标职位: 驱动/应用开发工程师 . 工控/行业产品公司
在众多的生产线上,如印刷机、数控机床、线切割机、贴片机等等,为了节约生产力,早在80年代末期,就开始产用电脑系统进行控制。但是由于欧美国家掌握大量的关键技术, 生产线引进成本昂贵。所以国内很多生产线还是采用 486 + DOS的过时生产线控制系统。随着嵌入式普及,国内最早从事工业控制领域的研祥工控、华北工控等公司已开始慢慢转型向成本低、可控性好、操作简便的ARM嵌入式系统,并用触摸屏来设定参数。这些领域也离不开相应的驱动和应用开发。
目标职位: 驱动/应用开发工程师 . 检测仪器/医疗设备公司
如汽车故障检测设备,可视化医疗检测设备等,都需要网络传输、图形显示、声音提示及友好的操控界面等。上述项目知识是不可或缺的。
学员就业公司有:阿尔卡特朗讯、华为、中兴、中软、台湾台达集团、科达通讯、华亨、海思半导体、北京中星、风河、博世、龙芯、Moto Broadcom等智能设备及芯片提供商
--------------------- 第一部分 基础部分------------------
一、Linux系统基础 (3天)
教学目标: 能比较熟练的安装、操作Linux系统, 并能配置开发环境与常用服务.
1.Linux基础
. 系统安装
. 帮助系统
. 文件管理
. 用户组
. 文本处理与编辑
2. Linux常用命令
. 查找
. 压缩
. 输入/出重定向
. 管道
. 启动脚本
. 软件安装
. x-window
3. Linux网络配置
. TCP/IP简介
. 网卡配置
. DNS配置
. nfs
. ssh
二、shell程序设计(2天)
教学目标:能用Shell处理简单的批量化工作
1.Bash Shell初步
. 变量
. 运算符
. 流程控制
. 环境变量
2、Bash Shell进阶
. 文件操作
. 函数
. 输入输出
三、C语言程序设计 (10天)
教学目标: 能设计普通的应用程序
案例教学:)a、指法练习程序
b、汉诺塔游戏
1.C语言基础
. C语言的特点
. 数据类型
. 运算符
. 表达式
. 关系运算符
. if 语句
. switch 语句
. 循环语句
2. 函数
. 函数的声明和定义
. 形参与实参
. 递归 .
3. 数组
. . 数组的定义
. 整型数组
. 字符数组
. 字符串
. 数组名的意义
. 多维数组
4. 指针
. 指针的定义
. 指针运算符
. 指针的加减
. 动态内存分配
. 堆与栈
5、数组指针
. 指针数组
. 数组指针
6. 预编译与VT控制码
. 声明与头文件
. 静态链接库
. 动态链接库
. ANSI VT控制码
7. 组合数据类型
. 结构体
. 结构体指针
. 枚举
. 共用体 (联合)
8. 指针高级应用
. 二级指针
. 三级指针
. 多级指针
. 函数指针
. C语言与面向对象
9.文件操作
. 标准I/O (fopen)
10、辅助开发工具
. Makefile的编写
. GDB的使用
. CVS与配置管理
四、数据结构 (7天)
教学目标: 熟悉常用的数据结构与算法
教学案例: 1、成绩管理系统
2、计算器
3、电子词典
4、文件压缩器
1.单向链表
.. 链表的创建
. 链表的遍历
. 结点的添加、删除
. 基于函数指针的查找
2、Linux内核链表
. 双向链表
. Linux内核链表的创建
. List结构的作用
. 有头与无头链表
3、排序及查找
. 冒泡排序
. 快速排序
. 选择排序
. 查入排序
4、Hash表
. Hash算法
. Hash表的创建
. 遍历
5、队列和堆栈
. . 数组存储
. 链式存储
6、树与二叉树
. 数组存储
. 链式存储
. 权值的概念
. Huffman树
. Huffman编码
7、广义表
. 组合链表的应用
. 广义表