第一周 (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等命令实验
      实验二:字符设备的网卡驱动实现(上)
      实验三:字符设备的网卡驱动实现(下)
      实验四:驱动的测试程序编写