Chinaunix首页 | 论坛 | 博客
  • 博客访问: 530411
  • 博文数量: 87
  • 博客积分: 1549
  • 博客等级: 上尉
  • 技术积分: 970
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-14 16:56
文章分类
文章存档

2013年(10)

2012年(28)

2011年(49)

分类: LINUX

2011-04-05 00:24:51

以国嵌视频为主,里面的实验至少做两遍!

 

项目驱动实验,实验驱动学习。

 

嵌入式开发包含至少两个级别,一个是嵌入式内核驱动级别,另外一个是嵌入式应用层开发,而薪酬高的,最具价值的无疑是嵌入式内核驱动级别的开发者。识别一个嵌入式内核驱动培训的好坏的标准就是,学生能不能真正进行内核驱动的编程。

 

从零开始写至少5种Linux驱动,真正掌握ARM平台的Linux内核驱动的核心编程能 力,熟练掌握ARM汇编、ARM体系结构、ARM平台的直接控制程序(裸驱动)。同时在ARM开发板上直接自己动手书写硬件控制程序以及Bootloader等, 一定不是简单的移植,而是真正理解并且亲自书写。

 

 

 

 

---------------------  嵌入式 基础 -----------------

 

一、Linux系统基础 (3天)

目标: 能比较熟练的安装、操作Linux系统, 并能配置开发环境与常用服务.

 

   1.Linux基础

 

       . 系统安装

 

       . 帮助系统

 

       . 文件管理

 

       . 用户组

 

       . 文本处理与编辑

 

 

 

    2. Linux常用命令

 

       . 查找

 

       . 压缩 

 

       . 输入/出重定向     

 

       . 管道 

 

       . 启动脚本

 

       . 软件安装

 

       . x-window   

 

3. Linux网络配置

 

       . TCP/IP简介

 

       . 网卡配置

 

       . DNS配置

 

       . nfs

 

       . ssh

 

二、shell程序设计(2天)

 

教学目标:能用Shell处理简单的批量化工作

 

1.Bash Shell初步

 

. 变量

 

. 运算符

 

. 流程控制

 

. 环境变量

 

      

 

2、Bash Shell进阶

 

. 文件操作

 

. 函数

 

. 输入输出

 

 

三、C语言程序设计 (10天)

 

目标: 能设计普通的应用程序

 

案例: 

 

1、指法练习程序

 

2、汉诺塔游戏

 

    1.C语言基础

 

       . C语言的特点  

 

       . 数据类型

 

       . 运算符

 

       . 表达式

 

       . 关系运算符

 

       . If 语句

 

       . switch 语句

 

       . 循环语句

 

    2. 函数

 

. 函数的声明和定义

 

       . 形参与实参

 

       . 递归    .

 

     3. 数组

 

       . 数组的定义

 

       . 整型数组

 

       . 字符数组 

 

       . 字符串

 

       . 数组名的意义

 

       . 多维数组

 

    4. 指针

 

       . 指针的定义

 

      . 指针运算符

 

       . 指针的加减

 

       . 动态内存分配

 

       . 堆与栈

 

   5.数组指针

 

. 指针数组   

 

. 数组指针

   6. 预编译与VT控制码         

 

       . 声明与头文件

 

       . 静态链接库

 

       . 动态链接库

 

       . ANSI VT控制码

 

    7. 组合数据类型

 

. 结构体

 

 . 结构体指针

 

 . 枚举

 

. 共用体 (联合)

 8. 指针高级应用

 

       . 二级指针

 

       . 三级指针

 

       . 多级指针

 

       . 函数指针

 

       . C语言与面向对象

 

     9.文件操作

 

       . 标准I/O (fopen)      

 

     10.辅助开发工具

 

. Makefile的编写

 

       . GDB的使用

 

       . CVS与配置管理

 

 四、数据结构  (7天)

 

目标: 熟悉常用的数据结构与算法

 

案例:

 

1、成绩管理系统

 

2、计算器

 

3、电子词典

 

4、文件压缩器

 

  1、单向链表 

 

       . 链表的创建

 

       . 链表的遍历        

 

       . 结点的添加、删除

 

       . 基于函数指针的查找

 

  2、Linux内核链表

 

       . 双向链表

 

       . Linux内核链表的创建

 

       . List结构的作用

 

       . 有头与无头链表 

 

  3、排序及查找

 

. 冒泡排序

 

       . 快速排序

 

       . 选择排序

 

       . 插入排序

 

  4、Hash表

 

       . Hash算法

 

       . Hash表的创建

 

       . 遍历

 

 5、队列和堆栈

 

  . 数组存储

 

       . 链式存储

 

 6、树与二叉树

 

. 数组存储

 

       . 链式存储

 

       . 权值的概念

 

       . Huffman树

 

       . Huffman编码

 

  7、广义表

 

       . 组合链表的应用

 

       . 广义表

 

 项目实践(5天):俄罗斯方块

 

用VT控制码结合数据结构的知识来实现。

 

 五、C++程序设计(3天)

 

       目标:能够利用C++的特性编写各种数据结构算法

 

       案例:

. 成绩管理系统(STL实现)

. 模板库的实现(MyTL)

. 编写自己的图片浏览器

 

  1、C++基础

 

           . 面向对象思想

 

           . C语言的面向对象

 

           . C++的类

 

           . C语言与C++面向对象实现方式的对比

 

           . 友元

 

           . 构造, 拷贝构造函数

 

           . C++的编译原理, 与C、汇编的互相调用

 

       2、高级特性

 

          . 继承

 

          . 多重继承

 

          . 虚函数与纯虚类   

 

          . 操作符重载

 

          . 命名空间

 

          . 静态函数

 

       3、泛型技术

 

         . 模板函数

 

         . 模板类

 

         . STL的使用

 

         . STL的实现

 

 

 

-------------------  嵌入式 高级-----------------------

 

一、linux系统程序设计(7天)

 

目标: 熟悉应用各种系统调用

 

案例:

 

1、串口监听程序

 

2、图片浏览器

 

3、MP3播放器

 

 1、系统I/O

 

       . 文件操作

 

       . 终端

 

       . 规范及非规范模式    

 

       . select与poll

 

       . mmap

 

2、进程

 

   . 进程的创建

 

       . 进程地址空间

 

      . 进程的控制终端

 

      . 僵尸进程

 

      . 孤儿进程

 

3、进程组与信号

 

. 进程组

 

       . 会话的建立

 

       . 守护进程

 

       . 常见的系统信号

 

       . 信号的注册

 

       . 信号处理

 

 4、进程间通信

 

. FIFO

 

       . PIPE

 

       . 共享内存

 

       . 信号灯

 

       . 消息队列

 

 5、线程

 

       . 线程的创建

 

       . 线程的属性

 

       . 取消状态与取消点

 

       . 线程的退出及状态检测

 

       . pthread_mutex

 

       . pthread_cond

 

 6、图形程序设计

 

      . Frame Buffer的操作

 

      . 位图原理与显示

 

      . 矢量图形操作的实现

 

      . Freetype操作与矢量文字的显示

 

      . Xlib/QT/GTK简介

 

 7. 音频处理与事件获取

 

. 音频原理

 

. OSS音频程序设计

 

. 键盘事件获取

 

. 鼠标事件获取

 

. Unicode字符获取

 

 二、嵌入式网络程序设计(3天)

 

    目标: 熟悉TCP/IP, 熟悉一般的网络服务器程序

 

  案例:

 

1. 聊天程序

2. ftp程序

3. 音频广播程序

4. ping的实现

5. DDos攻击程序

6. ARP攻击程序 

 

 

1、TCP程序设计     

 

2、网络程序进阶

 

       . UDP传输

 

       . 广播程序设计

 

       . 多播程序设计 

 

 3、网络攻击

 

. 原始套接口程序设计

 

. DDos攻击原理

 

. ARP攻击原理

 

 

 

项目实践(5天):网络视频播放系统

 

利用所学的网络、图形、声频知识构建一个完整的网络点播系统,核心解码部分

 

可用MPlayer的相关部分。

 

三、ARM嵌入式开发 (15天)

 

 目标: 熟悉ARM微处理结构、指令和常用外围器件

 

案例:

1. ARM模拟器开发

2. Watchdog控制程序

3. RTC时钟控制程序

4. Uart控制程序

5. LCD控制程序

 6. 触摸屏控制程序

7. DMA控制程序

8. 音频控制程序

9. 网卡控制程序

10. 文件系统制作

 11. ARM-Linux移植 

 

1、嵌入式系统移植    

 

. 仿真器的使用

 

       . Bootloader的烧写  

 

       . 内核的烧写

 

       . 根文件系统的制作

 

       . 文件系统的烧写

 

       . NFS文件系统

 

       . 开发板串口通信

 

 2、ARM体系结构

 

       . IP核、芯片与开发板

 

       . 处理器结构

 

       . 处理器模式

 

       . 寄存器

 

       . 流水线结构

 

       . C语言内嵌汇编格式

 

3、ARM指令系统

 

       . 算术逻辑指令

 

       . 指令对状态寄存器的影响

 

       . 比较分支指令

 

       . 数据总线与地址总线

 

       . 内存访问指令

 

       . 指令位图

 

       . 识别机器指令

 

  4、ARM过程调用标准

 

       . LDM/STM

 

       . 反汇编

 

       . APCS

 

       . C语言函数与汇编的互相调用

 

  5、ARM 汇编与GPIO

 

       . AT&T汇编语法详解

 

       . gas工具的使用

 

       . label标签的作用

 

       . 数据与代码的分布

 

       . 链接脚本ld-script

 

       . 的外围器件结构

 

       . GPIO操作

 

 6、时钟与UART 

 

. 总线标准

 

       . 频率分配与设置

 

       . Watchdog计时操作

 

       . RTC时钟操作

 

       . UART操作

 

 7、ARM中断体系

 

       . 异常向量表

 

       . ARM模式切换

 

       . ARM中断控制器

 

       . 软中断

 

       . Linux系统调用的实现 

 

 8、 Nand Flash

 

       . Flash原理

 

       . Nand控制器原理

 

       . 时序分析

 

  9、SDRAM

 

       . 物理地址分布

 

       . SDRAM原理与时序

 

       . 内存控制器的物理连接

 

       . 地址对齐

 

       . SRAM访问

 

       . 软中断

 

       . Linux系统调用的实现

 

 10、内存管理单元(MMU)

 

       . MMU的原理

 

       . ARM协处理器指令

 

       . section模式

 

       . small page模式

 

       . I & D TLBs

 

       . I & D Cache

 

       . 哈佛结构的原理与实现

 

 11、触摸屏与ADC

 

       . ADC原理

 

       . 触摸屏接口与控制

 

 12、LCD     

 

. 图形显示原理

 

       . LCD控制器

 

       . LCD时序

 

 13、音频与DMA

 

       . 音频硬件原理

 

       . UDA1341

 

       . L3总线

 

       . 音频总线时序

 

       . DMA原理与应用

 

 14、网卡

 

       . 逻辑链路层与MAC层

 

       . CS8900原理与时序分析

 

 15、Bootloader开发

 

       . u-boot的配置、编译

 

       . u-boot启动过程分析

 

       . ARM-Linux的启动要求

 

       . ARM-Linux kernel的ld-sript分析

 

       . u-boot到ARM-Linux的跳转代码分析

 

项目实践 (5天):Bootloader开发

 

完全自主开发一个能够引导Linux的Bootloader,需具备tftp、nand烧写等功能。

 

 四、Linux设备驱动程序 (15天)

 

目标: 熟悉内核的裁剪、移植及设备驱动开发

 

案例:

 1. GPIO驱动

2. RTC时钟驱动

3. WatchDog驱动

4. Udev移植

5. 触摸屏输入设备驱动

6. LCD显示设备驱动

7. DMA驱动

8. 音频设备驱动

9. Nand Flash块设备驱动

10. 网络设备驱动

 

 1、ARM-Linux启动过程

 

. ARM-Linux的配置、编译

 

   . ARM-Linux启动代码分析

 

   . ARM-Linux 地址映射;

 

  . Busybox的配置、编译

 

 2、内核配置与内核模块

 

. 内核配置编译

 

. 补丁的制作

 

. 内核补丁

 

. 内核Makefile

 

. Kconfig的编写

 

. 模块的编译与加载

 

. 导出符号

 

. 引用计数

 

. 内核空间与用户空间的区别

 

. printk

 

. 模块参数

 

3、设备驱动初步

 

. Linux的VFS简介

 

. 设备文件与设备号

 

. 字符设备

 

. cdev结构

 

. 用户空间的操作与设备操作关系

 

. open、release、read、write、lseek、ioctl等

 

   4、进程调度

 

. 定时器中断

 

. task_struct的作用

 

. thread_info

 

. 抢占与非抢占

 

. 进程睡眠

 

. 等待队列

 

. 阻塞I/O与非阻塞I/O

 

. select/poll

 

   5、并发控制

 

. 原子操作

 

. 自旋锁   

 

. 禁用抢占

 

. 中断屏蔽

 

. 信号量

 

. completion

 

 

 

6、内存管理

 

. 虚拟地址空间与MMU 

 

. 内核页管理机制

 

. 内核内存分配

 

. 高端内存

 

. vmalloc

 

. 统一编址与独立编址

 

. I/O端口与I/O内存

 

. I/O静态映射

 

. mmap

 

      

 

7、内核计时

 

. 内核计时jiffies

 

. timer

 

. tasklet

 

. work_struct

 

. Linux信号

 

. fasync的实现

 

. RTC时钟驱动

 

 

 

 8、中断系统

 

. 中断机制

 

. 异常向表相关代码分析

 

. 中断号的确定

 

. 上半部与下半部

 

. 中断共享

 

 

 

 9、设备驱动模型

 

. kobject、kset、class、subsystem与sysfs的原理和关系

 

. udev的原理与移植

 

. bus_type

 

. device与device_driver原理

 

. platform_device的应用

 

 

 

10、触摸屏驱动

 

. ARM-Linux Input设备详解

 

. 触摸屏控制

 

  

 

11、LCD驱动

 

. Frame Buffer驱动详解

 

. LCD控制

 

 

 

12、音频设备驱动

 

. OSS驱动详解

 

. I2S控制

 

             

 

13、块设备驱动

 

  . 块设备的注册

 

. 块设备的I/O的特点

 

. I/O请求

 

      

 

14、网卡驱动

 

. 设备注册

 

. 驱动层数据收发

 

. 地址解析

 

 

 

15、ARM-Linux裁剪与移植

 

. 新版内核移植

 

  . 驱动整合

 

 

 

项目实践(5天):ALSA音频驱动开发

 

开发ALSA音频驱动,并移植相应的ALSA LIB,再编写相应的应用程序。

 

 

大项目:视频采集系统

 我们的项目在ARM11 S3C6410上实现,全程Linux平台开发设计,全程开发板实验,整个项目涉及到核心为Linux内核驱动、ARM体系结构、ARM汇编,网络数据传输、QT图形界面、mplayer移植、触摸屏驱动、LCD驱动、音频驱动、网卡驱动、Watch Dog(看门狗)驱动及相应的DMA驱动。除了mplayer解码器部分外,其它所有应用程序和驱动程序全部由我们从零编写,而不是简单的“移植驱动程序”, 并且几乎含盖了嵌入式软件中的各个方面。可以从根本上学习整个嵌入式产品从硬件选型、Bootloader开发、电路设计、操作系统移植、驱动开发、应用开发、网络传输的各个细节,并能锻炼项目领导和团队合作能力。

项目优势:

监控设备方面的公司一般应用嵌入式对多个监控区域进行实时监测、录像。而一般的公司基于成本考虑,都要自行设计硬件,主流用ARM.所以上面就会涉及到触摸屏驱动、LCD驱动、音频驱动、网卡驱动、Watch Dog(看门狗)驱动及相应的DMA驱动的编写, 另外还会涉及到应用部分图象的显示等。也就是说,在上述项目稍作变更就成为一个GPS设备、智能手机、MPM播放器。

阅读(1431) | 评论(2) | 转发(1) |
给主人留下些什么吧!~~

xiaohengsang2018-03-02 11:28:35

2018年如何成为高薪嵌入式工程师?看完这些智能开发实践项目视频,怎能不高薪?:http://www.hqyj.com/shixun/?szt-chinaunix

xiaohengsang2018-03-02 11:28:29

2018年如何成为高薪嵌入式工程师?看完这些智能开发实践项目视频,怎能不高薪?:http://www.hqyj.com/shixun/?szt-chinaunix