《嵌入式Linux定向学习》课程大纲
第一阶段适合Linux开发零基础学员,目的是掌握嵌入式Linux应用开发基本技能,能编写实际有用的嵌入式Linux应用软件;第二阶段适合已经具备嵌入式Linux基本开发能力的学员,目的是掌握嵌入式Linux系统移植关键技术(BootLoader、Kernel、根文件系统、QT、Android等);第三阶段适合已经具备嵌入式Linux基本开发能力的学员,目的是掌握嵌入式Linux内核/驱动开发技术(按键加LED控制、LCD设备、触摸屏设备、网卡设备、NandFlash设备、摄像头设备等驱动)。
第一阶段(5周)《嵌入式Linux应用开发》
本阶段实训课程针对计算机、电子类相关专业,嵌入式Linux开发零基础学员量身设计,该课程是嵌入式Linux应用开发的入 门课程,也是嵌入式Linux工程师必须要掌握的基本技能。本阶段的学习目标:
√ 掌握Linux下Vi/GCC/GDB/Makefile等常用开发工具
√ 掌握Linux下的指针、结构体、数据结构等编程技能
√ 掌握嵌入式Linux系统下的文件操作编程
√ 掌握嵌入式Linux系统下的网络应用编程
√ 掌握嵌入式Linux系统下的串口应用编程
√ 掌握嵌入式Linux系统下IPC编程
√ 掌握嵌入式Linux系统下的C++开发
√ 独立完成一个嵌入式Linux应用工业控制应用开发项目
一、Linux开发环境
熟悉Linux系统的安装、常用命令、SHELL编程,掌握Linux下Vi/GCC/GDB/Makefile等常用开发工具,理解编译和链接的过程,区分静态链接/静态库与动态链接/动态库各自的优缺点。
C语言的嵌入式开发强化
深入学习嵌入式开发中应用C语言所需要掌握的重点和难点,包括指针(尤其是字符串指针、函数指针等疑难点)、内存
分配(分清堆、栈和全局内存,理解堆、栈和栈帧的工作原理)、位运算、结构体和联合体等,并结合重要的数据结构知识,如链表、队列、树等来讲解C语言。熟悉Linux下所用的AT&T汇编
语言
二、系统高级C编程
掌握Linux系统环境中的高级C语言编程,包括进程与线程、进程间通信(管道、命名管道、共享内存、消息队列、信号
等)、文件I/O编程、串口编程、网络编程(包括TCP/IP协议、socket编程、HTTP协议和WEB服务器编程等)。
三、C++语言的嵌入式开发强化
掌握嵌入式开发中所需要掌握的C++的重点和难点,包括构造函数/析构函数与内存管理、继承与虚函数、C++对象模型、 面向对象分析与设计(OOD)及设计模式基础知识等。
四、项目开发实践
独立完成一个嵌入式Linux应用开发项目,基于Linux 2.6平台,该项目在开课后提前布置给学员,综合了第一阶段学习
内容中的各个要点,学员在学习过程中就可以陆续实现该项目。通过该项目的实现情况,可以衡量学员掌握嵌入式Linux应用开发的实际水平。
第二阶段(6周)《嵌入式Linux系统移植》
本阶段实训课程针对计算机、电子类相关专业,并且已经掌握第一阶段内容的学员,通过该课程学习使得学员能够掌握嵌入式Linux系统移植与开发的核心内容。
本阶段学习目标:
√ 掌握ARM体系结构,基于X86/ARM平台下的Linux内核升级
√ 掌握U-boot、Linux内核的嵌入式平台移植
√ 掌握根文件系统概念,学会移植Cramfs/Yaffs文件系统
√ 掌握移植Qt/Embedded GUI库的移植与嵌入式GUI编程
√ 掌握Android软件平台的移植与软件开发
√ 独立完成一个实际移植项目,包括U-boot、kernel,根文件系统以及GUI库移植
具体内容安排
一、ARM体系结构
掌握ARM体系结构介绍及其基本编程方法ARM指令,包括ARM体系处理器结构,指令分类寄存器,寻址方式、汇编指令集
及伪指令、存储系统、异常中断处理、汇编语言与C语言混合编程等知识。
二、Bootloader移植与开发
掌握如何移植U-boot到ARM平台,并掌握U-boot的具体工作原理与应用;同时通过学习Bootloader的工作原理,学习如
何开发用于ARM的简单Bootloader。
三、内核移植
基于X86/ARM平台升级Linux内核,包括配置、编译、安装Linux内核。Linux内核配置,内核编译和安装Linux内核是嵌 入式Linux系统移植工程师必须要掌握的基本技能。本课程通过实际操作使学员完全掌握升级Linux内核技能。移植Linux 2.6 内核到ARM平台。
四、根文件系统移植
根文件系统概念,移植Jffs2文件系统。根文件系统是嵌入式Linux的重要组成部分,Jffs2文件系统是被广泛应用于嵌
入式Linux系统的一种文件系统。本课程不仅要求学员理解根文件系统的概念,而且要掌握移植Jffs2文件系统的方法。
五、Qt/Embedded移植与开发
掌握如何移植Qt/Embedded
GUI库到ARM平台,深入学习应用Qt/Embedded进行嵌入式GUI开发的要点,包括信号与槽、对
象模型、事件机制、国际化、进程间通信等,并应用Qt/Embedded完成一个嵌入式GUI开发的实践项目。Qt/Embedded是基于Qt的目前最流行的嵌入式GUI和应用程序开发的工具包,它可运行多
种嵌入式设备上基于C++进行开发,主要运行在嵌入式Linux系统上,并且需要C++编译器的支持,并为嵌入式应用程序提供Qt的标准API。本课程要求学员能独立移植Qt/Embedded库到嵌入 式Linux平台。
六、Android移植与开发
移植掌握Android软件平台的移植,并熟悉Android平台的框架、掌握Android平台编程的基本概念与要点,并开发基于 Android的实践项目。Android 是Google开发的基于Linux平台的开源手机平台操作系统。,是目前最热门的嵌入式开发的研究领域,它包括操作系统、用户界面和应用程序等软件,而且不存
在任何以往阻碍移动产业创新的专有权障碍。Android平台是现在和将来手机操作系统的发展方向之一。
本课程要求学员能独立移植Android软件到嵌入式Linux平台。包括摩托罗拉、三星、 LG、T-Mobile、中国移动等在内的各大厂商和运行商都正在展开Android的研发工作。
七、项目开发实践
完成一个完整的实际移植项目,基于ARM9+Linux 2.6平台,包括U-boot、kernel,根文件系统以及GUI库移植。该项目
在开课后提前布置给学员,学员在学习过程中就可以陆续实现该项目,通过该项目的实现情况,可以衡量学员掌握嵌入式Linux系统移植的实际水平。
第三阶段(6周)《嵌入式Linux驱动/内核开发》
嵌入式Linux内核驱动开发第一品牌
本阶段实训课程针对计算机、电子类相关专业,已经掌握嵌入式Linux应用开发以及熟悉嵌入式Linux系统移植 的学生。通过该课程学习,
至少能掌握以下核心技能:
√ 掌握Linux内核模块、内核Makefile、Kconfig的组成原理;
√ 掌握Linux设备驱动模型、Linux中断子系统实现原理;
√ 掌握Linux内核打印调试技术和KDB调试技术;
√ 学会看懂芯片手册(datasheet)、电路原理图;
√ 独立编写字符设备驱动:编写基于ARM的GPIO驱动控制按键、LED等外部设备;
√ 独立编写基于ARM芯片Framebuffer设备驱动、触摸屏设备驱动;
√ 独立编写基于ARM芯片NandFlash芯片驱动程序;
√ 独立编写基于ARM芯片DM9000网卡驱动程序;
√ 完成一个实际应用的ARM嵌入式Linux系统的ov9650摄像头设备驱动开发项目,ov9650摄像头以被广泛应用与安防监控、手机摄像头等领域,属于典型的嵌入式设备
驱动。
具体内容安排:
一、Linux驱动/内核开发基础
掌握Linux内核开发的基础知识,包括内核/驱动开发的特点(如不能访问C库、没有内存保护、同步与并发等),基本
的内核调试技术(printk, oops, gdb/kdb/kgdb等),基于Linux内核的打印调试技术和KDB调试技术。Linux内核调试是内核/驱动开发人员必须要掌握的基本技能。本课程要求学员熟练 Linux内核的多种调试技术模块的开发、编译、加载及卸载,Linux设备驱动模型,驱动程序与硬件、内核(通过虚拟文件系统)及应用程序(通过系统调用)如何交互。
二、字符设备驱动开发
ARM芯片的GIPO控制驱动实现,基于嵌入式Linux2.6内核的字符设备驱动开发,Linux中断子系统的实现过程。针对具体
的实际应用字符设备驱动进行编程学习。本课程要求学员掌握Linux字符设备驱动开发的基本��识,能够独立编写控制硬件外设的字符设备驱动程序。
三、Framebuffer驱动、触摸屏驱动开发
ARM嵌入式Linux下Framebuffer驱动开发,针对嵌入式设备上的LCD驱动进行编程学习,触摸屏设备驱动的代码实现。本
课程要求学员掌握Linux的Framebuffer设备驱动、触摸屏设备驱动开发的基本知识,能够独立编写LCD显示设备、触摸屏驱动程序。
四、块设备驱动开发
基于ARM嵌入式Linux2.6内核的块设备驱动开发,针对具体的实际应用块设备驱动(NandFlash设备驱动)进行编程学习
,掌握Nandflash控制器的硬件接口。本课程要求学员掌握Linux块设备驱动开发的基本知识,能够独立编写块设备驱动程序。
五、网络设备驱动开发
基于ARM嵌入式Linux2.6内核的网络设备驱动开发,针对具体的实际应用网卡设备(DM9000网卡芯片)驱动进行编程学
习,学习TCP/IP协议栈与网络设备驱动的交互关系、网络数据包从物理层到应用层的数据流程。本课程要求学员掌握Linux网络设备驱动开发的基本知识,能够独立编写网络设备驱动程序。
六、项目开发实践
完成一个应用广泛的实际驱动开发项目,基于ARM9+Linux 2.6平台,实现ov9650摄像头设备驱动程序,编写测试和拍照
摄像头应用程序。该项目在开课后提前布置给学员,学员在学习过程中就可以陆续实现该项目,通过该项目的实现情况,可以衡量学员掌握嵌入式Linux内核/驱动开发的实际水平。