嵌入式Linux智能实训大纲
一、 什么是嵌入式
通俗理解,把计算机嵌入到各种设备中,如机械控制设备、汽车控制设备、航天设备、环境监测设备、家电设备等,并且通过计算机来控制设备完成自动化、智能化的操作。让原有的设备具有更高性能、更友好操作,并且具有自动化、智能化的功能。 所谓嵌入式系统,是指以应用为中心,以计算机技术为基础,软硬件可裁剪的自动化设备。一般由嵌入式处理器、外围硬件设备,嵌入式操作系统以及用户应用程序等四个方面,用于实现对其他设备的控制、监视或管理等功能。它是将先进的计算机技术、半导体技术和电子技术和各个行业的具体应用相结合的产物,这一点就决定了嵌入式系统必然是一个技术密集、资金密集、高度分散、不断创新的知识集成系统。
上海怡胜信息科技有限公司专门从事嵌入式人才培养及服务。并且有对外提供全免费的学习平台:www.dsitit.com,有全套的的免费学习视频,包括
《linux开发基础》、《嵌入式C编程》、《嵌入式C++编程》、《数据算法》、《网络编程》、《系统编程》、《嵌入式系统移植》、《嵌入式linux驱动开发》、《QT图形UI开发》、《python编程》、《游戏开发》、
《SHELL脚本编程》。
二、 嵌入式应用与发展趋势
1.2.1 嵌入式智能开发系统应用
嵌入式智能开发系统的应用前景是非常广泛的,人们将会无时无处不接触到嵌入式产品,从家里的洗衣机、电冰箱、到作为交通工具的自行车、小汽车,到办公室里的远程会议系统等等。在家中、办公室、公共场所,人们可能会使用数十片甚至更多这样的嵌入式无线电芯片,将一些电子信息设备甚至电气设备构成无线网络;在车上、旅途中,人们利用这样的嵌入式无线电芯片可以实现远程办公、远程遥控,真正实现把网络随身携带。下面介绍几种具体的应用。
(1)智能家居
又称智能住宅,在国外常用Smart Home表示。与智能家居含义近似的有家庭自动化(Home Automation)、电子家庭(Electronic Home、E-home)、数字家园(Digital Family)、家庭网络(Home Net/Networks for Home)、网络家居(Network Home)、智能家庭/建筑(Intelligent Home/Building)。通俗地说,它是融合了自动化控制系统、计算机网络系统和网络通讯技术于一体的网络化智能化的家居控制系统。智能家居将让用户有更方便的手段来管理家庭设备,比如,通过触摸屏、无线遥控器、电话、互联网或者语音识别控制家用设备,更可以执行场景操作,使多个设备形成联动;另一方面,智能家居内的各种设备相互间可以通讯,不需要用户指挥也能根据不同的状态互动运行,从而给用户带来最大程度的高效、便利、舒适与安全。
(2)智能穿戴
智能穿戴又名可穿戴设备是应用穿戴式技术对日常穿戴进行智能化设计、开发出可以穿戴的设备的总称,如眼镜、手套、手表、项链、手链、服饰及鞋等。
(3)智能机器人
智能机器人之所以叫智能机器人,这是因为它有相当发达的“大脑”。在脑中起作用的是中央处理器,这种计算机跟操作它的人有直接的联系。最主要的是,这样的计算机可以进行按目的安排的动作。正因为这样,我们才说这种机器人才是真正的机器人,尽管它们的外表可能有所不同。
(4) 汽车电子领域
随着汽车产业的飞速发展,汽车电子近年来也有了较快的发展,电子导航系统、无人驾驶已经在汽车领域中广泛的应用。汽车电子领域的另外一个发展趋势是与汽车本身机械结合,从而可以实现故障诊断定位等功能。
(5)消费类电子产品
消费类电子产品的销量早就超过了PC机若干倍,并且还在以每年10%左右的速度增长。消费类电子产品主要包括便携音频播放器、数码相机、掌上游戏机等。目前,消费类电子产品已经形成一定的规模,并且已经相对成熟。对于消费类电子产品,真正体现嵌入式特点的是在系统设计上经常要考虑性价比的折衷,如何设计出让消费者觉得划算的产品比较重要。
(6) 军工航天
军工和航天领域不为大众所知的领域,在这个领域里面,无论是硬件还是操作系统、编译器,通常并不是市场上可以见到的通用设备,它们大多数都是专用的,但是并不代表这个领域落后,许多最先进的技术最前沿的成果,往往都会用在这个领域。
三、 嵌入式软件工程师分类及薪资待遇
嵌入式智能软件开发工程师薪资待遇分布情况如下图
四、 实训环境
PC开发平台: 操作系统ubuntu 17.0
代码编辑工具:vi编辑器;编译器:gcc;调试器:gdb
ARM开发板:Cortex-A9 Tiny4412 SDK
五、 实训大纲
实训简介:
研发企业需要的研发工程师不仅仅是掌握知识,更多的是能力,包括程序设计、编码实现、程序调试、难题攻关、团队沟通,整个实训的本质就是提高能力。
整个实训安排以“知识点”为基础;以“企业实际应用要求”为标准;以开发“实战项目”为驱动;以提高实训者的能力中心,以达到企业研发工程师入职要求为最终目标。
实训安排:
总课时16周,周一到周五授课(AM :9:00~11:45 PM:13:00 ~ 17:45)
实训阶段
内容设置
实训要求
嵌入式开发
基础篇
Linux开发基础精讲
24课时
考勤:9:00~17:45
每个阶段以最后的项目设计开发作为学习评定标准。
课堂练习当时完成,实训讲师根据完成情况进行下一个知识点的讲解。课后练习提交代码服务器机。
C语言程序设计
80课时
数据结构与算法
40课时
C项目系统设计开发
40课时
嵌入式开发
系统篇
Linux系统程序设计
80课时
系统级项目设计开发
80课时
嵌入式开发
应用篇
嵌入式C++高级编程
80课时
数据库系统原理与应用
16课时
多媒体项目设计与开发
56课时
嵌入式开发
硬件篇
ARM微处理原理与应用
48课时
嵌入式Linux系统移植
16课时
Linux驱动程序设计
48课时
从业方向:
·网络通讯设备研发公司 ·无线通讯设备研发公司
·物联网企业 ·智能安防企业
·消费类电子产品设计研发公司 ·智能家居企业
·手机解决方案公司 ·新型医疗电子研发公司
·智能楼宇企业 ·汽车电子公司
实训要求:
·大学专科及专科以上学历,计算机,电子,自动化,通信,信息工程等相关专业。
·如不具备以上条件,但从事1年以上的计算机软硬件开发的技术人员。
六、 实训内容详情
阶段1 Linux基础、C语言编程基础
本阶段目标:
(1) 学会使用嵌入式软件开发环境,熟悉企业嵌入式软件开发的基本流程及版本控制。
(2) 熟练掌握C语言基本语法,理解数组,指针的本质,学会设计函数,能够设计和编写简单的C语言程序
课程
实训内容
知识构架
技术用途
备注
课程一
Linux基础
1、 Linux
基础
1、系统简介
掌握Linux操作系统的基本时候特性
本课程主要要求参加实训人员掌握Linux操作系统的基本使用特性
(3天)
2、系统安装
3、Linux文件系统
4、Linux权限管理
5、Linux文本编辑器vi/vim
2、Linux常用命令
1、获得帮助命令
掌握Linux系统的日常基本操作命令
2、文件目录命令
3、系统磁盘、网络命令
4、用户、组管理命令
5、压缩、解压缩命令
6、重定向、管道
3、Linux的shell脚本编程
1、Bash的功能
掌握bash企业实际基本应用
掌握shell脚本编程
2、本地变量
3、环境变量
4、脚本编程
4、编译和调试
1、gcc编译器
了解研发企业的常用开发工具
掌握主流开发工具的使用
2、gdb调试器
3、make管理器与Makefile的编写
4、版本控制及SVN的使用
课程二
嵌入式Linux C语言的编程
1、C语言语法基础
1、变量和数据类型
熟练掌握C语言基本语法的使用
gdb追踪程序的执行
20个课程编程练习
本课程要求实训人员熟练掌握C语言的各种数据类型的用法及其编程
(2周)
2、常量
3、运算符
4、顺序结构
5、分支结构
6、循环结构
2、C语言数组的使用
1、数组的定义及使用
熟练掌握C语言数组的使用,学会用下标和地址两种方法,冒泡排序
2、数组的特点
3、多维数组
4、字符数组
3、C语言的指针
1、指针的本质
熟练掌握C语言中指针的使用包括基本类型指针、数组指针、指针数组、指针的指针
2、指针的定义及使用
3、指向数组的指针
4、指针数组
5、数组指针
6、指针的指针
4、C语言的字符串
1、字符串常量
熟练掌握C语言中字符串的处理以及用指针与数组管理字符串的异同。熟练掌握字符串库函数的使用
2、字符串的表示和存储
3、指向字符串的指针
4、字符串指针数组
5、不受限字符串库函数
6、受限字符串库库函数
7、内存处理库库函数
5、C语言的函数
1、函数的定义
熟练掌握C语言中函数的使用以及函数指针、指针函数、回调函数、命令行参数等知识点
2、函数参数和返回值的设计
3、变量的生存周期和作用域
4、值传递和地址传递
5、 数组传参
6、指向函数的指针
7、指针函数
8、回调函数
9、命令行参数
6、C语言的结构体
1、结构体类型的定义
熟练掌握C语言的结构体的定义初始化及使用
熟练掌握指向结构体本身的结构体成员的使用
2、结构体变量的定义
3、结构体变量成员的初始化
4、结构体变量数组
5、结构体变量指针
6、结构体成员指针
7、结构体对齐
8、联合体的使用
7、C语言文件操作
1、 流文件
熟练掌握C语言文件的常用操作
学会使用文件实现数据的永久存储
2、文件句柄
3、文件的创建、打开
4、文件的读写
5、文件的定位
6、文件的关闭
C项目系统设计开发(1周)
开发环境:Linux系统 + Gcc + Gdb
项目目标:
综合运用C语言知识。
熟练使用链表,数组来存储数据并完成相应的操作。
了解企业项目模块的划分,目录的设计。多文件.h和.c的内容编写。
学会使用多模块自动化编译方法Makefile, 学会简单的文件操作。
锻炼程序设计、代码编辑编译、调试、测试等能力。
了解嵌入式软件开发的基本流程。
项目名称
项目涉及技术
代码量(行)
1. 密码字典管理系统
⊙ 项目的模块划分,目录划分
⊙ 数据加密、解密算法的分析、设计、实现
⊙ 多叉链表数据结构的设计、实现
⊙ 队列数据结构的设计
⊙ Gdb调试工具的使用
⊙ 链表排序算法的实现
⊙ 按高质量编程规范编写代码。
⊙ 堆内存的使用
⊙ Makefile的使用
⊙ 场景驱动
⊙ 帧刷新
2000~6000
2. 大数据索引管理系统
2000~6000
3. 终端游戏引擎
2000~4000
项目总结:
项目演示:演示项目功能,并讲解部分代码
代码分析:编码格式,内存使用分析,逻辑流程优化
综合评定:技术分和表达分
阶段2 数据结构与算法
本阶段目标:
理解常见的数据结构及其操作。掌握一些常见算法
课程三、
数据结构与算法
实训内容
知识构架
技术用途
备注
1、编译预处理
1、编译链接过程
提高程序的通用性。
多用于嵌入式系统开发中
本课程要求实训人员熟练掌握C的高级用法以及链表、二叉树、哈希表的使用。同时需要掌握常见排序算法(5天)
2、宏定义及头文件包含
3、.h与.c的文件
4、多文件程序的编译与链接
5、条件编译
6、预处理宏的使用
2、C语言拓展
1、位运算符及其应用
更加深入掌握C语言的本质
2、define和typedef的使用
3、const的使用
4、static的使用
5、高质量C编程
6、C程序内存空间布局
7、malloc和free
8、关于内存的深入探讨
3、链表及操作
1、单向链表
用于数据的非连续存储
2、双向链表
3、循环链表
4、带头结点和不带头结点链表
5、半双向循环链表
4、树和二叉树
1、顺序存储
多用于命令解析、路由解析等
2、链式存储
3、递归创建二叉树
4、递归遍历二叉树
5、递归查找二叉树
5、常见排序算法
1、冒泡排序
多用于排序和查找
2、直接插入排序
3、快速排序
4、二分法查找
5、选择排序
6、希尔排序
6、哈希表
1、哈希表的原理
适用于数据量比较大,且检索比较频繁的数据的存储
2、哈希函数
3、解决冲突的方法
4、开放地址法创建哈希表
5、链式地址法创建哈希表
实训测验: C高级笔试试卷与上机考试
阶段3 Linux系统程序设计开发
本阶段目标:
了解Linux操作系统的构成与特征。
掌握Linux系统编程和网络编程的基本方法
掌握多进程多线程编程能力
课程
实训内容
知识构架
技术要点及实例
备注
课程四、
Linux系统编程与网络编程
1、基本文件I/O
1、Linux内核的基本结构
•系统调用文件操作与基于流的文件操作的区别
•文件属性及存储方式
要求实训人员熟练掌握Linux操作系统的系统编程与网络编程知识点(2周)
2、Linux文件属性和目录属性
3、Linux系统I/O调用
4、Linux库函数I/O调用
2、进程与线程
1、进程的原理和地址空间
fork() 派生进程
•进程终止方式
•执行其它程序exec()
•进程等待wait()
•进程调度策略
•多线程编程
•线程程序设计应用场合
•进程程序设计应用场合
2、进程状态和状态切换
3、进程调度
4、进程控制
5、线程的创建和退出
6、线程同步(信号量、互斥体)
7、进程和线程的关系
3、进程间通讯
1、信号
•信号的发送与捕捉
•文件锁的使用
•管道/FIFO编程
•信号量实现进程同步
•消息的发送和接收
•共享内存和文件映射的本质区别
•6种进程通信方法比较
•实现多进程同步编程
2、文件锁
3、管道
4、信号量
5、消息队列
6、共享内存
4、网络基本原理
1、OSI七层网络模型
TCP/IP协议结构
•TCP数据包
•IP数据包
•TCP的连接和关闭过程
•UDP与TCP应用的区别
2、数据的封装与拆分
3、TCP/IP协议
4、服务器和端口
5、域名
5、高级网络编程
1、Socket编程基础
实验1:主机字节序检测程序
实验2:域名解析程序
实验3:回射服务器和客户端
实验4:多客户端回射服务器程序
实例5:使用select的ECHO服务器与客户端
实例6:使用poll的ECHO服务器和客户端
实例7:使用UDP的ECHO服务和客户端
实例8:使用已连接UDP套接字的ECHO客户端
2、套接字的创建与关闭
3、连接远程主机
4、Socket I/O API
5、I/O复用和异步I/O
6、UDP编程
7、套接字选项
8、广播、主播、多播程序设计
9、守护进程和inetd
10、网络命令及服务器端口
学习要点:
多思考, 多通过实践来验证理论, 加深概念理解。 多想多写, 锻炼大型程序/复杂项目的框架设计能力。你将在未来的工作中具备掌控和领导项目的潜力。
系统级项目设计开发(2周)
开发环境:Linux系统 + Gcc + Gdb
系统项目目标:
综合运用Linux操作系统基础知识。
多任务编程。
基于TCP/UDP的网络编程。
锻炼复杂项目的程序设计及实现能力。
全面了解嵌入式软件开发的多模块设计, 开发流程。
项目名称
项目涉及技术
代码量
1. 基于物联网气象信息发布系统
⊙ C/S架构程序设计
⊙ 多进程多线程编程
⊙ 信号量的使用
⊙ socket编程
⊙ UDP协议的使用
⊙ 协议数据包的封装和拆分
⊙ 配置文件的的设计和使用
⊙ Gdb调试工具的使用
⊙ 第三方语音处理平台
⊙ Linux语音库使用
⊙ Linux 语音合成和语音识别技术
4000~6000
2. 企业微信平台开发
4000~8000
3.公交调度管理系统
4000~10000
4. GPS车载系统
学生完成项目案例1:GPS车载系统课程设计
(1)服务器端截图 (2)客户端截图
项目总结:
项目演示:演示项目功能,并讲解部分代码
综合评定:技术分和表达分
阶段4 Linux下C++编程开发、数据库编程
本阶段目标:
掌握C++应用程序开发设计
掌握面向对象程序设计
掌握数据库基本原理、
掌握SQL语句的使用
会使用简单关系型DBMS进行数据处理和应用系统设计
学会关系数据库M有SQL的使用
课程
实训内容
知识构架
技术要点及实例
备注
课程五、
嵌入式Linux的C++编程
1、引用和函数
1、函数参数引用传递
•值传递、地址传递、引用传递分析
•不同函数的设计使用,提高代码的执行效率
•实例:字符串变量的交换
要求实训人员熟练掌握C++编程语言的基本语法以及编程(2周)
2、结构与引用
3、内联函数
4、重载函数
5、递归函数
6、默认参数的函数
2、类和对象
1、类和类成员
•封装
•类与对象的区别
•实例:实现一个队列类
2、构造函数和析构函数
3、默认构造函数和析构函数
4、构造对象的过程
3、面向对象的程序设计
1、动态内存分配
•new与delete
•拷贝构造函数
•公有继承、保护继承和私有继承
•多重继承的构造顺序
•运算符的重载
实例1:医院问题
实例2:模拟家庭
实例3:重载+=和=操作符
2、继承
3、多重继承、虚继承
4、重载
5、多态
6、静态成员和静态函数
7、友元
4、模板类和标准模板库
1、模板函数
•vector
•迭代器
•List
•queue和map
实例1:堆栈模板
2、类模板的定义和使用
3、STL
5、异常处理
1、异常的基本规则
实验1:主机字节序检测程序
实验2:域名解析程序
实验3:回射服务器和客户端
实例1:捕获异常
2、异常的实现
3、多路捕获
4、异常处理
5、跟踪调试方法
实践练习:
项目: 公司人员管理系统
学习要点:
提高学习能力, 未来的工作中, 需要快速学习并加以应用的情形非常多。
课程
实训内容
知识构架
技术要点及实例
备注
课程六
嵌入式数据库的使用
1、数据库原理
1、数据库的基本概念
•关系的完整性约束
•函数依赖
•关系范式
要求实训人员熟练掌握SQL常用语法(2天)
2、数据库模型
3、关系数据库
4、数据库安全
5、数据库优化
6、数据库范式
7、MYSQL高级特性
2、SQL
1、SQL数据定义语言DDL
•数据库的创建、查看、删除
•数据库的修改、备份、恢复
•表的创建、修改、显示、插入、更新、删除等
•主键与外键
•Select语句
•连接查询、内连接查询、外连接查询
•子查询、集合查询
2、SQL查询语言
3、SQL数据操纵语言DML
4、SQL数据控制语言DML
5、SQL视图
6、嵌入式SQL
7、SQL存储过程
3、数据库系统MySQL
1、MySQL数据库环境搭建
2、数据库使用
C++ 项目(2周)
项目目标:
掌握C++语言的基本知识和技能。
基本掌握面向对象程序设计的基本思路和方法。
能够利用所学的基本知识和技能,解决面向对象程序设计问题。
锻炼多媒体应用程序的设计及实践能力。
全面了解多媒体应用程序开发的设计思路以及开发流程。
项目名称
项目涉及技术
代码量
1. 电子词典
⊙ C++封装、继承和多态
⊙ 图形应用程序开发
⊙ 信号与插槽技术
⊙ MYSQL数据库技术
3000~4000
2.酒店点餐系统
⊙ C++封装、继承和多态
⊙ 图形应用程序开发
⊙ 信号与插槽技术
⊙ MYSQL数据库
4000~5000
3.远程办公监控系统
⊙ C++封装、继承和多态
⊙ 图形应用程序开发
⊙ 信号与插槽技术
⊙ MYSQL数据库
5000~7000
项目1描述:电子词典:能实现单词的查询、将查询的单词添加到生词本中,以及对生词本中的生词进行编辑和删除等操作。实现多用户操作。前台使用QT图形开发界面
后台使用MYSQL数据库。实现用户及单词的管理。
项目总结:
项目演示:演示项目功能,并讲解部分代码
综合评定:技术分和表达分
项目2描述:酒店点餐系统:实现点餐电子菜单显示,实现点餐操作,实现数据后台传输,实现动态提醒,实现后台服务端数据链接处理,实现厨房已点菜显示及厨师分配,
厨师已完成菜提醒等
项目3描述:
服务器端:
1、可以接收多个客户端的截图请求,对电脑桌面截图,并且把图片发送给请求的客户端;
2、能够处理客户端的连接、截屏和断开请求,使用Qt的链表容器维护已经连接的客户端。
3、当有客户端连接或断开时在信息窗口打印连接或断开的客户端信息,并且删除链表中的那个客户端QTcpSocket对象的地址。
4、能够在请求时在信息窗口中打印所有已连接的客户端信息。
客户端:
可连接指定IP地址和端口号的服务器,向服务器发截图请求,并接收服务器发来的截图。
将截图显示出来并可以保存。
阶段5 嵌入式软件底层开发
本阶段目标:
理解ARM的基本结构、指令系统
了解ADS集成开发环境
了解BootLoader的配置
掌握配置、裁剪、编译Linux内核
掌握制作根文件系统
掌握嵌入式Linux设备驱动程序的基本原理、架构和设计方法
掌握Linux设备驱动开发中常用的机制和内核资源
课程
实训内容
知识构架
技术要点
备注
课程七、ARM体系结构与编程
1、ARM内核的构架及汇编编程
1、ARM概述与分类
ARM存储
ARM寄存器
ARM汇编指令
ARM汇编编程
ARM汇编与C混合编程
要求实训人员熟练掌握arm汇编编程及S5PV210的接口编程(6天)
2、ARM内核命名规则
3、ARM的数据存储
4、ARM的指令流水线
5、ARM的寄存器
6、ARM 指令寻址方式
7、ARM 指令集
8、ARM伪指令
9、ARM 汇编编程
10、ARM汇编语言与C语言混合编程
11、 ARM异常与处理
2、CPU为S5PV210,内核为cortex-a8的裸机接口编程
1、Smart210开发板I/O模块编程
I/O接口编程
时钟编程
串口编程
中断编程
2、Smart210开发板时钟模块编程
3、Smart210开发板UART模块编程
4、Smart210 开发板中断模块编程
课程八、嵌入式系统移植
1、嵌入式开发环境的搭建
1、嵌入式系统软件组成
裁剪kernel
根文件系统制作
掌握kernel裁剪,
根文件系统制作(2天)
2、Linux内核kernel裁剪
3、根文件系统rootfs制作
4、移植smart开发板
课程九、Linux驱动程序开发
1、字符设备驱动程序开发及其机制的实现
1、Linux驱动程序概述
字符设备驱动的编辑编译调试
字符设备驱动的机制
要求实训人员熟练掌握字符设备驱动程序的编写与调试
了解块驱动与网络驱动(6天)
2、字符设备驱动程序
3、并发与静态控制
4、阻塞与非阻塞型I/O
5、中断与时钟
6、内存与I/O控制
2、块设备驱动与网络设备驱动
1、块设备驱动实现步骤
块驱动
网络驱动
2、设备驱动的注册与注销
3、MTD Flash驱动实例
4、网络设备驱动概述