嵌入式开发课程简介

2023-10-26

最近几年,几乎所有的IT企业对应届毕业生都有抱怨:动手能力太差,编程水平低下。大学期间,老师授课以理论为主,学生缺少各种实践。这造成很多学生就业难;学生找不到工作,而企业招不到合适的人!本课程不仅系统的梳理了一遍工作中常用的知识,更是通过大量编码实践,快速的提高了学生的整体编程水平,使之达到了企业的用人要求。

嵌入式linux长期就业班4月开班,欢迎报名

◆授课特点

   本中心采用的是理论与实践交叉进行的教学方式;ÿ天的课程都是理论->实践->理论->实践......这样交叉进行。所有的课程设置,都是以实际软件开发中经常用到的,非常系统。ÿ天课后,老师都会布置练习题;ÿ门课程结束,都会有一个项目实训和考试。ÿ天晚上,都会安排老师值班,为学生解答疑难。

◆课程设置

第一阶段 嵌入式Linux开发基础基础(32课时)

Linux安装配置;Linux常用命令、简单shell编程;常用服务器配置;GCC编译、GDB调试、MAKE编写

第二阶段 C语言基础编程和高级编程(160课时)

C语言基础;强化数组、指针、函数,从内存操作的本质上讲解它们。实际工作中结构、联合、文件操作的使用方式;高级宏定义和条件编译的各种用法;λ运算。算法:多种链表、多种排序、多种二叉树、动态规划分析、散列表、基本加密算法。高质量c/c++编程,企业级编码规范介绍。

第三阶段 Linux系统编程 (96课时)

Linux操作系统的各种特征、进程和线程的状态变迁、调度、并发;信号量3个代表性问题;文件IO操作;静态库和动态库的创建和使用;多进程、多线程、进程间通信IPC开发;多进程、多线程的并发管理

第四阶段 C++与QT编程(120课时)

主要训练面向对象的编程思想。类、构造函数、析构函数;成员权限控制;继承和多态;静态成员、友元和运算符重载;模板和STL原理、使用。Qt项目的建立、图形界面开发、常用类使用、界面与后台关联等

第五阶段 Linux网络编程与3G(120课时)

Linux网络协议模型,使用抓包工具抓取数据包分析ÿ一层的协议;常用网络编程函数send、recv、accept、select等;若干实际的网络开发案例分析,如:Tftp协议实现、Http协议实现等

第六阶段 ARM原理及应用(24课时)

ARM基本概念、体系结构;ADS集成开发环境;ARM汇编指令集;ARM协处理器、MMU等

第七阶段 Bootloader与Linux内核开发(32课时)

理解Bootloader的原理和功能;了解u-boot启动原理和流程,能进行不同平台的移植。学会Linux内核编译方法,学会内核裁剪。建立嵌入式开发环境,学会Tiny6410开发板的使用和开发。

第八阶段 Linux驱动开发(56课时)

Linux内核模块的添加、删除等操作;编写字符驱动;内核级并发控制;IO阻塞与非阻塞;中断处理,上半部和底半部;内核内存的分配,IO端口和IO内存;块设备驱动;MTD开发等

第九阶段 就业指导及工作推荐(20课时)

IT发展方向讲解;简历指导;常见面试问题指导;工作推荐,安排面试

嵌入式ARM linux驱动开发全程就业班

入学要求:

理工科类专科(包括专科)以上学历,有C语言基础,喜欢并有志投身于IT事业。

课程大纲:

教学大纲

第一阶段 Linux基础学习


编号

课程内容

课时安排(时)

1

概述与规划

2

2

Linux与Ubunt

0.5

3

Ubuntu安装与配置

1.5

4

Ubuntu体验

2

5

Linux系统补充知识

1

6

X-Windows介绍

1

7

Ubuntu桌面环境及设置

1

8

Ubuntu添加删除程序及软件包管理

1

9

Shell环境基础及设置

1

10

Vi/Vim编辑器

1

11

文件与目录管理

2

12

Ubuntu文件属性与权限

2

13

压缩命令和查找系统

2

14

硬盘管理

2

15

用户管理

2

16

进程管理及作业调度

2

17

Shell高级应用及Shell脚本

2

18

综合练习

2

19

嵌入式Linux开发环境

2


第二阶段 ARM驱动编程


编号

课程安排

课时安排(时)

1

熟悉ARM处理器

2

2

ARM体系结构

4

3

ARM指令系统

4

4

ARM编程技术

4

5

ADS1.2操作范例

2

6

ARM映像文件及分散加载

2

7

初始化代码(Bootloader)分析与研究

2

8

嵌入式C语言复习

2

9

GPIO接口

4

10

存储控制器

4

11

内存管理单元MMU

2

12

NAND Flash控制器

4

13

NOR Flash的访问

4

14

中断体系结构

2

15

系统时钟和定时器

2

16

通用异步收发器UART

2

17

IIC接口

2

18

LCD控制器

2

19

ADC和触摸屏的接口

2

20

RTC实时时钟

2

21

DMA访问

4

22

IIS串行音频接口

4

23

相机接口CAMIF

4


中期实践项目

1

S3C2440核心板设计

2

数码相框

3

电子复读机

4

音乐播放器

5

自带项目


第三阶段嵌入式ARM linux内核驱动开发


编号

课程安排

课时安排(时)

1

Linux基础复习

4

2

搭建嵌入式ARM Linux开发环境

6

3

Kernel开发初步

2

4

模块编程

2

5

字符设备驱动开发初步

6

6

内存管理

4

7

嵌入式QT开发

2

8

中断

5

9

调试技术

2

10

时间管理

2

11

Linux设备模型

4

12

平台类总线设备驱动

2

13

udev & misc

2

14

wdt

2

15

触摸屏驱动

2

16

input子系统及tslib移植

2

17

LCD驱动开发

6

18

移植U-Boot

2

19

移植Linux内核

2

20

SD卡驱动程序移植

2

21

USB驱动程序移植

2


后期实践项目

1

MP4

2

网络摄像机

3

自带项目

整个课程的学时数=理论169学时+实践学时=300个学时(注:总的学时数会在300上下浮动,以便于授课老师根据每个班的不同情况适当延长或缩短实践时间)。入式Linux高级编程

· Linux基础

· Linux核心命令

· Linux Shell编程

· 标准C编程

· 数据结构

· UC高级编程

· 数据库及SQL

· 标准C++编程

· UQT高级编程

· ARM处理器编程

· ARM硬件接口开发

· 嵌入式Linux内核编程

· 嵌入式Linux驱动编程

· 系统移植和部署

· 嵌入式应用开发

课程目标






  通过本课程的系统学习,可以使学员由浅入深地对嵌入式Linux系统全面学习,能够独立胜任嵌入式Linux应用开发、系统开发等多方面工作。课程目标包括:
       1、精通嵌入式C语言高级编程
       2、精通Linux操作系统使用
       3、精通Linux系统基础编程
       4、了解基于QT的GUI开发
       5、熟悉ARM体系结构
       6、熟悉嵌入式Linux内核裁减移植及Bootloader启动过程
       7、掌握嵌入式Linux 平台搭建
       8、熟悉嵌入式Linux 驱动开发
       9、独立完成Mplayer项目开发
       10、掌握嵌入式Linux实际项目案例开发流程






第一阶段:嵌入式C高级编程






本期目标:在嵌入式领域中大部分低层开发,都会用到C语言。C语言简洁、紧凑、使用方便灵活加上GNU在实际项目开发中的扩展,使得C语言在整个嵌入式开发过程中起着至关重要的作用。更重要的是在嵌入式平台下可移植性比较强。一个精通C语言程序设计的程序员,可以很容易地进入Linux、WinCE、Vxworks、uc/os等嵌入式操作系统下的软件开发工作。本阶段学习目标是掌握C语言基本知识、巩固C编程语法基础,以及深入C语言高级编程,为将来的编程工作打下坚实的基础。






序号

课程名称

课程内容

掌握要求






1

嵌入式C语言高级编程

C语言是嵌入式领域最重要也是最主要的编程语言,本课程将在学员C语言基础知识之上,通过大量编程实例重点讲解C语言的基础编程以及高级编程知识,包括常用函数与程序结构、字符串操作、指针、数组、结构体、宏、枚举、常用算法、库函数、文件的使用等知识。另外,本节还重点讲解数据结构的基础内容,包括顺序表、链表、队列、栈、树、图、哈希表、常用查找算法等内容的应用与C语言实现。各知识点都通过一个个实例,使理解更加深入。

精通






2

项目实战——歌词解析器

本项目在C语言阶段是非常具有代表性的,通过本项目对C语言的重点知识灵活运用,完成lrc格式歌词的文件读取、解析、存入链表等,并通过屏幕与歌曲同步实时显示。通过该项目能熟练掌握C语言基本数据结构,培养良好的编程规范。

精通






第二阶段:嵌入式Linux系统开发






       本期目标:嵌入式Linux应用开发和系统开发是嵌入式Linux中最重要的一部分,也是企业人才需求最广的一部分。本期学习的主要目标是精通嵌入式Linux下的程序设计,熟练掌握嵌入式Linux的开发环境,深刻体会整个嵌入式Linux项目开发流程,强化学员对Linux应用开发的能力,了解QT GUI开发。能够独立完成Mplayer应用开发项目。在工作中能很快适应项目中所涉及到的多任务编程,并且能快速转移到其它操作系统应用开发。






序号

课程名称

课程内容

掌握要求






3

Linux操作系统应用开发

本课程主要讲解Linux操作系统的概念和安装方法。详细介绍Linux下的目录结构、基本命令、管理配置和编辑器,包括VI编辑器,GCC编译器,GDB调试器和 Make 项目管理工具以及Makefile、shell脚本编写等知识。并进行嵌入式开发环境的搭建。

精通






4

嵌入式Linux高级系统编程

本课程从系统调用开始,重点讲解标准I/O库,Linux多任务编程中的多进程和多线程,以及进程间通信、线程间通信、管道、消息队列、信号等重要知识。最后讲解基于s3c2440实验仪的GPIO,让学员与实际应用相联系。

精通






5

项目实战——Mplayer播放器

利用TFT图形库,在不带GUI的情况下自己实现Mplayer UI界面的设计。实现Mplayer播放、暂停、上一首、下一首、静音、播放列表等功能,该项目中涉及到多进程、多线程以及进行间通信,重定向等系统编程知识,是对前面所学知识点的强化和提升。

精通






6

基于QT的GUI开发

QT具有跨平台、面向对象、丰富API、支持2D/3D渲染、支持XML、多国语等强大功能,在嵌入式领域的GUI开发中得到了广范的应用,在本阶段的课程中将了解到基于QT的GUI开发、并移植QT应用程序到S3c2440平台。

熟悉






第三阶段:嵌入式Linux设备驱动开发






       本期目标:驱动程序设计是嵌入式Linux开发工作中重要的一部分,也是比较困难的一部分。需要熟悉Linux的内核机制、驱动程序与用户级应用程序的接口,需要考虑系统对设备的并发操作,熟悉所开发硬件的工作原理。具备ARM硬件接口的基础知识,熟悉ARM处理器S3c2440各资源、掌握Linux设备驱动原理框架,了解工程中常见Linux高级字符设备驱动开发。在工作中能独立胜任底层驱动开发。






序号

课程名称

课程内容

掌握要求






7

ARM体系结构

ARM处理器在全球范围内,占据了低功耗、低成本和高性能的嵌入式系统应用领域的领先地位。课程主要以S3c2440为主,介绍其系统资源,如IO、时钟电源、中断、键盘扫描、定时器、AD、触模屏、LCD等,为Linux设备驱动开发打好基础。

熟悉






8

ARM Linux设备驱动开发

掌握Linux内核模块编程,用户态与内核态数据交换,掌握Linux操作系统下驱动原理,重点讲解嵌入式Linux下常用字符设备驱动的编写方法,熟悉字符设备驱动框架,能独立完成常见Linux设备驱动开发。

掌握






9

嵌入式Linux驱动高级开发

了解Linux设备驱动模型、并发与竞态、Linux驱动中的阻塞与非阻塞,为应用层提供具有高内聚低偶合的健壮底层代码接口。

熟悉






第四阶段:嵌入式Linux平台开发及Android平台搭建






       本期目标:Android是基于Linux平台的开源手机操作系统,该平台由操作系统、中间件、用户界面和应用软件组成,是首个为移动终端打造的真正开放和完整的移动软件,目前它的应用不再局限于移动终端,还包括数据电视、机顶盒、PDA等消费类电子产品。该阶段让学员掌握如何从零开始搭建嵌入式Linux开发环境,熟悉Bootloader启动过程,了解Android操作系统开发流程。由于Android操作系统具有开源稳定等优势,它的应用领域还在不断扩张。






序号

课程名称

课程内容

掌握要求






10

嵌入式Linux 平台架构

本课程将使学员掌握从零开始搭建嵌入式Linux运行环境,包括内核裁减、内核移植、交叉编译、内核调试、Bootloader编写、根文件系统制作以及向内核中添加自己的模块,并在s3c2440实验仪上运行自己制作的Linux系统,集成部署Linux系统整个流程。

熟悉






11

嵌入式Linux在3G领域的典型应用

——3G手机Android操作系统

主要针对目前嵌入式设备上另外一个主流的应用程序开发平台Android,了解Android系统如何由嵌入式Linux衍生出来的,以及Android系统和嵌入式Linux系统差异化,了解Android系统的体系结构、开发特点以及关键技术点,包括Android体系结构和原理,Android平台移植,Android应用程序开发工具的使用。

熟悉






[课程描述]






   基于Linux的嵌入式系统目前获得了广泛应用,在嵌入式Linux核心层的开发中,设备驱动的编写占据了大部分的工作量,能编写出真正可用的驱动程序存在着很多技术要点,本课程的开设兼顾初学者和有一定开发经验人员的需要,通过对嵌入式Linux系统理论知识和实际代码分析相结合的方式,了解和学习目前在嵌入式Linux驱动开发中比较重要的几项驱动和其框架结构,如块设备驱动程序框架,LCD Frambuffer,网络设备驱动,USB驱动等。通过大量精心设计的驱动实验,使学员真正掌握嵌入式系统驱动开发的关键技术。






[培养对象]






 对Linux驱动设计及嵌入式系统开发有一定经验和兴趣的电子、通信、计算机、自动化等相关专业专科生、本科生及研究生,相关专业的技术工程师,开发人员。






[基础要求]






 基本掌握C语言编程
 基本的Linux使用和应用程序编写基础
 具有数字电路、模拟电路的基础






[推荐教材]






 《linux设备驱动(第三版)》








[教学环境]




 ARM6410 (人手一块)







[教师简介]






   秦老师,硕士,国内著名公司操作系统部部门经理,作为主要负责人负责公司自主知识产权的操作系统和Linux 3G手机产品核心驱动的开发研究工作。具有多年的嵌入式系统开发经验,丰富的操作系统和驱动开发经验。
   石老师,国际知名操作系统供应商高级工程师,主要负责Linux BSP的开发研究工作。具有多年的嵌入式系统开发经验,丰富的操作系统和驱动开发经验。









[开课情况]






写报名表并办理报名手续。(报名时需携带本人身份证复印件1张及本人一寸照片3张)






[课程大纲]







驱动开发课程大纲

课程安排

课程内容

理论课

1. Linux操作系统核心基础
   ◆ 调度,互斥量和锁等的实现原理
   ◆ 中断的上下部,定时器,内核线程
   ◆ 等待队列和工作队列,tasklet等
   ◆ Linux核心的内存管理(页面分配,slab,kmalloc,DMA内存)
   ◆ Linux设备管理模型和sysfs文件系统

理论课

2. 驱动程序与模块概念
   ◆ Linux设备驱动的概念
   ◆ Platform device模型介绍
   ◆ 模块的概念
   ◆ 模块的构建、编译和加载

理论课

3. 字符设备驱动程序
   ◆ 字符设备驱动程序概念
   ◆ 主设备号和次设备号
   ◆ fs_operation结构分析
   ◆ 驱动程序调试技术简单介绍

实验课

第一部分 驱动基础实验
   实验一:模块的构建、编译和装载,hello world模块的实现
   实验二:Platform device模型实验
   实验三:GPIO按键实验——使用中断机制访问

理论课

4. Linux块设备驱动程序开发
   ◆ Linux块设备驱动程序概要
   ◆ 块设备驱动程序的特点和工作原理
   ◆ 块设备驱动的设备文件接口概念
   ◆ 块设备驱动的文件系统接口概念
5. Linux块设备驱动程序实现要素分析
   ◆ 块设备驱动的注册接口(register_blkdev等)
   ◆ 块设备驱动操作接口(open,release,ioctl等)
   ◆ 块设备驱动的request队列和request操作
6. 块设备代码分析(vdisk.c)
   ◆ vdisk.c的注册接口
   ◆ vdisk.c的open,release,ioctl
   ◆ vdisk.c的request队列和request操作

实验课

第二部分 块设备驱动实验
   实验一: 修改vdisk.c支持多个设备
   实验二: 在实验一基础上为vdisk.c添加字符设备接口实现
   (实现open,close,ioctl,read,write,lseek方法)

理论课

7. 网络设备驱动程序开发
   网卡设备介绍
   ◆ 常见网卡
   ◆ 网卡芯片所实现的协议层功能
   ◆ cs8900网卡芯片手册导读
   ◆ cs8900网卡硬件电路分析
8. Linux网络驱动结构
   ◆ Linux TCPIP网络结构概述
   ◆ Linux网络设备结构

实验课

第三部分 字符设备驱动实验
   实验一:ifconfig等命令实验
   实验二:字符设备的网卡驱动实现(上)
   实验三:字符设备的网卡驱动实现(下)
   实验四:驱动的测试程序编写

驱动高级研修大纲

课程安排

课程内容

理论课

1. Linux的input驱动
   * 嵌入式系统中的键盘和触摸笔硬件结构原理
   * Input子系统介绍
   * Input的事件和设备驱动框架结构
   * button代码分析

实验课

第一部分 实验
   * 实验1:编写开发板下的button驱动
   * 实验2:利用开发板的蜂鸣器实现按键音

理论课

2. Linux下的MTD驱动
   * Nor和NAND Flash硬件结构
   * Linux的MTD子系统
   * Yaffs文件系统和MTD子系统的结合
   * Nandsim驱动代码分析

实验课

第二部分 实验
   * 实验1:配置和调试Nandsim驱动代码
   * 实验2:mtdutils工具的学习和使用
   * 实验3:Yaffs文件系统的烧写和配置

理论课

3. LCD Framebuffer设备驱动程序开发
   * Framebuffer驱动程序原理,结构分析、及数据结构
   * Framebuffer驱动程序设计

实验课

第三部分 实验
   *实验1:LCD Framebuffer——通过mmap操作fb设备
   *实验2:LCD Framebufferr——通过mmap显示图片

理论课

4. Linux下的USB驱动
   * USB工作原理介绍
   * Linux的Host端驱动代码结构
   * Linux的device端驱动代码结构
   * usb 地址端点的使用
   * usb 四种传输类型及其作用
   * usb 协议实现及其详解
   * usb 设备即插即用过程
   * 驱动代码分析

实验课

第四部分 实验
   * 实验1:学习使用Linux下的usb分析工具
   * 实验2:配置和实现Linux的cdc-acm驱动,
            实现PC和开发板间的USB通信
   * 实验3:配置和实现Linux的mass_storage驱动,
            实现将开发板配置为一个U盘




基于Linux的嵌入式系统目前获得了广泛应用,在嵌入式Linux核心层的开发中,设备驱动的编写占据了大部分的工作量,能编写出真正可用的驱动程序存在着很多技术要点,本课程的开设兼顾初学者和有一定开发经验人员的需要,通过对嵌入式Linux系统理论知识和实际代码分析相结合的方式,了解和学习目前在嵌入式Linux驱动开发中比较重要的几项驱动和其框架结构,如块设备驱动程序框架,LCD Frambuffer,网络设备驱动,USB驱动等。通过大量精心设计的驱动实验,使学员真正掌握嵌入式系统驱动开发的关键技术。










[培养对象]










 对Linux驱动设计及嵌入式系统开发有一定经验和兴趣的电子、通信、计算机、自动化等相关专业专科生、本科生及研究生,相关专业的技术工程师,开发人员。










[基础要求]










 基本掌握C语言编程
 基本的Linux使用和应用程序编写基础
 具有数字电路、模拟电路的基础










[推荐教材]










 《linux设备驱动(第三版)》











[教学环境]


 ARM6410 (人手一块)




[教师简介]




   秦老师,硕士,国内著名公司操作系统部部门经理,作为主要负责人负责公司自主知识产权的操作系统和Linux 3G手机产品核心驱动的开发研究工作。具有多年的嵌入式系统开发经验,丰富的操作系统和驱动开发经验。
   石老师,国际知名操作系统供应商高级工程师,主要负责Linux BSP的开发研究工作。具有多年的嵌入式系统开发经验,丰富的操作系统和驱动开发经验。






[开课情况]








[课程大纲]




驱动高级研修大纲

课程安排

课程内容

理论课

1. Linux的input驱动
   * 嵌入式系统中的键盘和触摸笔硬件结构原理
   * Input子系统介绍
   * Input的事件和设备驱动框架结构
   * button代码分析

实验课

第一部分 实验
   * 实验1:编写开发板下的button驱动
   * 实验2:利用开发板的蜂鸣器实现按键音

理论课

2. Linux下的MTD驱动
   * Nor和NAND Flash硬件结构
   * Linux的MTD子系统
   * Yaffs文件系统和MTD子系统的结合
   * Nandsim驱动代码分析

实验课

第二部分 实验
   * 实验1:配置和调试Nandsim驱动代码
   * 实验2:mtdutils工具的学习和使用
   * 实验3:Yaffs文件系统的烧写和配置

理论课

3. LCD Framebuffer设备驱动程序开发
   * Framebuffer驱动程序原理,结构分析、及数据结构
   * Framebuffer驱动程序设计

实验课

第三部分 实验
   *实验1:LCD Framebuffer——通过mmap操作fb设备
   *实验2:LCD Framebufferr——通过mmap显示图片

理论课

4. Linux下的USB驱动
   * USB工作原理介绍
   * Linux的Host端驱动代码结构
   * Linux的device端驱动代码结构
   * usb 地址端点的使用
   * usb 四种传输类型及其作用
   * usb 协议实现及其详解
   * usb 设备即插即用过程
   * 驱动代码分析

实验课

第四部分 实验
   * 实验1:学习使用Linux下的usb分析工具
   * 实验2:配置和实现Linux的cdc-acm驱动,
            实现PC和开发板间的USB通信
   * 实验3:配置和实现Linux的mass_storage驱动,
            实现将开发板配置为一个U盘



 Linux 内核设计高级技术研修班

[课程背景]

     Linux内核是对操作系统最完美的诠释,在计算机专业教学以及相关行业工程开发中,都是必修的课程。然而它代码量巨大,代码更新速度很快,这使得工程人员及内核爱好者阅读相关书籍的同时,落后于最新的代码。Linux内核构架极其复杂,使得研究学习过程相对其他科目更为艰难,无数人在它面前不得不退缩。一个好的linux开发工程师,对于内核的理解无疑会大大提升自身工作和学习的能力。本课程适应于嵌入式/工控/手机研发/存储开发行业linux工程师,内核开发爱好者,学习linux的在校学生等。

[质量保证]

•培训合格学员可享受免费推荐就业机会。
•培训过程中如有部分内容理解不透或消化不好,可免费在下期班中重听;
•培训结束后免费提供一个月的技术支持,充分保证培训后出效果。

[基础要求]

1.具有一定的Linux使用基础和一定的核心代码阅读经验
2.熟练掌握C语言

[教 材]

《AKAE Linux 内核设计高级技术研修班讲义》

[教学环境]

ARM 6410 (人手一块)

[师资简介]

    王老师, 6年嵌入式开发经验,精通linux内核调度器,内存管理,资源控制,时间系统,文件系统等,国内著名公司研发部门经理,作为主要负责人负责公司自主知识产权的操作系统和Linux 3G手机产品核心驱动的开发研究工作,丰富的操作系统和驱动开发和授课经验,拥有国内一线android开发团队,自07年专注于Android 系统开发,精通Marvell/Qualcomm平台架构,精通Android底层驱动,中间件开发,系统框架构建,拥有十余款上市手机开发经验。国内某著名社区内核版主,长期活跃在linux内核 ,android等开发社区。

[课程内容]

               《linux内核设计高级研修班的课程大纲》

课程安排(24课时)

课程内容


理论课

(3课时)

第1部分 基础知识

1.1  Linux内核的整体架构

1.2  Linux内核版本演进规则

1.3  Linux内核源码管理工具

1.4  参与Linux内核开发

1.5  内核源码阅读工具

1.6  内核启动过程

1.7  内核调试技术

第2部分 内核编译

   2.1  内核编译方法

2.2  内核编译过程

第3部分 内核模块

  3.1 模块概念

  3.2 模块基础

  3.3 导出符号及模块参数


实验课

(3课时)

【实验1】 内核编译实践

【实验2】 内核源码分析实践

【实验3】 模块实验


理论课

(3课时)

第4部分  进程管理

  4.1 进程描述符

  4.2进程创建

  4.3线程机制

  4.4进程切换

  4.5进程终结

第5部分  进程调度

  5.1调度策略

5.2调度算法分析

第6部分  内核同步机制

6.1 基本概念

6.2自旋锁

6.3信号量

6.4其他同步机制


实验课

(3课时)

【实验1】 进程列表显示实验

【实验2】 进程调度实验

【实验3】 同步机制实验


理论课

(3课时)

第7部分  内存管理

7.1 物理地址、逻辑地址与虚拟地址

  7.2 分页

  7.3 内存在内核中的分配

  7.4 进程的内存组织

  7.5 内存映射mmap

  7.6 页面缓存

第8部分  中断与异常

  8.1 中断管理的硬件支持

8.2 Linux内核中平台相关的中断管理

  8.3 中断处理

  8.4 软中断

第9部分  系统调用

9.1 系统调用号,参数与返回值

9.2 系统调用与用户library

9.3 系统调用实现


实验课

(3课时)

【实验1】 Linux内存管理实验

【实验2】 piano实验

【实验3】 增加系统调用


理论课

(3课时)

第10部分  定时器和时间管理

10.1 内核中的时间概念

10.2 jiffies

10.3硬时钟和定时器

10.4 时钟中断处理程序

10.5定时器

第11部分  虚拟文件系统

  11.1 VFS的体系结构

  11.2 重要数据结构

  11.3 文件系统的实现

第12部分  内核驱动开发基础

  12.1驱动开发基础

12.2字符设备驱动


实验课

(3课时)

【实验1】 定时器实验

【实验2】 文件系统实例实验

【实验3】 简单驱动实验



课程安排


课程简介




第一阶段
Linux 操作和编程基础


   预备营阶段主要讲解 Linux 的基本命令和linux培训基础编程知识,包括Linux的文件操作和目录操作命令,VI编辑器,GCC编译器,GDB调试器和 Make 项目管理工具等知识。
   该阶段学生可以通过学习Linux下编程方法,完成实现一个简单的游戏编程,例如五子棋、俄罗斯方块、贪吃蛇等。此项任务完成后,学员的编码量可以达到1000行,能够进行基本程序开发。




第二阶段
嵌入式环境开发核心技能


   初级营阶段主要讲解在嵌入式开发编程中C语言的重要概念和编程技巧中的重点难点,以复习串讲和实例分析的形式,重点介绍包括函数与程序结构,指针、数组和链表,库函数的使用等知识。
   该阶段学员会进行大量的编码练习,主要包括整数算法训练,递归和栈编程训练,位操作训练,指针训练,字符串训练,链表和二叉树训练、掌握常用C库函数编程接口实践,函数指针、动态内存分配,程序预处理、链接原理,ELF文件格式,标准I/O库等核心技能,强化学员对嵌入式开发环境下基本编程开发的理解和编码调试的能力。
   该阶段学员在完成上述编码练习任务后,将独立完成“快译通”宝典项目开发,实现一个类“金山词霸”字典功能的实用程序开发。该项目完成后,学员的编码量可以达到5000-8000行,具备初级程序员开发能力,能够胜任企业一般开发编码类的任务要求。




第三阶段
嵌入式Linux环境高级
编程和项目开发实践


   中级营阶段主要讲解包括系统编程(信号/系统调用/管道/FIFO/消息队列/共享内存等),文件I/O编程(文件描述符/文件读写接口/原子操作/阻塞与非阻塞IO等),多任务和多线程编程(进程标识/用户标识/fork与vfork/多线程概念/线程同步等),网络编程(网络基本概念/套接口编程/网络字节次序/ Client/Server 结构/ UDP 编程);掌握Linux下Socket编程的开发流程,熟悉网络编程的调用接口函数和相关数据结构,使学员初步具备在Linux上进行系统编程开发的能力。同时还会讲解搭建嵌入式 Linux 开发环境,包括嵌入式Linux基本概念和开发流程、内核裁减配置和交叉编译、根文件系统制作、网络编程等知识。
   该阶段学员将综合之前所学内容和编程技术,以小组为单位进行一个团队合作项目的开发,完成一个嵌入式产品“数码相框”的设计和实现,涉及技术内容包括文件I/O编程,多线程编程,网络编程和项目文档编写。该项目完成后,学员的编码量可以达到10000-15000行,具备中级程序员开发能力,能够胜任企业项目开发和产品开发类的任务要求。




第四阶段
嵌入式Linux开发方向 Android开发方向
(2选1)


  高级营课程将按照学员兴趣和特长,选择2个专业选修方向进行深入学习,包括:
 ·嵌入式ARM硬件开发(公共部分)
 ·嵌入式Linux开发方向
 ·Android手机开发方向
   该阶段完成后,学员的编码量可以达到和超过20000行,具备独立开发项目,完成嵌入式产品软件设计和实现的能力。




以下为这2个方向的详细描述:




嵌入式ARM硬件开发
(公共部分)


  该部分学习的内容包括ARM体系结构、指令集、裸板开发等等,该阶段要求学员完成从0开始的Bootloader项目:
 ·Bootloader项目(从0启动硬件,加载Linux内核)
   该项目主要涉及 ARM体系结构及其基本编程知识,包括指令分类,寻址方式、指令集、存储系统、异常中断处理、ARM汇编语言以及C和汇编语言的混合编程,ARM开发板启动代码的框架分析等知识。同时要求结合ARM嵌入式开发板硬件设计原理图分析各种外设的工作原理和驱动机制,并自己动手实践完成一个ARM开发板上的Bootloader编程大作业。




嵌入式Linux开发方向
—上层应用开发


  该部分主要针对上层应用开发,学习的内容包括C++面向对象编程基础、QT图形界面开发、网页脚本语言、SQLite数据库等知识。
   该阶段要求学员设计并实现1个真实完整的嵌入式项目开发流程,该方向的项目选题可以从以下项目案例中任选:
 ·广告机项目(交互式多媒体网络系统)
 ·飞鸽传书项目(局域网文件共享系统)
 ·QQ聊天室项目(多客户登录即时通讯系统)
 ·数据采集和远程控制项目(Web远程控制系统)
   以上项目开发,涉及到文件I/O编程、数据库编程、网络通讯、以及图形界面开发等多种嵌入式Linux编程技术,要求学员建立起团队开发和协同工作的企业项目开发模式的概念和流程,强化学员对编写项目概要设计文档和详细设计文档的理解,为就业的职业技能和素质训练做好充分准备。




嵌入式Linux开发方向
—底层驱动开发


  该部分主要针对底层驱动开发, Linux设备驱动程序开发规范、USB协议规范、LCD液晶屏/TS触摸屏/网卡/AC97声卡等硬件驱动开发知识。
   该阶段要求学员实现2-5个真实的硬件设备驱动,该方向的项目选题可以从以下项目案例中任选:
  ·CS8900网卡驱动  ·USB驱动
  ·LCD液晶屏驱动   ·TS触摸屏驱动
  ·AC97声卡驱动    ·串口驱动
   上述项目主要涉及嵌入式 Linux 上驱动程序开发规范,包括设备驱动程序概念、字符设备驱动程序、块设备与网络设备、网卡驱动以及常用嵌入式设备驱动开发等知识。要求学员独立实现至少2种嵌入式设备驱动程序的编写,包括驱动模块的调试和加载以及完整的项目开发文档的编写。




专业选修方向二
Android开发方向


  该方向主要为了满足人才合作单位对Android高端技术人才的需求而设,基于对市场最前沿高端平板电脑产品方案的研发实践,使学员系统全面地掌握多核Android平台上的开发技术,满足企业对有实际开发经验的Android高端工程师的需求。
   该阶段要求学员学习Android系统框架、Android系统移植优化和Android应用开发等知识,完成2个商业级android项目。该方向的项目选题可以从以下项目案例中任选:
 ·mp3/mp4播放器(实现各种媒体格式的播放功能)
 ·云点阅读器(能够浏览epub、txt等文档)
 ·点菜系统(酒店点菜系统, 实现菜单浏览,下单)
 ·游戏引擎(开发完整的android平台游戏引擎)
   上述项目均采用最新Android高端硬件平台:NVIDIA Tegra2双核1GHz,3D、flash、高清硬件加速,基于ARM Cortex-A9内核,支持重力传感,WiFi无线网络,3G上网,HDMI高清接口。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

嵌入式开发课程简介 的相关文章

  • SpringBoot项目配置全局处理异常

    1 自定义异常 自定义异常 public class RRException extends RuntimeException private static final long serialVersionUID 1L private St
  • k8s学习

    主节点配置一定要好 K8S学习之路 1 介绍 1 1单机部署 1 2 虚拟化部署 类似window上安装多个linux虚拟机 在虚拟机中部署程序 使得程序之间不会互相影响 1 3 容器化部署 共享了操作系统 保证每个系统拥有自己的文件系统
  • MySQL-binlog2sql:非主从关系实现数据的【数据同步+数据恢复+数据追踪】

    文章目录 MySQL binlog2sql 非主从实时同步 恢复误删数据 1 引 1 介绍 2 功能 3 针对3种场景 4 脚本汇总说明 2 先决条件 1 安装 MySQL 2 修改 MySQL 配置 3 安装 binlog2sql 1 解
  • yii2 mysql设置时区

    第一步 修改配置文件 common config db php 注 8 00为北京时间 Asia Shanghai common config main php 第二步 修改vendor yiisoft yii2 db Connection
  • 抓取网站中的视频

    最近想从别人家的网站宣传片上提取一些素材 借鉴一下 之前也没有弄过 但是我的思路就是从网页的缓存中查找播放完后缓存的视频 然后失败了 然后又想到了网页打开源代码 然后查找到网页源代码饮用的视频的路径 然后找到视频 然后 再次失败 网上找了好
  • css基础———清除浮动的一些方法及区别

    为什么要清楚浮动 地址 http blog csdn net qwe502763576 article details 78811658 清除浮动方法概览 这里例举四种常见的清除浮动方式 方式一 使用overflow属性来清除浮动 ovh
  • 论文阅读

    简介 paper https arxiv org abs 1911 11907 github https github com huawei noah ghostnet Ghostnet CVPR2020 是华为提出的一种轻量级网络 结构类
  • WSL安装

    WSL安装教程 WSL简介 Windows Subsystem for Linux 简称WSL 是一个在Windows10上能够运行原生Linux二进制可执行文件 ELF格式 的兼容层 它是有微软与Canonical公司合作开发 其目标正是
  • 模糊查询与带参数跳转

    一 模糊查询 使用
  • 方法重写(override)原则

    方法的重写 override 两同两小一大原则 1 方法名相同 参数类型相同 2 子类返回类型小于等于父类方法返回类型 3 子类抛出异常小于等于父类方法抛出异常 4 子类访问权限大于等于父类方法访问权限
  • oracle RAC ORA-03113 错误解决

    好久 没有更新博客 太懒了 这咋换工作呢 1 错误现象 数据库 客户端连接不正常 频繁报 ORA 03113 错误 oracle 文档中对这个错误这样解释 ORA 03113 错误就是说连接到数据库的网络中断了 有些错误由于频繁出现 原因复
  • res_company_white_url.py 详解

    res company white url py 主要作用是 在数据库中建立一个表 存放白名单的URL 当我们读取文件时 先判断Referer是否在白名单中 如果不在则自动转到一个图片文件 防止盗链 接下来我们看一下主要代码 class C
  • unexpected keyword argument 'renderer'-DjangoUeditor

    今天在集成DjangoUeditor按照官方的Github集成之后 本以为就可以看到后台了没想到直接报错 render got an unexpected keyword argument renderer 报错93行 boundfield
  • 【QT】——06_带参数的信号(笔记)

    信号重载 说明 信号是可以重载的 相同的名字不同的参数 在发射信号的时候给值 emit musicSignal 100 音乐菜单 主窗口 h 创建一个带参的槽来处理信号 注意槽的参数要与信号一致 void dealMusic2 int QS
  • 《Hadoop学习笔记系列》二.Hadoop分布式文件系统 HDFS

    0 Hadoop分布式文件系统 HDFS HDFS以流式数据访问模式来存储超大文件 运行与商用硬件集群上 1 流式数据访问 HDFS的构建思路 一次写入 多次读取是最高效的访问模式 2 Block数据块 HDFS基本读写单位 类似于磁盘的页
  • STM32的ADC采样与多通道ADC采样

    一 单通道采样 参考资料 STM32库开发实战指南 刘火良 杨森著 原理性质的东西还是少讲 因为上面那本书里面讲解的很详细了 直接来看硬件电路图 这里使用的是3362电位器 10K 即用STM32来测量PB0和GND两端的电压 这样的电路设
  • 一篇明白SQL的执行顺序

    这是一条标准的查询语句 这是我们实际上SQL执行顺序 我们先执行from join来确定表之间的连接关系 得到初步的数据 where对数据进行普通的初步的筛选 group by 分组 各组分别执行having中的普通筛选或者聚合函数筛选 然
  • 小谈HashMap与ConcurrentHashMap

    HashMap JDK7 在JDK7中 HashMap通过数组加链表的形式存储 当元素个数达到阈值 并且数组下标已经存在元素 则会进行扩容 如果数组下标不存在元素 则直接添加 不会扩容 JDK7中添加元素使用的是头插法 在高并发的环境下可能
  • [算法通关村] 1.3 链表的删除

    上一节我们谈到了链表的头插 尾插 中间插入的方法 忘记的小伙伴可以复习一下 算法通关村 1 2 链表的插入 接下来 完成链表的删除工作 我们在上一节的学习中 分别在链表的开头 中间和结尾插入了节点 现在我们想使链表恢复原来的样子 即 1 g
  • 更多的服务商从业者都开始关注刷脸支付

    刷脸支付就是通过人脸进行支付 简单来说消费者在接入蜻蜓的商家结账付款时 只需将脸面对蜻蜓上的摄像头即可完成支付 在这一过程中用户甚至不需要用手机 支付效率相比扫码支付更加的高效 此外由于支付宝刷脸支付是基于3D人脸识别技术 在安全也要比扫码

随机推荐

  • 【机器学习】编码、创造和筛选特征

    在机器学习和数据科学领域中 特征工程是提取 转换和选择原始数据以创建更具信息价值的特征的过程 假设拿到一份数据集之后 如何逐步完成特征工程呢 文章目录 一 特性类型分析 1 1 数值型特征 1 2 类别型特征 1 3 时间型特征 1 4 文
  • SpringMVC的全注解开发

    文章目录 一 spring mvc xml 中组件转化为注解形式 二 DispatcherServlet加载核心配置类 三 消除web xml 一 spring mvc xml 中组件转化为注解形式 跟之前全注解开发思路一致 xml配置文件
  • 2.c语言中将两个整数相加

    上一个文章 我讲述了如何输出文字 接下来我就来讲讲有一丢丢难度的算法了 这个算法就是学习如何将两个整数相加 这是学习如何编写一个计算机软件的第一步 现在我就为你们来一一讲解 代码如下 include
  • StringBuffer integer

    StringBuffer 一 1 StringBuffer是一个容器 而容器的特点是可以修改 基本操作是增添删改 这也是它与StringBuffer的主要区别 2 线程安全 可变的字符序列 是一个字符缓冲区 也是final型 不能被继承 3
  • java基础-垃圾收集器及其回收算法的介绍

    文章目录 前言 一 垃圾收集器管理的区域 二 垃圾收集器的回收步骤 1 阶段一 判断对象是否存活 2 阶段二 筛选 三 垃圾收集算法 1 分代收集理论 理论基础 2 标记 清除算法 3 标记 复制算法 4 标记 整理算法 四 补充 前言 最
  • v8所有例子在里面

    https github com nodejs nan blob master doc methods md
  • 线程间怎么交换数据_在LLVM后端实现跨通道数据搬移

    作者 汪岩 AMD GPU的每个CU有一个64kB的存储空间 称为本地数据共享 Local Data Share LDS 用于同一计算单元中的work group内各个work item之间的低延迟通信和数据共享 LDS配置为32个bank
  • 为了通过面试,要刷多少道leetcode题?一文解答你的疑惑。

    想要学习算法 应付笔试或者应付面试手撕算法题 相信大部分人都会去刷 Leetcode 有读者问 如果我在 leetcode 坚持刷它个 500 道题 以后笔试 面试稳吗 这里我说下我的个人看法 我认为不稳 下面说说为啥不稳以及算法题应该如何
  • Acwing 908. 最大不相交区间数量

    include
  • VTM中YUV-PSNR的计算

    名词解释 参见文章cnblogs 什么是SAD SAE SATD SSD SSE MAD MAE MSD MSE PSNR的计算 较为标准的MSE计算公式和PSNR计算公式如下 引用链接 CSDN 图像的峰值信噪比 PSNR 的计算方法 这
  • linux用户态使用gpio中断方法

    一 用户空间gpio的调用文件 用户空间访问gpio 即通过sysfs接口访问gpio 下面是 sys class gpio目录下的三种文件 export unexport文件 gpioN指代具体的gpio引脚 gpio chipN指代gp
  • 数字化转型的成熟度模型

    来啦 坐 我是冠军 数据赋能 IT团队技术管理实战 作者 四季逗文风创始人 这是 数字化转型系列 第五篇 数字化转型的成熟度模型 一句话解释下 要想搞清楚企业数字化转型的目标 就需要确定企业现在处于什么数字化阶段 只有如此 才可以根据现状目
  • Golang

    欢迎关注 全栈工程师修炼指南 公众号 点击 下方卡片 即可关注我哟 设为 星标 每天带你 基础入门 到 进阶实践 再到 放弃学习 专注 企业运维实践 网络安全 系统运维 应用开发 物联网实战 全栈文章 等知识分享 花开堪折直须折 莫待无花空
  • 2023校招联想汽车C++开发一面

    飞书面试 C 开发 全程无手撕代码 开放性面试 1 翻译英文 给几段英文句子 是和专业相关的 要求英译汉 2 给好几组计算机专业名词 从中选择最熟悉的 进行解释 比如https dns smtp等等 3 一个电路 求其中一个电阻电压 4 代
  • NB!更方便Xshell本地密码破解工具

    工具介绍 XshellCrack是基于SharpXDecrypt的二次开发 用go语言重写 增加了注册表查询设置 更方便xshell本地密码破解 关注 Hack分享吧 公众号 回复关键字 230717 获取下载链接 工具使用 Usage r
  • JavaScript--修改 HTML 元素

    这些是一些用于修改 HTML 元素的常见方法 1 document createElement element 创建 HTML 元素节点 可以使用这个方法创建一个新的 HTML 元素 例如 document createElement di
  • Docker进阶学习:Compose配置编写规则

    docker compose yaml 是Compose的核心 以下是compose的官方文档地址 https docs docker com compose compose file compose file structure and
  • rabbitmq集群故障处理

    rabbitmq集群故障处理 故障现象 rabbitmq启动失败 手动kill掉rabbit的后台进程 杀完后进程又会自动起来 故障处理 1 手动更改rabbitmq故障节点的erl crash dump为erl crash dump ba
  • JavaScript 的面向对象基础,设计模式中的原型模式(设计模式与开发实践 P2)

    文章目录 1 1 动态类型语言和鸭子类型 1 2 多态 1 3 封装 封装数据 封装实现 封装类型 1 4 原型模式和基于原型继承的 JavaScript 对象系统 C 原型模式 JS 原型模式 在学习 JS 设计模式之前需要了解一些设计模
  • 嵌入式开发课程简介

    最近几年 几乎所有的IT企业对应届毕业生都有抱怨 动手能力太差 编程水平低下 大学期间 老师授课以理论为主 学生缺少各种实践 这造成很多学生就业难 学生找不到工作 而企业招不到合适的人 本课程不仅系统的梳理了一遍工作中常用的知识 更是通过大