猪哥的嵌入式linux公房菜_第1页
猪哥的嵌入式linux公房菜_第2页
猪哥的嵌入式linux公房菜_第3页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

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

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

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

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

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

6、入门。 而后深入研究 uClinux 。(3)必须有块开发板(arm9以上),有条件可参加培训(进步快,能认识些朋友)。 主攻书籍:毛德操的嵌入式系统及其他 arm9 手册与 arm 汇编指令等。4、深入学习 :A、 数字图像压缩技术:主要是应掌握MPEG mp3等编解码算法和技术。B、 通信协议及编程技术: TCP/IP协议、,Bluetooth ,GPRS GSM CDMA等。C网络与信息安全技术:如加密技术,数字证书CA等。D DSP技术:Digital Signal Process , DSP处理器通过硬件实现数字信号处理算法。说明:太多细节未说明,可根据实际情况调整。重点在于 1、

7、3,不必完全按照顺序 作。对于学习C+,理由是C+不只是一种语言,一种工具,她还是一 种艺术,一种文化, 一种哲学理念、 但不是拿来炫耀得东西。 对于 linux 内核,学习编程,读一些优秀代码也是 有必要的。注意: 要学会举一反多,有强大的基础, 很多东西简单看看就能会。想成为合格的 程序员,前提是必须熟练至少一种编程语言,并具有良好的逻辑思维。一定要理论结合实 践。不要一味钻研技术, 虽然挤出时间是很难做到的, 但还是要留点余地去完善其他的爱 好,比如宇宙,素描、机械、管理,心理学、游戏、科幻电影。还有一些不愿意做但必须要 做的!技术是通过编程编程在编程编出来的。 永远不要梦想一步登天,

8、不要做浮躁的人, 不 要觉得路途漫上。而是要编程编程在编程,完了在编程,在编程!等机会来了在创业(不要 相信有奇迹发生,盲目创业很难成功,即便成功了发展空间也不一定很大)。嵌入式书籍推荐Linux 基础1 、 Linux 与 Unix Shell编程指南C 语言基础1 、 C Primer Plus , 5thEdition 【美】StephenPrata 着2、 The C ProgrammingLanguage,2ndEdition 【美】Brian W. Kernighan David M. Rithie ( K & R)着3、 AdvanCed Programming in t

9、he 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、S3C2410 Datasheet 英语基础1、计算机与通信专业英语 系统教程1、嵌入式系统一一体系结构、编程与设计

10、2、 嵌入式系统采用公开源代码和StrongARM/Xscale处理器毛德操 胡希明着3、 BuildingEmbedded Linux Systems 4、 嵌入式ARM系统原理与实例开发杨宗德著 理论基础1 、算法导论2、数据结构( C 语言版)3、计算机组织与体系结构性能分析4、 深入理解计算机系统【美】 Randal E. Bryant David O''Hallaron 着5、操作系统:精髓与设计原理6、编译原理7、数据通信与计算机网络8、数据压缩原理与应用C语言书籍推荐1. The C programmingIanguageC程序设计语言2. Poi nterson

11、 C C和指针3. C traps and pitfallsC陷阱与缺陷4. Expert C Lanuage 专家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高质量C+/C编程指南林锐尽可能多的编码,要学好C,不能只注重C本身。算法,架构方式等都很重要。嵌入式 linux 入门学习内容指南1、

12、Linux 基础安装 Linux 操作系统 Linux 文件系统 Linux 常用命令 Linux 启动过程详解 熟悉 Linux 服 务能够独立安装 Linux 操作系统 能够熟练使用 Linux 系统的基本命令 认识 Linux 系统的 常用服务安装 Linux 操作系统 Linux 基本命令实践 设置 Linux 环境变量 定制 Linux 的服 务 Shell 编程基础使用 vi 编辑文件 使用 Emacs 编辑文件 使用其他编辑器2、Shell 编程基础Shell 简介 认识后台程序 Bash 编程熟悉 Linux 系统下的编辑环境 熟悉 Linux 下的各种Shell 熟练进行 s

13、hell 编程熟悉 vi 基本操作 熟悉 Emacs 的基本操作 比较不同 shell 的区别 编写一个测试服务器是否连通的 shell 脚本程序 编写一个查看进程是否存在的 shell脚本程序 编写一个带有循环语句的 shell 脚本程序3、Linux 下的 C 编程基础linux C 语言环境概述 Gcc 使用方法 Gdb 调试技术 Autoconf Automake Makefile代码优化 熟悉 Linux 系统下的开发环境 熟悉 Gcc 编译器 熟悉 Makefile 规则编写 Hello,World程序 使用 make 命令编译程序 编写带有一个循环的程序 调试一个有问题的程序4、

14、嵌入式系统开发基础嵌入式系统概述交叉编译配置TFTP服务配置NFS服务下载Bootloader和内核嵌入式 Linux 应用软件开发流程熟悉嵌入式系统概念以及开发流程 建立嵌入式系统开发环境制作 cross_gcc 工具链 编译并下载 U-boot 编译并下载 Linux 内核 编译并下载 Linux 应用程序 4、嵌入式系统移植Linux内核代码平台相关代码分析 ARM平台介绍平台移植的关键技术移植Linux内核到ARM平台了解移植的概念能够移植Linux内核移植内核到 ARM9开发板5、嵌入式 Linux 下串口通信串行 I/O 的基本概念 嵌入式 Linux 应用软件开发流程 Linux

15、 系统的文件和设备 与文件相关的系统调用 配置超级终端和 MiniCOM 能够熟悉进行串口通信 熟悉文件 I/O 编写串口通信程序 编写多串口通信程序6、嵌入式系统中多进程程序设计Linux 系统进程概述 嵌入式系统的进程特点 进程操作 守护进程 相关的系统调用了解Linux 系统中进程的概念 能够编写多进程程序编写多进程程序 编写一个守护进程程序sleep 系统调用任务管理、同步与通信 Linux 任务概述任务调度 管道 信号 共享内存 任务管理 API 了解 Linux 系统任务管理机制 熟悉进程间通信的几种方式 熟悉嵌入式 Linux中的任务间同步与通信编写一个简单的管道程序实现文件传输

16、编写一个使用共享内存的程序7、嵌入式系统中多线程程序设计能够编写简单线程的基础知识 多线程编程方法 线程应用中的同步问题了解线程的概念的多线程程序编写一个多线程程序8、嵌入式 Linux 网络编程网络基础知识 嵌入式 Linux 中 TCP/IP 网络结构 socket 编程 常用 API 函数 分析 Ping 命令的实现 基本UDP套接口编程 许可证管理PPP协议GPRS 了解嵌入式Linux网络体系 结构能够进行嵌入式 Linux环境下的socket编程熟悉UDP协议、PPP协议熟悉GPRS使 用socket编写代理服务器 使用socket编写路由器 编写许可证服务器指出TCP和UDP的优

17、缺点 编写一个web服务器 编写一个运行在 ARM平台的网络播放器9、GUI 程序开发GUI基础 嵌入式系统GUI类型 编译QT进行QT开发熟悉嵌入式系统常用的GUI能够进行QT编程使用QT编写“ Hello,World”程序 调试一个加入信号/槽的实例 通过重载QWidget 类方法处理事件10、Linux 字符设备驱动程序设备驱动程序基础知识 Linux 系统的模块 字符设备驱动分析 fs_operation 结构 加载驱 动程序了解设备驱动程序的概念 了解 Linux 字符设备驱动程序结构 能够编写字符设备驱 动程序编写 Skull 驱动 编写键盘驱动 编写 I/O 驱动 分析一个看门狗

18、驱动程序 对比内核典型的块与内核中字符设备驱动的不同 Linux 块设备驱动程序块设备驱动程序工作原理 设备驱动程序分析 块设备的读写请求队列了解 Linux 块设备驱动程序结构 能够编写简单的块设备驱动程序比较字符设备与块设备的异同编写MM(卡驱动程序分析一个文件系统对比内核与内核中块设备驱动的不同11、文件系统虚拟文件系统 文件系统的建立 ramfs 内存文件系统 proc 文件系统 devfs 文件系统 MTD 技术简介MTD块设备初始化MTD块设备的读写操作了解Linux系统的文件系统 了解嵌入式Linux的文件系统 了解MTD技术 能够编写简单的文件系统为ARM9开发板添加 MTD支

19、持 移植 JFFS2 文件系统 通过 proc 文件系统修改操作系统参数 分析 romfs 文件系统源代码 创建一个 cramfs 文件系统嵌入式系统知识体系、学习误区及建议1 嵌入式系统的知识体系嵌入式系统的应用范围可以粗略分为两大类: 电子系统的智能化 ( 工业 控制、现代农业、 家用电器、汽车电子、测控系统、数据采集等 ),计算机应用的延伸(MP3、手机、通信、网 络、计算机外围设备等)。从这些应用可以看出, 要完成一个以MCI为核心的嵌入式系统应 用产品设计,需要硬件、软件及行业领域相关知识。硬件主要有 MCU勺硬件最小系统、输入 /输出外围电路、人机接口 设计。软件设计有固化软件的设

20、计, 也可能含PC机软件的设计。 行业知识需要通过协作、交流与总结获得。概括地说,学习以 MCU为核心的嵌入式系统,需要以下软硬件基础知识与实践训练: 硬件最小系统 (电源、晶振、复位、写入调试接口 ); 通用I / 0(开关量输入/输出,涉及各种二值量检测与控制); 模/数转换(各种传感器信号的采集与处理,如红外、温度、光敏、超声波、方向等); 数/模转换 (对模拟量设备利用数字进行控制 ); 通信(串行通信接口 SCI、串行外设接口 SPI、集成电路互联总线I2C、CAN USB嵌 入式以太网、 ZigBee 技术等 ) ; 显示(LED、LCD等); 控制(控制各种设备,包括 PWM等控

21、制技术); 数据处理 (图形、图像、语音、视频等的处理或识别); 各种具体应用。万变不离其宗, 任何应用都可以归入这几类。 而应用中的硬件设计、软件设计、测试等 都必须遵循嵌入式软件工程的方法、 原理与基本原则。 所以, 嵌入式软件工程也是嵌入式系 统知识体系的有机组成部分,只不过它融于具体项目的开发过程之中。以上实践训练涉及硬件基础、软件基础及相关领域知识。计算机语言、操作系统、开 发环境等均是达到这些目的的工具。有些初学者,容易把工具的使用与所要达到的真正目的相混淆。 例如, 有的学习者学了很长时间的嵌入式操作系统移植, 而不进行实际嵌入式系 统产品的开发,到最后也做不好一个嵌入式系统小产

22、品,偏离了学习目标,甚至放弃嵌入式系统领域。这就是进入了嵌入式系统学习误区,下面对此作一些分析。2 嵌入式系统的学习误区 关于嵌入式系统的学习方法,因学习经历、学习环境、学习目的、已有的知识基础等 不同,可能在学习顺序、内容选择、实践方式等方面有所不同。但是,应该明确哪些是必备的基础知识, 哪些应该先学, 哪些应该后学;哪些必须通过实践才能获得;哪些是与具体 芯片无关的通用知识,哪些是与具体芯片或开发环境相关的知识。由于微处理器与微控制器种类繁多, 也可能由于不同公司、 机构出于自身的利益, 给出 一些误导性宣传, 特别是我国嵌入式微控制器制造技 术落后, 使得人们对微控制器的发展, 在认识与

23、理解上存在差异, 导致一些初学者进入嵌入式系统的学习误区, 浪费了宝贵的学习 时间。下面分析可能存在的几个误 区。21 操作系统的困惑如果说,学习嵌入式系统不是为了开发其应用产品,那就没有具体目标,诸如学习方法这样的问题也就不必谈了。 实际上, 这正是许多人想学, 又不知从何开始学习的关键问题 所在,不知道自己学习的具体目标。于是,看了一些培训广告,看了书店中种类繁多的嵌入式系统书籍, 或上网以“嵌入式系统”为关键词进行查询, 就参加培训或看书, 开始“学 习起来”。对于有计算机阅 历的人,往往选择一个嵌入式操作系统就开始学习了。这有点 像“瞎子摸大象”, 只了解其一个侧面。 这样如何能对嵌入

24、式产品的开发过程有全面了解呢 针对许多 初学者选择“X XX嵌入式操作系统+XXX处理器”的嵌入式系统入门学习模式,笔 者认为是不合适的。笔者的建议是:首先把嵌入式系统软件与硬件基础打好了,再根据实际需要,选择一种实时操作系统 (RT0S)进行学习实践。要记住:RT0S是开发某些类嵌入式产品的辅助工具,是手段,不是目的;许多类嵌入式产品,并不需要 RTOS所以,一开始就学习RTOS并不符合“由浅入深、循序渐进”的学习规律。RTOS本身由于种类繁多, 实际 使用何种RTOS 一般需要由工作单位确定。 基础阶段主 要学习RTOS的基本原理与RTOSh的软件开发方法,而不是学习如何设计 RTOS以开

25、发实 际嵌入式产品为目标的学习者, 不要把过多的精力花在设计或移植 RTOSh面。正如很多人 使用Windows操作系统,而设计 Windows操作系统的只有 Microsoft 。许多人“研究” Linux , 但不使用它,浪费了时间。人的精力是有限的,学习必须有所选择。22 硬件与软件的困惑以MCI为核心的嵌入式技术的知识体系必须通过具体的MCI来体现、实践。但是,选择任何型号的 MCU其芯片相关的知识只占知识体系的 20%左 右,80%左右是通用的软件 硬件及相关知识。 80的通用知识, 必须通过具体实践才能获得, 所以学习嵌入式技术一般 要选择一个系列的 MCU。系统含有硬件与软件两大

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

44、和掌握,这部分知识的准备对于后续更好地学习嵌入式 Linux 系统开发将会起到很好的帮助作用。3、嵌入式 Linux 开发跟普通软件开发在学习方法上有什么不同 要成为一名成功的嵌入式软件开发人员,程序的设计能力是首要技能,这一点与 普通的软 件开发人员的要求是一样的。 但是作为“软硬兼施”的嵌入式开发, 则要求大家不仅要了解 较底层软件的工作过程和工作原理(例如操作系统级、驱动程序 级软件),在软件开发的 专业水平上也需要充分考虑软件设计的时间和空间效率,这样才能设计出高性能嵌入式程 序。因此面对相对复杂的嵌入式系统的研发过程, 在学习的过程中需要更多关注完整的知识体系 结构的建立。 特别是对

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

46、务安装 Linux操作系统Linux基本命令实践设置Linux环境变量定制Linux的服务 Shell编程基础使用vi编辑文件使用Emacs编辑文件使用其他编辑器2、 Shell编程基础Shell简介 认识后台程序 Bash编程熟悉Linux系统下的编辑环境熟悉Linux下的各种Shell熟练进行shell编程熟悉vi基本操作熟悉Emacs的基本操作比较不同shell的区别编写一个测试服务器是否连通的shell脚本程序编写一个查看进程是否存在的shell脚本程序编写一个带有循环语句的shell脚本程序3、Linux 下的 C编程基础lin ux C 语言环境概述Gcc使用方法Gdb调试技术Au

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

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

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

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

51、nux字符设备驱动程序结构能够编写字符设备驱动程序编写Skull驱动编写键盘驱动编写I/O驱动分析一个看门狗驱动程序对比内核与内核中字符设备驱动的不同Linux 块设备驱动程序块设备驱动程序工作原理典型的块设备驱动程序分析块设备的读写请求队列了解Linux块设备驱动程序结构能够编写简单的块设备驱动程序比较字符设备与块设备的异同编写MM(卡驱动程序 分析一个文件系统对比内核与内核中块设备驱动的不同11、文件系统虚拟文件系统文件系统的建立 ramfs内存文件系统proc文件系统 devfs 文件系统 MTD技术简介 MTD块设备初始化MTD块设备的读写操作了解 Linux系统的文件系统 了解嵌入式

52、Linux的文件系统了解MTD技术能够编写简单的文件系统为ARM軒发板添加 MTD支持移植JFFS2文件系统通过proc文件系统修改操作系统参数分析romfs 文件系统源代码创建一个cramfs 文件系统简单地总结一下硬件开发的基本过程:1、 明确硬件总体需求情况,如CPU处理能力、存储容量及速度、I/O端口的分配、接口要求、电平要求、特殊电路要求等等。2、 根据需求分析制定硬件总体方案, 寻求关键器件及相关技术资料、 技术途径和技 术支持,充分考虑技术可行性、 可靠性和成本控制,并对开发调试工具提出明确要求。关键 器件可试着去索取样品。3、 总体方案确定后,做硬件和软件的详细设计,包括绘制硬

53、件原理图、软件功能框 图、PCB设计、同时完成开发元器件清单。4、 做好PCB板后,对原理设计中的各个功能单元进行焊接调试,必要时修改原理图 并作记录。5、 软硬件系统联调。一般情况下,经过调试后原理及PCB设计上有所调整,需要二 次投板。6、可靠性测试、稳定性测试,通过验收,项目完成!硬件工程师应具备的基本技能:(1 )由需求分析至总体方案、详细设计的规划创造能力;(2) 熟练运用设计工具,设计原理图、PCB板的能力;(3) 熟练运用单片机、DSR PLD FPGA等进行软硬件开发调试的能力;(4)熟练运用仿真工具、示波器、信号发生器、逻辑分析仪等调测硬件的能力;(5)掌握常用的标准电路的设

54、计能力,如复位电路、常用滤波器电路、功放电路、高速信号传输线的匹配电路等;(6 )故障定位、解决问题的能力;(7)设计文档的组织编写技能。嵌入式书籍推荐Li nux基础1、Linux与Unix Shell编程指南C语言基础1、C Primer Plus, 5th Edition【美】Stephen Prata 着2、The C Programming Language, 2nd Edition 【美】Brian W. Kernighan David M. Rithie ( K & R)着3、Advaneed Programming in the UNIX Environment ,2n

55、d Edition(APUE4、嵌入式Linux应用程序开发详解Linux内核1、深入理解Linux内核(第三版)2、 Linux内核源代码情景分析毛德操胡希明著研发方向1、UNIX Network Programming( UNP2、TCP/IP详解3、Linux内核编程4、Linux设备驱动开发(LDD5、Linux高级程序设计杨宗德著硬件基础1、ARM体系结构与编程杜春雷着2、S3C2410 Datasheet英语基础1、计算机与通信专业英语系统教程1、嵌入式系统一一体系结构、编程与设计2、 嵌入式系统一一采用公开源代码和 StrongARM/Xseale处理器毛德 操胡希明着3、 Bu

56、ildingEmbedded Linux Systems4、 嵌入式ARM系统原理与实例开发杨宗德著 理论基础1、算法导论2、数据结构(C语言版)3、计算机组织与体系结构性能分析4、深入理解计算机系统【美】 Randal E. Bryant David O''Hallaron 着5、操作系统:精髓与设计原理6、编译原理7、数据通信与计算机网络8、数据压缩原理与应用C语言书籍推荐1. The C programming IanguageC程序设计语言2. Poi nterson C C和指针3. C traps and pitfalls C陷阱与缺陷4. Expert C Lanuage 专家C编程5. Writing Clean Code Microsoft Techiniques for Developing Bug-free

温馨提示

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

评论

0/150

提交评论