|
| 第一周 (ARM开发部分) |
| [课程背景] |
|
| 当今嵌入式领域中使用最为广泛的是基于ARM体系结构的嵌入式处理器,其占据了80%以上的32位嵌入式处理器市场份额,从发展之初至今,ARM公司已经推出ARM7,ARM9,ARM9E,ARM10,SecurCore以及Cortex系列的处理器内核。目前,世界上各大芯片生产商纷纷推出自己的ARM芯片,并且越来越多地在工业控制、通信领域、消费类电子产品等发展方向上广泛应用。本课程通过详细介绍ARM的基础体系结构、 ADS开发工具的使用和开发技巧、及大量的应用动手实验让学员快速掌握ARM嵌入式开发要领。 |
|
| 课程安排 |
|
课程内容 |
|
|
理论部分 |
|
嵌入式系统概述与ARM简介
1 ARM处理器与其他体系结构处理器异同比较
2 ARM芯片选型
3 ARM外围硬件设计
4 ARM程序和算法
5 ARM外围硬件设计 |
ARM知识体系
1 ARM的特点(体系结构/流水线/异常处理/寄存器组织)
2 ARM内核概述(内核命名/应用内核/嵌入式内核/安全内核)
3 ARM内核系列 |
ARM结构与编程
1 ARM的工作模式
2 ARM存储器格式
3 ARM运行模式
4 ARM寄存器组织
5 ARM的异常
6 流水线
7 AHBA总线
|
ARM指令系统与汇编语言编程
1 ARM指令概述与特点
2 ARM寻址方式
3 ARM指令集
4 Thumb指令集
5 ARM汇编语言编程
|
使用ARM ADS 开发工具的方法、流程和技巧
1 编译器参数(armcc/armcpp/armasm)
2 链接器使用(armlink/scatter-file)
3 调试器及调试工具(axd/jtag)
4 辅助开发工具(fromelf/armprof/nmake/Makefile)
5 内存地址重映射(memory remap)
6 堆栈初始化(stack&heap)
7 RO/RW/ZI 段地址分配
8 系统呼叫机制(SoftWare Interrupt)
|
ARM启动代码工作原理
1 启动代码基本概念和执行流程
2 全局变量和局部变量的存储结构
3 程序的存储和加载过程
4 RO、RW以及ZI 段的存储特性
5 启动代码的搬移过程
6 启动代码的初始化流程
|
ARM异常和中断处理
1 异常向量表(exception vector table)
2 异常响应
3 产生异常后的处理过程
4 未定义指令异常的特殊用途
5 SWI 软中断指令与系统调用
6 异常返回处理流程
|
|
|
|
实验部分 |
|
ARM 开发工具实验 (实验1-8)
实验1:安装开发工具实验 (ADS+AXD)
实验2:ADS 编程实验 (helloworld)
实验3:AXD 调试实验 (debug)
实验4:ARM 工具链实验 (armcc+armasm+armlink)
实验5:fromelf 实用工具实验 (fromelf)
实验6:uuencode 编码工具实验 (uuencode)
实验7:使用 Jtag 调试开发板实验
实验8:使用 Bootloader 下载执行实验
|
ARM 体系结构与汇编语言实验(实验9-16)
实验9: ARM 数据处理指令操作数寻址方式实验
实验10:ARM 内存访问指令寻址实验
实验11:ARM 堆栈指针寄存器实验 (r13)
实验12:ARM 返回连接寄存器实验 (r14)
实验13:ARM 程序计数器实验(r15)
实验14:ARM 程序状态寄存器实验(cpsr+spsr)
实验15:ARM 工作模式切换实验(svc+irq)
实验16:ARM 汇编与C语言混合编程实验
|
ARM 开发板外设接口实验(实验17-24 )
实验17:ARM 开发板-启动代码烧写实验
实验18:ARM 开发板-LED显示灯实验
实验19:ARM 开发板-七段数码管实验
实验20:ARM 开发板-四位拨段开关实验
实验21:ARM 开发板-蜂鸣器实验
实验22:ARM 开发板-中断按钮实验
实验23:ARM 开发板-定时器实验
实验24:ARM 开发板-串口通讯实验
|
ARM Bootloader 编写实验(实验25-32)
实验25:ARM Bootloader-ledblink实验
实验26:ARM Bootloader-uart driver实验
实验27:ARM Bootloader-printf实验
实验28:ARM Bootloader-stdio实验
实验29:ARM Bootloader-shell实验
实验30:ARM Bootloader-command实验
实验31:ARM Bootloader-flashwrite实验
实验32:ARM Bootloader-autoboot实验
|
ARM 异常和中断处理实验(实验33-40)
实验33:ARM异常向量表实验
实验34:ARM软中断 SWI 异常发生和响应实验
实验35:ARM GPIO中断源使能触发实验
实验36:ARM GPIO中断处理和响应实验
实验37:ARM Timer定时器中断源使能触发实验
实验38:ARM Timer定时器中断处理和响应实验
实验39:ARM中断流程代码分层实验
实验40:ARM中断驱动框架实验
|
|
|
| 第二周 (嵌入式linux应用开发部分) |
| [课程背景] |
|
| 详细介绍嵌入式开发流程、交叉编译环境搭建与开发工具的使用、Bootloader的原理与配置、嵌入式Linux内核的移植与根文件系统构建、高级应用编程开发技巧、嵌入式数据库系统构建与应用编程、嵌入式图形系统构建与应用编程,并通过大量实例演示使学员快速掌握嵌入式Linux开发流程及与应用相关的编程方法和技巧。 |
|
|
理论课 |
|
交叉编译工具介绍与Bootloader启动代码分析
1 嵌入式Linux综述
2 嵌入式Linux开发基本概念
3 嵌入式Linux开发工具介绍
4 分析各种典型的bootloader(uboot、armboot、redboot)
|
嵌入式Linux移植与根文件系统
1 Linux 与 uClinux 的目录结构
2 内核编译和配置
3 构建根文件系统
|
嵌入式图形系统的构建与开发
1. 嵌入式Linux图形用户界面
2. Qt的特点
3. Qt编程举例
4. Qt designer
5.为嵌入式应用定制Qtopia
6. 交叉编译
|
嵌入式数据库系统的构建与开发
1 关系数据库与Sql语言
2 使用Sqlite
3 嵌入式数据库的编程
|
嵌入式Linux开发与调试方法
1 gdb的调试命令介绍
2 应用程序开发的技巧
|
|
|
|
实验部分 |
|
实验一:嵌入式linux开发环境建立
实验目的:掌握交叉编译环境的建立;掌握内核的交叉编译;掌握redboot的操作
实验要求:要求完成内核编译,上载,运行,直到hello world程序在目标板上运行成功
实验内容:在S3C2410开发板上运行Linux。
|
实验二:根文件系统的建立
实验目的:掌握根文件系统的建立;掌握静态编译,动态编译应用程序
实验要求:要求独立完成根文件系统的建立,编写一个hello world程序在
S3C2410上运行 并比较动态编译与静态编译的不同。
实验内容:在S3C2410上运行hello world程序。
|
实验三:基于S3C2410的QT实验
实验目的:掌握Qt应用程序的编译和运行,理解Qt在开发板上的移植
实验要求:要求独立编译QT库、资源和应用程序,并通过根文件系统的方
式在目标板上成 功运行hello world程序或其他实例程序
实验内容:Qt命令行;
Qt库函数
|
实验四:基于S3C2410的sqlite实验
实验目的:掌握Sqlite应用程序的编译和运行,在开发板上的运行
实验要求:要求交叉编译Sqlite,并通过测试程序静态连接Sqlite库,并通过
根文件系统 的方式在目标板上成功运行hello world程序
实验内容:在ARM9 S3C2410开发板上运行Sqlite应用程序
|
实验五:Sqlite与Qt集成实验 |
|
|
| 第三周 (嵌入式linux移植部分) |
| [课程背景] |
|
Linux具有开放、稳定和驱动资源丰富等特点,通过多年的发展,Linux核心中对ARM的支持已逐步形成了完备的移植层结构,所以也就成为众多Soc芯片设计商和板级开发商首选进行移植的操作系统。但对于移植者来说,移植系统涉及到中断、定时器、内存管理等多方面知识的实际运用,另外,对很多问题的出现难以快速定位,更得不到正确有效的解决。
本课程通过理论课与实验课相结合的方式,力求解决开发者在移植过程中容易出现的问题,使开发者能够正确快速的完成Linux内核的移植。 |
|
|
理论部分 |
|
嵌入式系统移植
1. 嵌入式系统移植基本概念
2. Bootloader移植
3. 操作系统移植
4. 应用程序移植
|
Bootloader移植
1. U-boot简介和架构分析
2. U-boot代码要点分析
3. 实现自己的bootloader
|
Arm Linux核心移植架构分析
1. Linux的中断结构
2. Linux的定时器
3. Linux的设备地址映射
4. Linux基本I/O(serial或显示)
5. Linux的初试化
|
Linux核心的初试化代码分析(ARM平台)
1. 汇编中初始化,核心初始化pgd,虚拟空间的切换
2. 内存和硬件的初始化
3. 中断和定时器的初始化
4. 设备驱动的初始化
5. 根文件系统的挂载
6. init进程的启动
|
Linux核心的编译和链接结构分析
1. Linux核心的makefile和Kconfig结构分析
2. Linux核心的链接脚本分析
|
Linux核心的平台相关层代码分析
1. ARM平台相关层代码结构(arm)
2. S3C2410的平台相关层代码结构(plat-S3C24xx)
3. S3C2410板级相关层代码结构(mach-S3C2410)
|
Linux核心移植
1. 和板级移植相关的代码和数据结构
2. 和平台级移植相关的代码和数据结构
|
|
|
|
实验部分 |
|
第一部分实验
实验一:构建、编译和装载自己的bootloader
实验二:x-modem功能的实现
实验三:启动Linux代码的实现 |
第二部分实验
实验一:编译和配置Linux核心(S3C2410平台)
实验二:修改Linux的启动logo
实验三:在Bootloader实验的基础上修改核心启动参数
实验四:实现ramdisk的挂载
实验五:实现一个简单的init进程
|
第三部分实验
实验一:S3C2410板级移植实验
实验二:S3C2410平台级移植实验
|
|
|
| 第四周 (嵌入式linux高级编程部分) |
| [课程背景] |
|
| 目前,国内外企业对嵌入式Linux系统下的高级程序员的用工需求缺口比较大,但又很难找到在嵌入式Linux环境下,能够从事系统级高级应用开发的优秀的工程技术人员。为此,亚嵌教育集公司优质师资推出了《嵌入式Linux系统高级编程实验班》短期培训课程,系统地培训嵌入式Linux系统下的各项高级编程技术:嵌入式IO接口技术高级编程、进程线程高级编程、IPC高级编程技术以及嵌入式网络应用高级编程。结合有针对性、典型的实验,使参加培训学员能够更好的掌握嵌入式Linux系统平台下的各种高级编程技术。 |
|
理论部分 18学时 |
|
第一部分IO接口高级编程 1 系统功能调用接口
2 标准I/O库接口
3 高级I/O
|
第二部分 进程高级编程 1 进程控制
2 进程间的关系
3 信号(signal)
|
第三部分 线程高级编程 1 进程与线程
2 Posix线程
3 线程的创建与结束
4 竞争和临界区概念
5 线程同步
|
第四部分 IPC高级编程 1 线程间通信与进程间通信
2 posix IPC 和 system V IPC
3 消息传递
4 同步
5 共享内存
|
第五部分 网络基础知识 1 网络基本概念
2 路由概念
3 TCP/IP各个层次的主要协议和功能
4 如何抓包并分析内容
|
第六部分 客户端/服务器编程 1 客户端与服务器概念
2 字节顺序
3 网络编程常用函数
4 socket概念及使用
|
第七部分socket网络高级编程 1 最简单的TCP C/S
2 添加错误处理
3 处理SIGPIPE信号
4 使用fork进行并发处理
5 使用select
|
第八部分Web服务器编程 1 socket处理
2 http请求处理
3 文件请求处理
|
|
|
实验部分 12学时 |
|
第一部分I/O实验
1 open/close/read/write综合实验
2 fcntl/ioctl综合实验
3 select练习
|
第二部分 进程实验
1 fork/wait/exec综合练习
2 mysh:简化实现的shell
3 mysh增强:支持重定向和管道
|
第三部分 线程实验
1 圆周率的近似计算
2 Producer_consumer问题
3 管程的C++实现
|
第四部分 IPC实验
1 最简单的TCP C/S
2 添加错误处理
3 处理SIGPIPE信号
4 使用fork进行并发处理
5 使用select
|
第五部分 网络编程实验---C/S
|
第六部分 网络编程实验---Web
|
|
|
| 第五周 (嵌入式linux驱动开发部分) |
| [课程背景] |
|
| 基于Linux的嵌入式系统目前获得了广泛应用,在嵌入式Linux核心层的开发中,设备驱动的编写占据了大部分的工作量,能编写出真正可用的驱动程序存在着很多技术要点,本课程的开设兼顾初学者和有一定开发经验人员的需要,通过对嵌入式Linux系统理论知识和实际代码分析相结合的方式,了解和学习目前在嵌入式Linux驱动开发中比较重要的几项驱动和其框架结构,如块设备驱动程序框架,LCD Frambuffer, 网络设备驱动,USB驱动等。通过大量精心设计的驱动实验,使学员真正掌握嵌入式系统驱动开发的关键技术。 |
|
|
理论部分 |
|
Linux驱动程序开发基础
1. 驱动程序与模块概念
◆ Linux设备驱动的概念
◆ Platform device模型介绍
◆ 模块的概念
◆ 模块的构建、编译和加载
2.字符设备驱动程序
◆ 字符设备驱动程序概念
◆ 主设备号和次设备号
◆ fs_operation结构分析
◆ 驱动程序调试技术简单介绍
3. 中断处理
◆ 中断机制
◆ softirq机制
|
Linux块设备驱动程序开发
1 Linux块设备驱动程序概要
◆ 块设备驱动程序的特点和工作原理
◆ 块设备驱动的设备文件接口概念
◆ 块设备驱动的文件系统接口概念
2. Linux块设备驱动程序实现要素分析
◆ 块设备驱动的注册接口(register_blkdev等)
◆ 块设备驱动操作接口(open,release,ioctl等)
◆ 块设备驱动的request队列和request操作
|
第三部分 线程高级编程
1 进程与线程
2 Posix线程
3 线程的创建与结束
4 竞争和临界区概念
5 线程同步
|
块设备代码分析
代码分析(vdisk.c)
◆ vdisk.c的注册接口
◆ vdisk.c的open,release,ioctl
◆ vdisk.c的request队列和request操作
|
LCD Framebuffer设备驱动程序开发
Framebuffer设备驱动
◆ Framebuffer驱动程序原理,结构分析、及数据结构
◆ Framebuffer驱动程序设计
|
网络设备驱动程序开发
1. 网卡设备介绍
◆ 常见网卡
◆ 网卡芯片所实现的协议层功能
◆ cs8900网卡芯片手册导读
◆ cs8900网卡硬件电路分析
2. Linux网络驱动结构
◆ Linux TCPIP网络结构概述
◆ Linux网络设备结构
3. 网卡设备介绍
◆ 常见网卡
◆ 网卡芯片所实现的协议层功能
◆ cs8900网卡芯片手册导读
◆ cs8900网卡硬件电路分析
|
USB设备原理
1. usb 概念介绍
2. usb host/client分类说明
3. usb 地址端点的使用
4. usb 四种传输类型及其作用
5. usb 协议实现及其详解
6. usb 设备即插即用过程
|
|
|
| 实验部分 |
|
第一部分 驱动基础实验
实验一:模块的构建、编译和装载,hello world模块的实现
实验二:Platform device模型实验
实验三:GPIO按键实验——使用中断机制访问
|
第二部分 块设备驱动实验
实验一: 修改vdisk.c支持多个设备
实验二: 在实验一基础上为vdisk.c添加字符设备接口实现
(实现open,close,ioctl,read,write,lseek方法)
|
第三部分 Framebuffer实验
实验一:LCD Framebuffer——通过mmap操作fb设备
实验二:LCD Framebufferr——通过mmap显示图片
|
第四部分 字符设备驱动实验
实验一:ifconfig等命令实验
实验二:字符设备的网卡驱动实现(上)
实验三:字符设备的网卡驱动实现(下)
实验四:驱动的测试程序编写
|
|
|