猪哥地嵌入式linux公房菜1_第1页
已阅读1页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、猪哥的嵌 入式 linux 公 房菜猪哥的嵌入式 linux 公房菜, 是中文领域第一篇针对嵌入式 linux 入门方面的技术资 料。该文档从技术层面,学习方法,学习策略等角度,从一个初学者的需求出发,阐述了基 本的概念群, 提供了学习规划方面的指导, 网络资源, 环境配置的方法, shell 基础,及 linux 系统相关知识学习规划及指引1、 嵌入式 linux 入门学习规划 ARM+LINUX 路线,主攻嵌入式 Linux 操作系统及其上应用软件开发目标: ( 1 ) 掌握主流嵌入式微处理器的结构与原理(初步定为arm9 )(2 ) 必须掌握一个嵌入式操作系统 (初步定为 uclinux

2、 或 linux, 版本待定) (3 ) 必须熟悉嵌入式软件开发流程并至少做一个嵌入式软件项目。从事嵌入式软件开发的好处是 :(1 )目前国外这方面的人都很稀缺。这一领域入门门槛较高,所以非专业IT 人员很难切入这一领域;另一方面,是因为这一领域较新,目前发展太快,大多数人无条件接触。(2 )与企业计算等应用软件不同, 嵌入式领域人才的工作强度通常低一些 (但收入不低) 。 (3 )哪天若想创业,搞自已的产品,嵌入式不像应用软件那样容易被盗版。硬件设计一般 都是请其它公司给订做(这叫 “贴牌”: OEM ),都是通用的硬件,我们只管设计软件就变 成自己的产品了。(4 )兴趣所在,这是最主要的。

3、从事嵌入式软件开发的缺点是 :(1 )入门起点较高,所用到的技术往往都有一定难度,若软硬件基础不好,特别是操作系 统级软件功底不深,则可能不适于此行。(2 )这方面的企业数量要远少于企业计算类企业。(3 )有少数公司经常要硕士以上的人搞嵌入式,主要是基于嵌入式的难度。但大多数公司 也并无此要求,只要有经验即可。(4 )平台依托强,换平台比较辛苦。兴趣的由来 :1 、成功观念不同,不虚度此生,就是我的成功。2 、喜欢思考,挑战逻辑思维。3 、喜欢 CC 是一种能发挥思维极限的语言。关于 C 的精神的一些方面可以被概述成短句如下: 相信程序员。不要阻止程序员做那些需要去做的。保持语言短小精干。 一

4、种方法做一个操作。 使得它运行的够快,尽管它并不能保证将是可移植的。4 、喜欢底层开发,讨厌 vb 类开发工具(并不是说 vb 不好)。5 、发展前景好,适合创业,不想自己要死了的时候还是一个工程师。方法步骤:1 、基础知识 :目的: 能看懂硬件工作原理,但重点在嵌入式软件,特别是操作系统级软件,那将是我的优 势。科目:数字电路、计算机组成原理、嵌入式微处理器结构。汇编语言、 C/C+ 、编译原理、离散数学。 数据结构和算法、操作系统、软件工程、网络、数据库。 方法:虽科目众多, 但都是较简单的基础, 且大部分已掌握。 不一定全学, 可根据需要选修。 主攻书籍: the c+ programm

5、ing language (一直没时间读)、数据结构 -C2 。2 、学习 linux : 目的:深入掌握 linux 系统。方法:使用 linux linxu 系统编程开发 驱动开发和分析 linux 核。先看深, 那主讲原理。看几遍后,看情景分析,对照深看,两本交叉,深是纲,情是目。剖析则是 0.11 版,适合学习。最后深入代码。主攻书籍: linux 核完全剖析、 unix 环境高级编程、 深入理解 linux 核、 情景分析和源代。3 、学习嵌入式 linux : 目的:掌握嵌入式处理器其及系统。 方法:( 1 )嵌入式微处理器结构与应用:直接 arm 原理及汇编即可,不要重复 x86

6、 。( 2 )嵌入式操作系统类: ucOS/II 简单,开源,可供入门。 而后深入研究 uClinux 。 ( 3 )必须有块开发板 (arm9 以上),有条件可参加培训 (进步快, 能认识些朋友) 。 主攻书籍:毛德操的嵌入式系统及其他 arm9 手册与 arm 汇编指令等。4 、深入学习 :A、 数字图像压缩技术:主要是应掌握MPEG、mp3等编解码算法和技术。B、通信协议及编程技术: TCP/IP 协议、802.11,Bluetooth ,GPRS、GSM、CDMA等。C、网络与信息安全技术:如加密技术,数字证书CA 等。D、DSP 技术: Digital Signal Process,

7、DSP 处理器通过硬件实现数字信号处理算法。说明:太多细节未说明,可根据实际情况调整。重点在于 1、 3,不必完全按照顺序 作。对于学习 c+ ,理由是 c+ 不只是一种语言,一种工具,她还是一 种艺术,一种文 化,一种哲学理念、但不是拿来炫耀得东西。对于 linux 核,学习编程,读一些优秀代码也 是有必要的。注意: 要学会举一反多,有强大的基础, 很多东西简单看看就能会。想成为合格的 程序员,前提是必须熟练至少一种编程语言, 并具有良好的逻辑思维。 一定要理论结合实践。不要一味钻研技术, 虽然挤出时间是很难做到的, 但还是要留点余地去完善其他的爱 好,比如宇宙,素描、机械、管理,心理学、游

8、戏、科幻电影。还有一些不愿意做但必须要 做的!技术是通过编程编程在编程编出来的。 永远不要梦想一步登天, 不要做浮躁的人, 不 要觉得路途漫上。而是要编程编程在编程,完了在编程,在编程!等机会来了在创业(不要 相信有奇迹发生,盲目创业很难成功,即便成功了发展空间也不一定很大)。嵌入式书籍推荐Linux 基础1 、 Linux 与 Unix Shell 编程指南C 语言基础1、 C Primer Plus ,5th Edition 【美】 Stephen Prata 着2 、 The C Programming Language, 2nd Edition【美】Brian W. Kernighan

9、 David M. Rithie( K & R )着3 、 Advanced Programming in the UNIX Environment,2nd Edition (APUE )4 、嵌入式 Linux 应用程序开发详解Linux 核1 、深入理解 Linux 核(第三版)2、 Linux 核源代码情景分析毛德操 胡希明著研发方向1、 UNIX Network Programming(UNP )2、 TCP/IP 详解3 、 Linux 核编程4、 Linux 设备驱动开发( LDD )5 、 Linux 高级程序设计 宗德著硬件基础1、 ARM 体系结构与编程杜春雷着2 、

10、 S3C2410 Datasheet英语基础1、计算机与通信专业英语系统教程1 、嵌入式系统 体系结构、编程与设计胡希2 、嵌入式系统 采用公开源代码和 StrongARM/Xscale 处理器毛德操 明着3 、 Building Embedded Linux Systems4 、嵌入式 ARM 系统原理与实例开发 宗德著理论基础1、算法导论2 、数据结构( C 语言版)3 、计算机组织与体系结构 ?性能分析4 、深入理解计算机系统【美】 Randal E. Bryant David O''Hallaron着5、操作系统:精髓与设计原理6、编译原理7、数据通信与计算机网络8、数

11、据压缩原理与应用C 语言书籍推荐1. The C program ming Ian guageC程序设计语言2. Poi nters on CC和指针3. C traps and pitfallsC陷阱与缺陷4. Expert C Lan uage专家C编程5. Writing Clean Code Microsoft Techiniques for Developing Bug-free C Programs编程精粹-Microsoft编写优质无错C程序秘诀6. Programming Embedded Systems in C and C+嵌入式系统编程7. C 语言嵌入式系统编程修炼8.

12、 高质量 C+/C 编程指南林锐尽可能多的编码,要学好C,不能只注重 C本身。算法,架构方式等都很重要。嵌入式 linux 入门学习容指南1 、 Linux 基础安装Linux 操作系统 Linux 文件系统 Linux 常用命令 Linux启动过程详解 熟悉Linux服务能够独立安装Linux 操作系统 能够熟练使用 Linux系统的基本命令 认识Linux系统的常用服务安装Linux 操作系统 Linux 基本命令实践设置 Linux 环境变量定制 Linux 的服务 Shell编程基础使用 vi 编辑文件 使用 Emacs编辑文件 使用其他编辑器2 、 Shell 编程基础Shell 简

13、介 认识后台程序Bash 编程熟悉 Linux 系统下的编辑环境熟悉 Linux 下的各种 Shell 熟练进行 shell编程熟悉 vi 基本操作 熟悉 Emacs 的基本操作 比较不同 shell的区别 编写一个测试服务器是否连通的 shell 脚本程序 编写一个查看进程是否存在的shell 脚本程序 编写一个带有循环语句的 shell 脚本程序3 、 Linux 下的 C 编程基础linux C 语言环境概述 Gcc 使用方法 Gdb 调试技术 Autoconf AutomakeMakefile 代码优化 熟悉 Linux 系统下的开发环境 熟悉 Gcc 编译器 熟悉 Makefile规

14、则编写 Hello,World 程序 使用 make 命令编译程序 编写带有一个循环的程序 调试一个有问题的程序4 、嵌入式系统开发基础嵌入式系统概述 交叉编译 配置 TFTP 服务 配置 NFS 服务 下载 Bootloader 和核 嵌入式 Linux 应用软件开发流程熟悉嵌入式系统概念以及开发流程 建立嵌入式系统开发环境制作 cross_gcc 工具链 编译并下载 U-boot 编译并下载 Linux 核 编译并下载Linux 应用程序4 、嵌入式系统移植Linux 核代码 平台相关代码分析 ARM 平台介绍 平台移植的关键技术 移植 Linux 核到ARM 平台 了解移植的概念 能够移

15、植 Linux 核移植 Linux2.6 核到 ARM9 开发板5 、嵌入式 Linux 下串口通信串行 I/O 的基本概念 嵌入式 Linux 应用软件开发流程 Linux 系统的文件和设备 与文件相关的系统调用 配置超级终端和 MiniCOM 能够熟悉进行串口通信 熟悉文件 I/O 编写串口通信程序 编写多串口通信程序6 、嵌入式系统中多进程程序设计Linux 系统进程概述 嵌入式系统的进程特点 进程操作 守护进程 相关的系统调用了解Linux 系统中进程的概念 能够编写多进程程序编写多进程程序 编写一个守护进程程序sleep 系统调用任务管理、同步与通信 Linux 任务概述任务调度 管

16、道 信号 共享存 任 务管理 API 了解 Linux 系统任务管理机制 熟悉进程间通信的几种方式 熟悉嵌入式编写一个使用共享Linux 中的任务间同步与通信编写一个简单的管道程序实现文件传输存的程序7 、嵌入式系统中多线程程序设计线程的基础知识 多线程编程方法 线程应用中的同步问题了解线程的概念 能够编写简单的多线程程序编写一个多线程程序8 、嵌入式 Linux 网络编程网络基础知识 嵌入式 Linux 中 TCP/IP 网络结构 socket 编程 常用 API 函数 分析Ping 命令的实现 基本 UDP 套接口编程 许可证管理 PPP 协议 GPRS 了解嵌入式Linux 网络体系结构

17、 能够进行嵌入式 Linux 环境下的 socket 编程 熟悉 UDP 协议、PPP 协议 熟悉 GPRS 使用 socket 编写代理服务器 使用 socket 编写路由器 编写许 可证服务器 指出 TCP 和 UDP 的优缺点 编写一个 web 服务器 编写一个运行在 ARM 平台的网络播放器9 、 GUI 程序开发GUI 基础 嵌入式系统 GUI 类型 编译 QT 进行 QT 开发熟悉嵌入式系统常用的 GUI 能 够进行 QT 编程使用 QT 编写 “Hello , World” 程序 调试一个加入信号 / 槽的实例 通过 重载 QWidget 类方法处理事件结构 加10 、 Linu

18、x 字符设备驱动程序设备驱动程序基础知识 Linux 系统的模块 字符设备驱动分析 fs_operation 载驱动程序了解设备驱动程序的概念 了解 Linux 字符设备驱动程序结构 能够编写字符设 备驱动程序编写 Skull 驱动 编写键盘驱动 编写 I/O 驱动 分析一个看门狗驱动程序 对比Linux2.6 核与 2.4 核中字符设备驱动的不同 Linux 块设备驱动程序块设备驱动程序工 作原理 典型的块设备驱动程序分析 块设备的读写请求队列了解 Linux 块设备驱动程序结 构 能够编写简单的块设备驱动程序比较字符设备与块设备的异同 编写 MMC 卡驱动程序 分析一个文件系统 对比 Li

19、nux2.6 核与 2.4 核中块设备驱动的不同11 、文件系统虚拟文件系统 文件系统的建立 ramfs 存文件系统 proc 文件系统 devfs 文件系统MTD 技术简介 MTD 块设备初始化 MTD 块设备的读写操作了解 Linux 系统的文件系统了解嵌入式 Linux 的文件系统 了解 MTD 技术 能够编写简单的文件系统为 ARM9 开发板添加 MTD 支持 移植 JFFS2 文件系统 通过 proc 文件系统修改操作系统参数 分析romfs 文件系统源代码 创建一个 cramfs 文件系统嵌入式系统知识体系、学习误区及建议1 嵌入式系统的知识体系嵌入式系统的应用围可以粗略分为两大类

20、:电子系统的智能化( 工业 控制、现代农业、家用电器、汽车电子、测控系统、数据采集等 ) ,计算机应用的延伸 (MP3 、手机、通信、网 络、计算机外围设备等 ) 。从这些应用可以看出,要完成一个以 MCU 为核心的嵌入式系统应用产品设计,需要硬件、软件及行业领域相关知识。硬件主要有 MCU 的硬件最小系统、 输入输出外围电路、人机接口 设计。软件设计有固化软件的设计,也可能含 PC 机软件 的设计。行业知识需要通过协作、交流与总结获得。概括地说,学习以 MCU 为核心的嵌入式系统,需要以下软硬件基础知识与实践训练: 硬件最小系统 ( 电源、晶振、复位、写入调试接口 ); 通用I / 0(开关

21、量输入/输出,涉及各种二值量检测与控制); 模/数转换(各种传感器信号的采集与处理,如红外、温度、光敏、超声波、方向等); 数/模转换 (对模拟量设备利用数字进行控制 ); 通信(串行通信接口 SCI、串行外设接口 SPI、集成电路互联总线I2C、CAN、USB、 嵌入式以太网、 ZigBee 技术等 ) ; 显示 (LED 、 LCD 等); 控制 ( 控制各种设备,包括 PWM 等控制技术 ); 数据处理 (图形、图像、语音、视频等的处理或识别); 各种具体应用。万变不离其宗, 任何应用都可以归入这几类。 而应用中的硬件设计、软件设计、测试等 都必须遵循嵌入式软件工程的方法、 原理与基本原

22、则。 所以, 嵌入式软件工程也是嵌入式系 统知识体系的有机组成部分,只不过它融于具体项目的开发过程之中。以上实践训练涉及硬件基础、软件基础及相关领域知识。计算机语言、操作系统、开 发环境等均是达到这些目的的工具。有些初学者,容易把工具的使用与所要达到的真正目的相混淆。 例如, 有的学习者学了很长时间的嵌入式操作系统移植, 而不进行实际嵌入式系 统产品的开发,到最后也做不好一个嵌入式系统小产品,偏离了学习目标,甚至放弃嵌入式系统领域。这就是进入了嵌入式系统学习误区,下面对此作一些分析。2 嵌入式系统的学习误区 关于嵌入式系统的学习方法,因学习经历、学习环境、学习目的、已有的知识基础等 不同,可能

23、在学习顺序、容选择、实践方式等方面有所不同。但是,应该明确哪些是必备的基础知识,哪些应该先学,哪些应该后学; 哪些必须通过实践才能获得; 哪些是与具体芯 片无关的通用知识,哪些是与具体芯片或开发环境相关的知识。由于微处理器与微控制器种类繁多, 也可能由于不同公司、 机构出于自身的利益, 给出 一些误导性宣传, 特别是我国嵌入式微控制器制造技 术落后, 使得人们对微控制器的发展, 在认识与理解上存在差异, 导致一些初学者进入嵌入式系统的学习误区, 浪费了宝贵的学习 时间。下面分析可能存在的几个误 区。2 1 操作系统的困惑如果说,学习嵌入式系统不是为了开发其应用产品,那就没有具体目标,诸如学习方

24、法这样的问题也就不必谈了。 实际上, 这正是许多人想学, 又不知从何开始学习的关键问题所在,不知道自己学习的具体目标。于是, 看了一些培训广告,看了书店中种类繁多的嵌 入式系统书籍,或上网以 “嵌入式系统 ”为关键词进行查询,就参加培训或看书,开始 “学习 起来 ”。对于有计算机阅 历的人,往往选择一个嵌入式操作系统就开始学习了。 这有点像 “瞎 子摸大象 ”,只了解其一个侧面。 这样如何能对嵌入式产品的开发过程有全面了解呢?针对许多 初学者选择 “ XXX 嵌入式操作系统 +XXX 处理器 ”的嵌入式系统入门学习模式, 笔者认为 是不合适的。 笔者的建议是: 首先把嵌入式系统软件与硬件基础打

25、好 了,再根据实际需要, 选择一种实时操作系统 (RTOS) 进行学习实践。要记住: RTOS 是开发某些类嵌入式产品的 辅助工具,是手段,不是目的;许多类嵌入 式产品,并不需要 RTOS 。所以,一开始就学 习 RTOS ,并不符合 “由浅入深、循序渐进 ”的学习规律。RTOS 本身由于种类繁多,实际 使用何种 RTOS ,一般需要由工作单位确定。基础阶 段主要学习 RTOS 的基本原理与 RTOS 上的软件开发方法,而不是学习如何设计 RTOS 。 以开发实际嵌 入式产品为目标的学习者,不要把过多的精力花在设计或移植 RTOS 上面。 正如很多人使用 Windows 操作系统, 而设计 W

26、indows 操作系统的只有 Microsoft 。许多 人 研究” Linux,但不使用它,浪费了时间。人的精力是有限的,学习必须有所选择。2 2 硬件与软件的困惑以 MCU 为核心的嵌入式技术的知识体系必须通过具体的 MCU 来体现、实践。但是,选择任何型号的 MCU,其芯片相关的知识只占知识体系的20 %左 右,80 %左右是通用的软件硬件及相关知识。 80 的通用知识,必须通过具体实践才能获得,所以学习嵌入式技 术一般要选择一个系列的 MCU 。系统含有硬件与软件两大部分, 它们之间的关系如何 ?有些学者, 仅从电子的角度认识 嵌入式系统。认为 “嵌入式系统 =MCU 硬件系统 +小程

27、序 ”。这些学者大 多具有良好的电子 技术基础知识。 实际情况是, 早期 MCU 部 RAM 小,程序存储器外接, 需要外扩各种 I O, 没有像 USB 、嵌入式以太网等这样较复杂的接 口。因此,程序占总设计量比例小于 50%, 使人们认为嵌入式系统 (单片机 )是“电子系统 ”,以硬件为主,程序为辅。但是,随着 MCU 制造技术的发展,不 仅.MCU部RAM越来越大,Flash进入MCU部改变了传统的嵌入 式系统开发与调试方式,固件程序可以更方便地调试与在线升级,许多情况下与开发PC机程序的方便程度相差无几, 只不过开发环境与运行环境不是同一载体而已。 这使得嵌入式 系统的软件硬件设计方法

28、发生了根本变化。有些学者,仅从软件开发角度认识嵌入式系统,甚至仅从嵌入式操作系统认识嵌入式 系统。这些学者大多具有良好的计算机软件开发基础知识,认为硬件是生产厂商的事。他们没有认识到, 嵌入式系统产品的软件与硬件均是需要开发者设计的。 笔者常常接到一些关 于嵌入式产品稳定性的咨询, 发现大多数是由于软件开发者对 底层硬件的基本原理不理解。 特别是有些功能软件开发者, 过分依赖于底层硬件的驱动软件, 自己对底层驱动原理知之甚 少。实际上,一些功能软件开发者, 名义上 在做嵌入式软件, 其实仅仅是使用嵌入式编辑、 编译环境而已,本质与开发通用 PC 机软件没有两样。而底层硬件驱动软件的开发,若不全

29、 面考虑高层功能软件对底 层硬件的可能调用,也会使封装或参数设计得不合理或不完备, 导致高层功能软件调用困难。 可以看出, 若把嵌入式系统的开发孤立地分为硬件设计、 底层 硬件驱动 软件设计、高层功能软件设计,那么一旦出现问题,就可能难以定位。实际上, 嵌入式系统设计是一个软件、硬件协同设计工程,不能像通用计算机那样,软件、硬 件完 全分开来看,而要在一个大的框架协调工作。学习嵌入式系统是以软件为主还是以硬件为主, 或者如何选择切入点, 如何在软件与 硬 件之间取得平衡 ? 对于这个困惑的建议是:要想成为一名真正的嵌入式系统设计师,在初学 阶段,必须打好嵌入式系统的硬件与软件基础。以下是从事嵌

30、入式系统 设计二十多年的美 国学者 JohnCatsoulis 在 Designing Embedded Hardware一书中关于这个问题的总结:嵌入式系统 与硬件紧密相关,是软件与硬件的综合体,没有对硬件的理解就不可能 写好嵌入式软件;同样,没有对软件的理解也不可能设计好嵌入式硬件。2 3 片面认识嵌入式系统嵌入式系统产品种类繁多,应用领域各异。在第 1 部分中,把嵌入式系统的应用围粗 略分为电子系统的智能化与计算机应用的延伸两大类。从初学者角度,可能 存在分别从这 两个角度片面认识嵌入式系统的问题。 因此, 一些从电子系统智能化角度认识嵌入式系统的 学习者,可能会忽视编程结构、编程规、软

31、件工程的要 求、操作系统等知识的积累。另一 些从计算机应用的延伸角度认识嵌入式系统的学习者, 可能会把通用计算机学习过程中的概 念与方法生搬硬套到嵌入式系统的实践 中,忽视嵌入式系统与通用计算机的差异。实际上, 在嵌入式系统学习与实践的初始阶段, 应该充分了解嵌入式系统的特点, 根据 自身的 已有知识结构,制定适合自身情况的学习计划。目标应该是打好嵌入式系统的硬件 与软件基础,通过实践,为成为良好的嵌入式系统设计师建立起基本知识结构。学 习过程 中,具体应用系统可为实践载体, 但不能拘泥于具体系统, 应该有一定的抽象与归纳。 例如, 初学者开发实际控制系统时没有使用实时操作系统, 但不要认为

32、实时操作系统不需要学习。 又例如, 初学者可以一个带有实时操作系统的样例为蓝本进行学习, 但不要认为任何嵌入式 系统都需要实时操作系统,甚至为一个十分简 明的实际系统加上不必要的实时操作系统。 因此, 片面认识嵌入式系统,可能导致学习困惑。 应该根据实际项目需要, 锻炼自己分析实 际问题、解决问题的能力。这 是一个长期的学习与实践过程,不能期望通过短期培训完成 整体知识体系的建立,应该重视自身实践,全面地理解嵌入式系统的知识体系。2 4 入门芯片选择的困惑嵌入式系统的大部分初学者需要选择一个微控制器 (MCU) 进行入门级学习,面对众多 厂家生产的微控制器系列,往往不知如何是好。首先是关于位数

33、问题,目前主要有 8 位、16 位和 32 位 MCU 。不同位数的 MCU 各 有应用领域, 这一点与通用微机有很大不同。 例如做一个遥控器, 不需要使 用 32 位 MCU , 否则 MCU 芯片价格就已经超过遥控器价格需求。 对于首次接触嵌入式系统的学习者, 可以 根据自己的知识基础选择入门芯片的位数。建议大多 数初学者选择 8 位 MCU 作为快速入 门芯片,了解一些汇编与底层硬件知识,之后再选 16 位或 32 位芯片进行学习实践。关于芯片选择 的另一个误区是认为有 “主流芯片 ”存在,嵌入式系统也可以形成芯片垄 断。这完全是一种误解, 是套用通用计算机系统的思维模式, 而忽视了嵌入

34、式系统应用的多 样性。 关于学习芯片选择还有一个误区, 即误认为选择工作频率高的芯片进行入门学习, 更 先进。实际上,工作频率高可能给初学者带来不少困难。实际嵌入式系统设计不是追求芯片位数、工作频率、操作系统等因素,而是追求稳定 可靠、维护、升级、功耗、价格等指标。初学者选择入门芯片,是通过某 一: MCU 作为 蓝本,获得嵌入式系统知识体系的通用基础。 其基本原则是: 入门时间较短、 硬件成本较低, 知识要素较多,学习难度较低。3 基础阶段的学习建议基于以上讨论, 下面对广大渴望学习嵌入式系统的学子提出几点基础阶段的学习建议: 嵌入式系统软件硬件密切相关,一定要打好软硬件基础。其实,只要找到

35、正确的方 法,加上努力,任何理工科学生,甚至非理工科学生,都能学好嵌入式系统。 选择一个芯片及硬件评估板 ( 入门芯片最好简单一点,例如 8 位 MCU) 、选择一本好书 (最好有规的例子 )、找一位好老师 (最好是有经验且热心的 )。硬 件评估板的价格一定 要在 1000 元以下, 不要太贵, 最好能有自己动手的空间。 不花一分硬件钱想要学好嵌入式 系统不实际,因为这是实践性很强的学科。好书,可以让人少走弯路,不被误导。好老师也可以是做过一些实际项目的学长 (一定要找做过几个成功项目的学长或老师做指导,否则 经验不足也可能误导 ) ,有教师指 导,学习进程会加快 (人工智能学科里有个术语叫无

36、教师 指导学习模式与有教师指导学习模式,无教师指导学习模式比有教师指导学习模式复杂许多。 许多人怕硬件, 其实嵌入式系统硬件比电子线路好学多了。 只要深入理解: MCU 的 硬件最小系统,对 I / O 口、串行通信、键盘、 LED、LCD、SPI、I2C、PWM、A/ D(包 括一些传感器 )、 DA 等逐个实验理解,逐步实践,再通过动手做一个实际的小系统,底 层硬件基础就有了。各个硬件模 块驱动程序的编写是嵌入式系统的必备基础。学习嵌入式 系统的初期,这个过程是必须的。 至于嵌入式实时操作系统 RTOS ,一定不 要一开始就学, 这样会走很多弯路, 也会 使你对嵌入式系统感到畏惧。等你软件

37、硬件基础打好了,再学习就感到容易理解。实际上, 许多嵌入式应用并不需要操作系 统。也可以根据实际项目需要,再学习特定的 RTOS 。不 要被一些嵌入式实时操作系统培训班的宣传所误导, 而忽视实际嵌入式系统软硬件基础知识 的学习。 要避免片面地单纯从 “电子 ”或“计算机软件 ”角度认识嵌入式系统。前面说过,嵌入 式系统是软件与硬件的综合体。因此,要逐步从 MCU 的最小系统开始, 一点一点理解硬 件原理及底层硬件驱动编程方法。要通过规的例子,理解软件工程封装、可复用等思想。通 过规编程, 积累底层构件 (component) , 也就是一个一个模块;但是要封装得比较好, 可 复用。 注重实验与

38、实践。这里说的实验主要指通过重复来验证他人的工作,目的是学习基础知识,这个过程一定要经历。实践是自己设计,有具体的“产品 ”目标。如果花 500 元左右,自己做一个具有一定功能的小产品,且能稳定运行 1 年以上,就可以说接近入门了。 关于入门芯片的选择。 不要选太复杂的微控制器作为入门芯片, 不能超越学习过程。不要一下子学习几种芯片。可以通过一个芯片入门,并具有一个实践经验后,根据实际需要选择芯片开发实际产品。注意,不要把微处理器 (MPU 与微控制器 (MCU) 概念相混淆, 微处理器只是微控制器的核。 关于嵌入式操作系统的选择。可以等到具有一定实践基础后,选择一个简单、容易 理解原理的嵌入

39、式操作系统进行学习。不要一开始就学习几种操作系统,理解了基本原理, 实践中确有实际需要再学习也不迟。人总是要不断学习的。 关于汇编语言与 C 语言的取舍。随着: MCU 对 C 编译的优化支持,对于汇编语言可以只了解几个必要的语句,而直接使用 C 语言编程。但必须通过第一个程序 理解芯片初 始化过程、中断机制、程序存储情况等,区别于PC 机程序的容。另外,为了测试的需要,最好掌握一门 PC 机编程语言。 要明确自己的学习目的,并注意学习方法。要明确学习目的是打基础,还是为了适应工作需要而进行的短训。学习方法方面,要根据学习目的选择合适的学习途径,注意理论学习与实践、 通用知识与芯片相关知识、

40、硬件知识与软件知识的平衡, 要在理解软件工程 基本原理基础上理解硬件构件与软件构件等基本概念。以上建议, 仅供初学者参考。当然, 以上只是基础阶段的学习建议。要成为良好的嵌入 式系统设计师,还需要在实际项目中锻炼,并不断学习与积累经验。嵌入式 Linux 学前指导(初学者必读)目前, Linux 作为嵌入式系统的主力军,广泛应用于消费类电子、工业控 制、军工电 子、电信 / 网络 / 通讯、航空航天、汽车电子、医疗设备、仪器仪表等相关行业。随着嵌入式 行业的迅猛发展,嵌入式 Linux 凭借其系统发展的成熟 度、市场应用的高份额也受到更多 工程师朋友的青睐,越来越多的企业和研发机构都转向嵌入式

41、Linux 的开发和研究,这使得嵌入式 Linux 在新兴的嵌入式 操作系统领域也获得了飞速发展和广泛应用。 而对于那些 希望尽快进入嵌入式行业从事产品研发的朋友们,选择嵌入式Linux 方向作为切入点无疑是最好的途 径之一。近期,有许多面临毕业、找工作的大学生来咨询了解 有关嵌入式 Linux 方向的学习安排。 在与他们交流沟通的过程中,被问到最多的几个问题就是 “如何做好嵌入式 Linux 学习前的 准备? ”, “学习嵌入式 Linux 需要补习哪些基础课程? ”,“嵌入式 Linux 开发跟普通软件 开发在学习方法上有什么不同? ”,“项目实战环节多吗? ”,“有专业人员带领 吗? ”

42、,相信 这些也是很多准备入行的初学者都会关心的问题,为了帮助大家做好嵌入式 Linux 的学前 准备,我们对这些常见的问题逐一进行解答,提供给大家 参考,希望能够有所帮助。1 、如何做好嵌入式 Linux 学习前的准备?要成为一名合格的嵌入式 Linux 工程师,就需要系统的学习软、硬件相关领 域的知识,需 要在最开始就掌握开发的规和原则, 养成良好的工作习惯。 为了确保学习的效果, 这就要求 准 备参加嵌入式 Linux 就业课程学习的同学要调整好自己的时间, 务必要确保在 4 个多月 的学习时间能够高度集中精力。在整个集中学习过程中, 既要保证课上认真听讲、 实战演练的时间, 也要保证课下

43、继续实战 演练、 查阅资料的时间。 只有经过这种高强度的、 实战为主的训练,才能够在比较短的时间 掌握规的嵌入式开发工作流程,让自己符合嵌入式企业对应岗位的需求。 除了在学习时间上要做好充分的准备之外,在学习的心态和方法的调整上也要做 好准备。 许多朋友只了解嵌入式 Linux 方向美好的发展前景,只关注高收入、就业机会多等热点, 却忽略了学习过程本身。为了能够让集中培训的效果发挥到最 佳,建议大家在学习开始前 更多地去了解嵌入式产品研发的特点、 所需要掌握的技术规和工作要点, 关注需具备基础的 补充和学习,从而为后续的强化学习过程做 好心态上的准备,毕竟态度往往决定了最后做 事的结果。2 、

44、学习嵌入式 Linux 需要补习哪些基础课程?嵌入式 Linux 工程师的学习需要具备一定的C 语言基础, 因此面对许多朋友 只是在大一或者大二学习过C (还不一定认真学了,呵呵!),之后基本就不再用过的情况,建议大家学 习之前先复习一下 C语言基础这块。要提醒大家的是,复习时不能只关注基本语法,对于常用的数据存储及处理方式,例如: 数组、 结构体等也要关注, 有条件的话一定在机器上亲 自敲敲代码、分析理解一下具 体案例代码编写的思路,让自己慢慢进入一名嵌入式开发人 员的状态。此外,在时间允许的情况下,建议大家看一下有关计算机操作系统工作原理以及计算机组成原理等方面的专业书籍。对于进程、线程、

45、任务调度、总线、I/O 等基本概念及工作原理有一个初步的了解和掌握, 这部分知识的准备对于后续更好地学习嵌入式 Linux 系统开发将会起到很好的帮助作用。3 、嵌入式 Linux 开发跟普通软件开发在学习方法上有什么不同? 要成为一名成功的嵌入式软件开发人员,程序的设计能力是首要技能,这一点与普通的软件开发人员的要一样的。 但是作为 “软硬兼施 ”的嵌入式开发, 则要求大家不仅要了解较底层 软件的工作过程和工作原理(例如操作系统级、驱动程序级软件),在软件开发的专业水平上也需要充分考虑软件设计的时间和空间效率,这样才能设计出高性能嵌入式程序。因此面对相对复杂的嵌入式系统的研发过程, 在学习的

46、过程中需要更多关注完整的知识体系 结构的建立。 特别是对于原理性知识的掌握程度则相对普通的软件开发人员提出了更高的要 求。因此在学习的过程中, “要知其然,更要知其所以然 ”。记住贯穿始终的是 :要知道为什么学?要知道学的是什么?要知道怎么学?要知道学了如何 用?最后还要知道用的时候出了问题该如何解决?相信以这些问题为线索的学习过程一定 可以帮助大家快速成为一名优秀的嵌入式开发工程师。嵌入式系统 Linux 核开发学习指导框图嵌入式系统Linux内核开发学习指导框图嵌入式设计应具备的基本技能1、Linux 基础安装Linux操作系统Linux文件系统Linux常用命令Linux启动过程详解熟悉

47、Linux服务能 够独立安装Linux操作系统能够熟练使用Linux系统的基本命令 认识Linux系统的常用服 务安装Linux操作系统Linux基本命令实践 设置Linux环境变量 定制Linux的服务Shell编 程基础使用vi编辑文件使用Emacs编辑文件使用其他编辑器2、Shell编程基础Shell简介认识后台程序 Bash编程熟悉Linux系统下的编辑环境 熟悉Linux下的各种Shell熟练进行shell编程熟悉vi基本操作熟悉Emacs的基本操作 比较不同shell的区别编 写一个测试服务器是否连通的shell脚本程序编写一个查看进程是否存在的shell脚本程序编写一个带有循环语

48、句的shell脚本程序3、Linux下的C编程基础linux C语言环境概述 Gcc使用方法 Gdb调试技术 Autoconf Automake Makefile 代码优 化熟悉Linux系统下的开发环境 熟悉Gcc编译器熟悉Makefile规则编写Hello,World程 序使用make命令编译程序 编写带有一个循环的程序调试一个有问题的程序4、嵌入式系统开发基础嵌入式系统概述 交叉编译 配置TFTP服务配置NFS服务下载Bootloader和核嵌入式Linux应用软件开发流程熟悉嵌入式系统概念以及开发流程建立嵌入式系统开发环境制作cross_gcc工具链编译并下载U-boot编译并下载Li

49、nux核编译并下载Linux应用程序4、嵌入式系统移植Linux核代码平台相关代码分析 ARM平台介绍平台移植的关键技术移植Linux核到ARM平台了解移植的概念 能够移植Linux核移植Linux2.6核到ARM9开发板5、嵌入式Linux下串口通信串行I/O的基本概念 嵌入式Linux应用软件开发流程 Linux系统的文件和设备 与文件相关 的系统调用 配置超级终端和 MiniCOM能够熟悉进行串口通信 熟悉文件I/O编写串口通信 程序 编写多串口通信程序6、嵌入式系统中多进程程序设计Linux系统进程概述嵌入式系统的进程特点进程操作守护进程相关的系统调用了解 Linux 系统中进程的概念

50、能够编写多进程程序编写多进程程序编写一个守护进程程序sleep系统调用任务管理、同步与通信Linux任务概述任务调度管道信号共享存任务管理API 了解Linux系统任务管理机制 熟悉进程间通信的几种方式熟悉嵌入式Linux中的任务间同步与通信编写一个简单的管道程序实现文件传输编写一个使用共享存的程序7、嵌入式系统中多线程程序设计线程的基础知识 多线程编程方法 线程应用中的同步问题了解线程的概念能够编写简单的多线程程序编写一个多线程程序&嵌入式Linux网络编程网络基础知识 嵌入式Linux中TCP/IP网络结构socket编程常用API函数分析Ping命令 的实现 基本UDP套接口编程

51、 许可证管理PPP协议GPRS 了解嵌入式Linux网络体系结 构能够进行嵌入式 Linux环境下的socket编程熟悉UDP协议、PPP协议熟悉GPRS使 用socket编写代理服务器 使用socket编写路由器 编写许可证服务器 指出TCP和UDP的 优缺点编写一个web服务器编写一个运行在 ARM平台的网络播放器9、GUI程序开发GUI基础嵌入式系统GUI类型编译QT进行QT开发熟悉嵌入式系统常用的GUI能够进行QT编程使用QT编写“ Hello World ”程序调试一个加入信号/槽的实例通过重载QWidget类 方法处理事件10、Linux字符设备驱动程序设备驱动程序基础知识Linu

52、x系统的模块 字符设备驱动分析 fs_operation结构加载驱动程序了解设备驱动程序的概念了解Linux字符设备驱动程序结构能够编写字符设备驱动程序编写Skull驱动编写键盘驱动编写I/O驱动分析一个看门狗驱动程序对比Linux2.6核与2.4核中字符设备驱动的不同Linux块设备驱动程序块设备驱动程序工作原理典型的块设备驱动程序分析块设备的读写请求队列了解Linux块设备驱动程序结构能够编写简单的块设备驱动程序比较字符设备与块设备的异同编写MMC卡驱动程序分析一个文件系统对比Linux2.6核与2.4核中块设备驱动的不同11、文件系统码创建一个cramfs文件系统简单地总结一下硬件开发的

53、基本过程:1、 明确硬件总体需求情况,如CPU处理能力、存储容量及速度、I/O端口的分配、接口要求、电平要求、特殊电路要求等等。2、 根据需求分析制定硬件总体方案,寻求关键器件及相关技术资料、技术途径和技术支持,充分考虑技术可行性、可靠性和成本控制,并对开发调试工具提出明确要求。关键器件可试着去索取样品。3、总体方案确定后,做硬件和软件的详细设计,包括绘制硬件原理图、软件功能框图、 PCB设计、同时完成开发元器件清单。4、做好PCB板后,对原理设计中的各个功能单元进行焊接调试,必要时修改原理图并 作记录。5、 软硬件系统联调。一般情况下,经过调试后原理及PCB设计上有所调整,需要二次 投板。6

54、、可靠性测试、稳定性测试,通过验收,项目完成! 硬件工程师应具备的基本技能:(1)由需求分析至总体方案、详细设计的规划创造能力;(2) 熟练运用设计工具,设计原理图、PCB板的能力;(3) 熟练运用单片机、DSP、PLD、FPGA等进行软硬件开发调试的能力;(4)熟练运用仿真工具、示波器、信号发生器、逻辑分析仪等调测硬件的能力;(5)掌握常用的标准电路的设计能力,如复位电路、常用滤波器电路、功放电路、高速 信号传输线的匹配电路等;(6)故障定位、解决问题的能力;(7)设计文档的组织编写技能。嵌入式书籍推荐Linux 基础1、 Linux 与 Unix Shell 编程指南C 语言基础1、C P

55、rimer Plus ,5th Edition 【美】 Stephen Prata 着2 、 The C Programming Language, 2nd Edition 【 美 】 Brian W. Kernighan David M. Rithie (K & R )着3、 Advanced Programming in the UNIX Environment ,2nd Edition ( APUE )4 、嵌入式 Linux 应用程序开发详解Linux 核1、深入理解 Linux 核(第三版)2、 Linux 核源代码情景分析毛德操 胡希明著研发方向1、 UNIX Networ

56、k Programming ( UNP )2、 TCP/IP 详解3、 Linux 核编程4、 Linux 设备驱动开发( LDD )5、 Linux 高级程序设计宗德著硬件基础1、 ARM 体系结构与编程杜春雷着2 、S3C2410 Datasheet英语基础1、计算机与通信专业英语系统教程1、嵌入式系统 体系结构、编程与设计2、嵌入式系统 采用公开源代码和 StrongARM/Xscale 处理器毛 德操 胡希明着3、 Building Embedded Linux Systems 4、嵌入式 ARM 系统原理与实例开发 宗德著 理论基础1、算法导论2、数据结构( C 语言版)3、计算机组织与体系结构 ?性能分析4 、深入理解计算机系统【美】 Randal E. Bryant David O''Hallaron 着5、操作系统:精髓与设计原理6、编译原理7

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论