学习嵌入式Linux的大纲以及一些要求

2019-07-12 23:17发布

学习嵌入式Linux的大纲以及一些要求(供自学的朋友参考,摘自亚嵌)
    课程安排 课 程 简 介 学时学费 第一周
Linux操作系统
      主要介绍 Linux 的基本知识包括发展历史、系统安装、基本命令和系统管理,Linux 下的常用工具、窗口系统、以及各种应用服务配置等知识。 30学时 第二周
Linux基础
      主要介绍 Linux 上的程序设计基础知识,包括C语言精要、编程风格、应用开发、源代码管理、IDE的使用等知识。 30学时 第三周
Linux高级编程
      主要介绍 Linux 上的高级编程知识,包括系统编程、网络编程、多线程、文件I/O、高级I/O及脚本语言编程等知识。 30学时 第四周
 嵌入式体系结构
        主要介绍 ARM、MIPS、PowerPC等体系结构及其基本编程知识,包括指令分类,寻址方式、指令集、存储系统、异常中断处理、汇编语言以及C/C++和汇编语言的混合编程等知识。 30学时 第五周
嵌入式硬件设计
      主要介绍嵌入式硬件设计基础知识,包括芯片选型、设计原理、布线制板及 Cadence PCB工具使用等知识。 30学时 第六周
嵌入式 Linux应用开发
      主要介绍嵌入式 Linux 开发应用程序的基本流程和知识,包括嵌入式Linux基本概念和开发流程、Bootloader的工作原理、内核裁减配置和交叉编译、根文件系统制作、网 络编程及图形界面和数据库开发等知识。 30学时 第七周
嵌入式 Linux驱动开发
      主要介绍嵌入式 Linux 上驱动程序开发规范,包括设备驱动程序概念,字符设备驱动程序、块设备与网络设备、网卡驱动以及常用嵌入式设备驱动开发等知识。 30学时 第八周
嵌入式 Linux移植开发
      主要介绍嵌入式 Linux 在芯片级别的移植方法,包括SkyEye仿真调试工具的使用芯片体系架构分析、u-Boot分析、uClinux移植和相关驱动分析等知识。 30学时 第九周-第十二周

(项目实践)

嵌入式数据采集系统
项目描述: 本项目的目标是实现一个嵌入式数据采集系统,该项目涉及到的相关技术有:NFS的搭建、JFFS2文件系统的建立及使用、嵌入式数据库Sqlite的移植 及编程、MiniGUI编程、设备驱动程序的编写及添加,以及内核、文件系统的裁减及编译。
软件平台: RedHat 9.0 、uCLinux
硬件平台: 44B0开发板
项目成员: 由中心老师及学员组成。
开发方式: 由项目模块负责人带领学员完成。
功能描述: 实现一个基于44B0X的8路数据采集系统。
基本要求:
       1、可同时采集8路数据;
       2、8路数据及时间在液晶屏上图形化实时显示;
       3、8路数据每5秒存放一帧(保存到flash中);
       4、具有查询功能;
       5、8路数据通过网口传入上位机进行实时监控.
120学时     培训目标 学习内容 掌握程度 掌握三种编程语言 C 语言 精通   C++ 语言 熟悉   ARM 汇编语言 熟悉 掌握两种嵌入式Linux操作系统 Linux 精通   uCLinux 精通 掌握两种嵌入式实时操作系统 VxWorks 熟悉   uC/OS-II 熟悉 掌握三种处理器体系结构 ARM 体系结构 精通   MIPS 体系结构 熟悉   PowerPC 体系结构 了解 掌握五种 ARM 核处理器芯片 Samsung S3C44B0 精通   Cirrus Logic EP7312 熟悉   Intel XScale PXA255 精通   Philips 2104 精通   MIPS Godson 龙芯 熟悉 掌握两种硬件设计工具 Candence PCB 熟悉   Protel 了解 掌握两种Linux下编辑软件 VI 精通   EMACS 了解 掌握两种串口通讯工具 超级终端(Windows) 熟悉   MiniCOM(Linux) 熟悉 掌握两种 Flash 烧写工具 Flash Programmer(GUI) 熟悉   JFlash 烧写软件及原理 精通   SJF 系列烧写软件及原理 精通 掌握两种调试工具 JTAG 在线调试器 熟悉   SkyEye 仿真调试工具 熟悉 掌握两种集成开发环境 Eclipse IDE 熟悉   K-Develop IDE 熟悉 掌握一种源代码版本管理工具 CVS 熟悉 掌握:嵌入式 Linux整体开发流程   熟悉          GNU 交叉编译器使用 Cross-compiler-gcc/g++ 精通   Linux Makefile 组织结构 精通          Bootloader 启动代码 u-Boot 精通   RedBoot 熟悉          内核编译 配置参数设置 精通   内核调试 熟悉          文件系统 JFFS2 文件系统 精通   NFS 文件系统 精通   ROMFS 文件系统 精通   EXT2 文件系统 熟悉   YAFFS 文件系统 了解          设备驱动程序 液晶 LCD 设备驱动 精通   USB 设备驱动 精通   网卡设备驱动 精通          嵌入式图形系统 MiniGUI 精通   QT/Embedded 熟悉   MicroWIN 了解          嵌入式数据库系统 SQLLite 熟悉          嵌入式应用程序开发 网络通讯应用开发 精通   数据库存储应用开发 熟悉   多媒体应用开发 熟悉   图形用户界面开发 精通   Shell 编程技巧 熟悉 说明:精通――表明对于所学内容和工具的原理进行过深入分析,了解相关内容实现的具体技
                       术细节,并掌握了相关工具的高级使用技巧。
          熟悉――表明对于所学内容和工具能够融会贯通,掌握相关内容的基本概念,并能够熟练                        使用相关工具的常用技巧。           了解――表明对所学内容一般了解,能够区别相关内容在概念上的异同,并能够初步使用                        相关工具。   嵌入式 Linux 就业班课程大纲
  一、Linux 操作系统入门班

   1)  Linux简史
       系统特性 / 设计理念 / 与其它操作系统之间的差异 / 开放源码
   2)  Linux安装
       Linux 分发包 / 安装前准备 / 系统安装与规划
   3)  Linux基本命令
       登录 / Bash 常用命令 / Shell 常用按键 / 快捷键 / 参考手册
   4)  Linux基本系统管理
       系统启动与初始化 / 单人模式 / 管理用户帐号
   5)  Linux文件系统管理
       Ext2文件系统 / 文件权限与属性 / 设备文件 / /proc 文件系统 / 根文件系统
   6)  Linux软件与内核的升级
       备份与压缩工具 / 建立新内核 / 自动载入模块
   7)  Linux的窗口系统
       X窗口系统 / XFree86 / KDE / GNOME /
   8)  Linux上常用编辑器
       VI / VIM / Emacs / Tex / LeTex / 排版与文书处理
   9)  Linux上常用图像和网络工具
       MetaPost / Gimp /
       openSSH / telnet / rdesktop / QTerm /
   10) Linux各种服务器的安装
       Apache / VSFTP / Sendmail / DNS / FireWall / Route Server
       Samba / NFS / PPP / DHCP / MySQL Server

   二、Linux 开发编程基础班

   1)  C 语言程序设计精要
       C语言的地位和重要性 / 基本特点 / 历史渊源
       深刻理解指针 / 工具的重要性 / 实践出真知
   2)  C语言语法重点难点剖析
       变量声明与定义 / 函数声明与定义 / 数组与指针 / 变量的可见范围与生存期
       编译与链接 / 交叉编译与链接 / 内存与I/O / C语言与数据结构要点
       C语言代码移植 / C语言与嵌入式系统开发 / 从C到C++
   3)  Linux 程序设计基础
       编程风格 / GNU编程风格 / Linux 内核编程风格
   4)  Linux 应用程序开发
       GCC / make / Makefile / GDB
   5)  Linux 源代码管理
       RCS / CVS / 软件打包 / 制作RPM
   6)  IDE 的使用
       VIM / Emacs / glade / kdevelop

   三、Linux 开发编程高级班

   1)  系统编程
       信号 / signal函数 / 不可靠的信号 / 中断的系统调用 / 可再入函数
       管道 / popen和pclose函数 / 协同进程 / FIFO
       消息队列 / 信号灯 / 共享内存 / 客户机-服务器属性
   2)  网络编程
       网络基本概念 / 套接口编程 / 网络字节次序 / Client/Server 结构 / UDP 编程
   3)  进程控制
       进程标识 / fork 函数 / vfork 函数 / exit 函数 / wait 函数 / 用户标识
   4)  多线程编程
       创建和销毁线程 / 用条件变量改进线程同步 / 线程同步 / 线程的取消和终止
   5)  文件 I/O
       文件描述符 / open / read / write / close / ioctl / 原子操作 / dup / dup2 函数
   6)  高级 I/O
       非阻塞I/O / 记录锁 / 流 / I/O多路转接 / 异步I/O / 存储映射I/O
   7)  脚本语言编程
       Shell 编程 / AWK编程 / 使用sed编程
       yacc/lex 简介 / 利用正则表达式编程

   四、嵌入式体系结构基础班

   1)  ARM概述及其基本编程模型
       ARM技术的应用领域 / ARM处理器系列 / ARM处理器模式 / ARM寄存器
       ARM体系的异常中断 / ARM体系中存储系统
   2)  ARM指令分类及其寻址方式
       ARM指令集概要 / ARM指令的分类 / ARM指令的一般编码格式
       ARM指令寻址方式 / 协处理器Load/Store指令的寻址方式
   3)  ARM指令集
       ARM基本指令 / ARM指令功能段 / Thumb指令
   4)  ARM汇编语言程序设计
       ARM汇编语言 / ARM汇编语言程序格式 / 子程序调用 /汇编程序设计举例
   5)  ARM存储系统
       ARM存储系统概述 / 访问CP15寄存器的指令 / 存储器管理单元MMU
       快速上下文切换技术 / cache的工作原理和地址映像方法
   6)  ARM异常中断处理
       ARM中异常中断处理概述 / 进入和退出异常中断的过程 / 中断处理程序安装
       SWI异常中断处理程序 / FIQ和IRQ异常中断处理程序 / 其他异常中断处理程序
   7)  C/C++以及汇编语言的混合编程
       内嵌汇编器的使用 / 从汇编程序中访问C程序变量 /
       在C/C++程序中使用内嵌的汇编指令 / 汇编程序,C程序及C++程序的相互调用
   8)  体系结构对系统开发的支持
       AMBA总线 / ARM参考外围规范 / ARM仿真器 / JTAG边界扫描测试结构
       建立硬件系统原型的工具 / ARM调试结构
   9)  体系结构对操作系统的支持
       操作系统简介 / ARM系统控制协处理器 / 保护单元寄存器CP15 / ARM保护单元
       CP15 MMU寄存器 / ARM MMU结构 / 同步 / 上下文切换 / 输入/输出
   10) MIPS系统结构
       MIPS简介 / MIPS数据格式和指令集 / 特权资源 / CP0寄存器
       操作模式 / 虚拟内存系统(地址空间分配和TLB) / 例外
       MIPS的汇编语言
   11) MIPS系统常见交叉编译器简介
       交叉编译环境的建立 / 汇编器,编译器,链接器和其他编译附属命令
       MIPS编译器的优化和编译选项 / ELF文件结构分析 / 内嵌汇编语言

  五、嵌入式硬件设计基础班

   1)  Cadence PCB设计工具简介
       EDA概述 / Cadence PCB工具简介 / Allegro PCB Design HDL 610工具包
   2)  创建项目及原理图设计
       创建PCB设计项目 / 创建平面设计
   3)  层次化设计
       层次化设计 / 自顶向下层次化设计 / 自底向上层次化设计 / 层次化设计的浏览
   4)  设计规则
       规则驱动的设计流程 / 简单规则添加 / 规则管理器Constraint Mangager
   5)  网表生成
       网表生成 / BOM表生成 / 网表传递
   6)  设计修改
       元件/网表查找 / 元件替换 / 全局修改
   7)  原理图符号库
       Cadence PCB 原理图符号库结构 / 原理图符号库创建工具Part Developer
   8)  PCB设计工具 Allegro
       Allegro PCB设计流程 / Allegro 工作界面介绍 / Allegro 工作环境设置
   9)  Allegro 设计规则
       Allegro 设计规则体系 / Allegro 基本设计规则 / Allegro 扩展设计规则
   10) Allegro 布局
       Allegro 布局策略 / Allegro 布局规划 / 原理图驱动布局
       Quick Place / 交互布局 / 自动布局 / 管脚交换
   11) Allegro 布线
       交互布线 / 自动布线 / 布线后优化
   12) Allegro 覆铜
       阴片与阳片 / 覆铜 / 电源地分割
   13) Allegro 光汇文件生成
       设计检查 / 丝印层生成 / 光汇文件生成
   14) Allegro 封装库生成
       创建焊盘 / 创建封装库

  六、嵌入式 Linux 开发应用班

   1)  嵌入式 Linux 综述
       Linux的由来及现状 / 嵌入式操作系统 / 嵌入式linux的典型应用及分类
       实时Linux / ARMlinux / uClinux / ARM、PPC、MIPS、X86 体系结构
   2)  嵌入式开发基本概念
       内核 / 文件系统 / 根文件系统 / 驱动程序 / 设备文件
   3)  嵌入式开发常用工具
       VI / Emacs / GCC及其它交叉编译器 / Makefile项目管理工具 / SkyEye 仿真工具
   4)  嵌入式Linux开发流程
       基本概念总体流程 / 引导程序 Bootloader 原理及代码分析 / 开发实例
       嵌入式 Linux系统裁减及配置 / 编译相关文件剖析 / 系统固化方法
       根文件系统的制作方法 / 应用程序的编写 / 系统加电自动启动
   5)  嵌入式Linux下应用开发
       应用程序编程基本理论 / 进程间通信 / 线程基本理论 /
       网络编程基本概念 / 常用接口 / 网络字节序 / 通讯协议 / 网络安全初步
       动态库、静态库的制作及使用 / 综合实例解析 / 嵌入式采集系统三机网络通讯
   6)  嵌入式图形界面开发
       嵌入式图形系统选择 / microwindows / Qt/Embedded / MiniGUI
       嵌入式图形系统的基本概念 / 位图 / GDI / 事件 / 控件类和控件 / 定时器
       Framebuffer / X Window / SVGALib / LibGGI
       MiniGUI 的配置、编译、安装 / MiniGUI 的移植 / MiniGUI IAL的开发及实例
       综合实例演示 / 嵌入式数据采集系统三机界面设计和实现 / 系统集成

      实验内容:

   1)  基于Intel Lubbock开发板上的Linux 实现
       XScale交叉编译环境的建立 / LUBBOCK开发板的Linux内核配置 /
       Linux Host主机环境配置 / 加载并运行Linux内核 / 建立NFS根文件系统
       启动内核 / 运行HelloWorld程序
   2)  基于44B0X开发板上的bootloader移植
       硬件平台的搭建 / 软件调试平台的安装和使用
       Boot Loader代码分析 / 进入main函数 / Bootloader 的调试和烧写
   3)  基于44B0开发板上的uClinux实现
       建立交叉编译环境 / 配置并编译uClinux内核(支持网络文件系统)
       配置NFS服务器端 / 编写编译应用程序 / 加载并运行uClinux
   4)  uClinux下的LED驱动
       建立交叉编译环境、解压内核 /. 编写LED驱动程序
       编写应用程序 /. 配置、编译并运行内核 / 测试 LED 驱动工作情况
   5)  嵌入式图形界面的开发—MiniGUI
       MiniGUI 在Intel XScale/PXA255 Lubbock上的移植
       MiniGUI 在S3C44B0X开发板上的移植
   6)  基于Nandflash的JFFS2文件系统的实现
       建立交叉编译环境、解压内核、打补丁文件 / 配置内核和用户选项
       编译uClinux /. 下载并运行 / 测试 JFFS2 文件系统工作情况
   7)  基于skyeye的uClinux和ARM Linux 内核调试
       skyeye中常用的命令 / 在SkyEye上调试uClinux内核 / SkyEye LCD 仿真实例
       生成支持skyeye_ne2k网卡的内核 /在SkyEye上测试网络通讯情况
   8)  基于S3C4510B开发板上的uClinux实现
       在 ARM7 开发板上下载和运行uClinux 内核
       uClinux 内核的交叉编译和 SkyEye 仿真调试
       添加新的 uClinux 应用程序 / 编写应用程序代码 / 修改相关 Makefile 文件
       修改相关 config.in 文件 / 重新编译内核和文件系统

  七、嵌入式 Linux 开发驱动班

   1)  设备驱动程序简介
       Linux设备驱动的概念 / 设备和模块分类 / 模块的构建、编译和装载
   2)  字符设备驱动程序
       字符设备驱动程序分析 / 主设备号和次设备号 / 文件操作
       fs_operation结构分析 /open/release/read/write/ioctl/阻塞型I/O/poll和        select
       异步通知 / tasklet和底半部 / 内核空间与用户空间数据的互访
       实例分析:键盘及触摸屏驱动分析(中断实现) / 驱动程序调试技术
   3)  块设备与网络设备
       块设备驱动程序的特点和工作原理 / 典型的块设备驱动程序分析
       MTD Flash块设备驱动 / 实例分析:SD卡驱动程序的实现
       网络设备驱动程序简介及网络参考模型 / 套接字(socket)简介 / 套接字缓冲
       net_device结构分析 / 数据包传输与接收 / 中断处理函数 / MAC地址解析
       网卡驱动信息统计 / 实例分析:linux下NE2000兼容网卡驱动
   4)  常用嵌入式设备驱动分析及嵌入式设备驱动开发精要
       I2S协议分析及驱动程序实现 / I2C协议分析及驱动程序实现
       SPI协议分析及驱动程序的实现 / 驱动程序开发常用技巧
       uClinux设备驱动程序开发注意事项 / uClinux设备驱动程序添加方法
       综合实例演示:uClinux下添加键盘驱动(基于44B0X处理器)
       ARMlinux设备驱动程序开发注意事项 / ARMlinux设备驱动程序添加方法
       综合实例演示:ARMlinux下添加触摸屏驱动(基于2410处理器)

      实验内容:

   1)  蜂鸣器驱动程序编写
       理解字符设备驱动程序的框架
       填写蜂鸣器的驱动代码
       通过对蜂鸣器驱动程序的编写,熟悉了解掌握驱动程序的基本编写步骤
       理解蜂鸣器示范驱动代码的原理;掌握设备驱动程序的基本编写步骤
   2)  LED指示灯驱动程序编写
       理解字符设备驱动程序的框架
       了解LED指示灯的驱动代码
       填写LED指示灯的应用程序代码
       通过对LED指示灯的驱动程序的编写,加深了解掌握驱动程序的基本编写步骤
       理解示范驱动代码的原理,学写一个LED指示灯的驱动程序
   3)  数码管驱动程序编写
       理解字符设备驱动程序的框架
       了解数码管驱动程序
       掌握驱动程序的编写流程
       通过对数码管的驱动程序的编写,进一步掌握驱动程序的基本编写过程和步骤
       理解示范驱动代码的框架和原理,尝试编写一个数码管驱动程序的驱动程序
   4)  液晶屏驱动程序编写
       理解字符设备驱动程序的框架
       了解LCD驱动程序
       掌握驱动程序的编写流程
       通过对液晶屏驱动程序的编写,深入理解掌握驱动程序的基本编写过程和步骤
       理解示范LCD驱动代码的框架和原理,深入理解掌握驱动程序的编写过程
   5)  USB鼠标的驱动
       USB驱动原理介绍
       USB鼠标驱动的代码的分析
       USB鼠标驱动程序的验证
       通过对USB鼠标的驱动程序编写,加深了解掌握usb驱动程序的基本编写步骤
       理解示范驱动代码的原理
   6)  8139网卡的驱动
       网卡驱动流程介绍
       8139网卡驱动的代码的分析
       8139网卡驱动程序的验证
       通过对8139网卡的驱动程序编写,加深了解掌握网卡驱动程序的基本编写步骤
       理解示范驱动代码的原理

  八、嵌入式 Linux 开发移植班

   1)  内核调试工具
       Skyeye的使用
       Skyeye的源代码分析,基于Skyeye开发针对特定开发板的模拟器
   2)  Bootloader移植
       LPC2294的体系架构分析
       U-BOOT(或blob)的简介和架构分析
   3)  uClinux移植
       术语和uClinux源代码的基本常识
       启动代码的汇编程序部分
       setup_arch(内核初始化)
       PARSE_OPTIONS(uClinux命令行参数的解析)
       trap_init(中断底层初始化,中断向量到do_IRQ)
       init_irq(中断高层初始化,do_IRQ到中断服务程序)
       time_init(时钟中断)
       串口驱动
       其它杂项(各种剩余的修改文件)
       uClinux的配置(Makefile, config.in, .config)
   4)  代码分析
       Linux2.4底层代码分析
       设备驱动代码分析:串口和时钟、网络驱动分析
       Linux2.6的底层代码分析 / Linux2.6的操作系统移植

      实验内容:

   1)  LPC2294平台上的串口,时钟,pll和系统初始化方面的编程
   2)  移植U-BOOT(或blob),使U-BOOT(或blob)可以在开发板上运行
   3)  开发针对目标板的Skyeye模拟器,并在Skyeye上运行U-BOOT(或blob)
   4)  uCLinux 2.4.x的移植到真实开发板

  九、项目实践 ―― 嵌入式数据采集系统

   1)  实现目标:
       基于 S3C44B0 处理器,设计并实现一个最小系统,完成数据采集、网络通讯、图形用户界面显示以及
       嵌入式数据库存储功能。
   2)  时间安排:
       第一周:硬件设计
       考核知识点:
       嵌入式硬件设计原理 / S3C44b0 处理器外设资源 / Candence 原理图设计
       网表生成 / 布线设计 / 信号完整性验证
       第二周:系统移植
       考核知识点:
       Bootloader 移植 / Flash 烧写工具使用 / 硬件调试方法
       uClinux 编译 / 配置 / 移植 / JFFS2 文件系统移植
       网络设备驱动 / 液晶设备驱动 / LED 设备驱动编写 / 数模转化驱动
       第三周:应用开发
       考核知识点:
       网络 SOCKET 编程 / 通讯协议设计与实现
       GUI 程序开发 / 控件使用和消息触发机制
       数据库原理 / SQL 语句 / SQLLite 的移植 / 嵌入式数据库的设计和实现
       第四周:测试发布
       考核知识点:
       系统集成 / Alpha 测试 / Beta 测试
       源代码管理 / 编写用户使用手册 / 提交项目文档