




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、猪哥的嵌入式linux公房菜猪哥的嵌入式linux公房菜, 是中文领域第一篇针对嵌入式linux入门方面的技术资料。该文档从技术层面,学习方法,学习策略等角度,从一个初学者的需求出发,阐述了基本的概念群,提供了学习规划方面的指导,网络资源,环境配置的方法,shell基础,及linux系统相关知识学习规划及指引1、嵌入式linux入门学习规划ARM+LINUX路线,主攻嵌入式Linux操作系统及其上应用软件开发目标: (1) 掌握主流嵌入式微处理器的结构与原理(初步定为arm9) (2) 必须掌握一个嵌入式操作系统 (初步定为uclinux或li
2、nux,版本待定) (3) 必须熟悉嵌入式软件开发流程并至少做一个嵌入式软件项目。 从事嵌入式软件开发的好处是: (1)目前国内外这方面的人都很稀缺。这一领域入门门槛较高,所以非专业IT人员很难切入这一领域;另一方面,是因为这一领域较新,目前发展太快,大多数人无条件接触。 (2)与企业计算等应用软件不同,嵌入式领域人才的工作强度通常低一些(但收入不低)。 (3)哪天若想创业,搞自已的产品,嵌入式不像应用软件那样容易被盗版。硬件设计一般都是请其它公司给订做(这叫“贴牌”:OEM),都是通用的硬件,我们只管设计软件就变成自己的产品了。
3、160;(4)兴趣所在,这是最主要的。 从事嵌入式软件开发的缺点是: (1)入门起点较高,所用到的技术往往都有一定难度,若软硬件基础不好,特别是操作系统级软件功底不深,则可能不适于此行。 (2)这方面的企业数量要远少于企业计算类企业。 (3)有少数公司经常要硕士以上的人搞嵌入式,主要是基于嵌入式的难度。但大多数公司也并无此要求,只要有经验即可。 (4)平台依托强,换平台比较辛苦。 兴趣的由来: 1、成功观念不同,不虚度此生,就是我的成功。 2、喜欢思考,挑战逻辑思维。 3、喜欢C C是一种能发挥
4、思维极限的语言。关于C的精神的一些方面可以被概述成短句如下: 相信程序员。 不要阻止程序员做那些需要去做的。 保持语言短小精干。 一种方法做一个操作。 使得它运行的够快,尽管它并不能保证将是可移植的。 4、喜欢底层开发,讨厌vb类开发工具(并不是说vb不好)。 5、发展前景好,适合创业,不想自己要死了的时候还是一个工程师。 2 / 36方法步骤: 1、基础知识: 目的:能看懂硬件工作原理,但重点在嵌入式软件,特别是操作系统级软件,那将是我的优势。 科目:数字电路、计算机组成原理、嵌入式
5、微处理器结构。 汇编语言、C/C+、编译原理、离散数学。 数据结构和算法、操作系统、软件工程、网络、数据库。 方法:虽科目众多,但都是较简单的基础,且大部分已掌握。不一定全学,可根据需要选修。 主攻书籍:the c+ programming language(一直没时间读)、数据结构-C2。 2、学习linux: 目的:深入掌握linux系统。 方法:使用linuxlinxu系统编程开发驱动开发和分析linux内核。先看深,那主讲原理。看几遍后,看情景分析,对照深看,两本交叉,深是纲,情是目。剖
6、析则是0.11版,适合学习。最后深入代码。 主攻书籍:linux内核完全剖析、unix环境高级编程、深入理解linux内核、情景分析和源代。 3、学习嵌入式linux: 目的:掌握嵌入式处理器其及系统。 方法:(1)嵌入式微处理器结构与应用:直接arm原理及汇编即可,不要重复x86。 (2)嵌入式操作系统类:ucOS/II简单,开源,可供入门。而后深入研究uClinux。 (3)必须有块开发板(arm9以上),有条件可参加培训(进步快,能认识些朋友)。 主攻书籍:毛德操的嵌入式系统及其他arm9手册与arm汇编指令等。
7、60;4、深入学习: A、数字图像压缩技术:主要是应掌握MPEG、mp3等编解码算法和技术。 B、通信协议及编程技术:TCP/IP协议、802.11,Bluetooth,GPRS、GSM、CDMA等。 C、网络与信息安全技术:如加密技术,数字证书CA等。 D、DSP技术:Digital Signal Process,DSP处理器通过硬件实现数字信号处理算法。 说明:太多细节未说明,可根据实际情况调整。重点在于1、3,不必完全按照顺序作。对于学习c+,理由是c+不只是一种语言,一种工具,她还是一 种艺术,一种文化,一种哲学理
8、念、但不是拿来炫耀得东西。对于linux内核,学习编程,读一些优秀代码也是有必要的。 注意:要学会举一反多,有强大的基础,很多东西简单看看就能会。想成为合格的程序员,前提是必须熟练至少一种编程语言,并具有良好的逻辑思维。一定要理论结合实践。 不要一味钻研技术,虽然挤出时间是很难做到的,但还是要留点余地去完善其他的爱好,比如宇宙,素描、机械、管理,心理学、游戏、科幻电影。还有一些不愿意做但必须要做的! 技术是通过编程编程在编程编出来的。永远不要梦想一步登天,不要做浮躁的人,不要觉得路途漫上。而是要编程编程在编程,完了在编程,在编程!等机会来了在创业(不要相信有奇迹发
9、生,盲目创业很难成功,即便成功了发展空间也不一定很大)。 嵌入式书籍推荐 Linux基础 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.
10、0;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详解&
11、#160;3、Linux内核编程 4、Linux设备驱动开发(LDD) 5、Linux高级程序设计 杨宗德著硬件基础 1、ARM体系结构与编程杜春雷着 2、S3C2410 Datasheet 英语基础 1、计算机与通信专业英语 系统教程 1、嵌入式系统体系结构、编程与设计 2、嵌入式系统采用公开源代码和StrongARM/Xscale处理器毛德操 胡希明着 3、Building Embedded Linux Systems4、嵌入式AR
12、M系统原理与实例开发 杨宗德著理论基础 1、算法导论 2、数据结构(C语言版) 3、计算机组织与体系结构?性能分析 4、深入理解计算机系统【美】Randal E. Bryant David O''Hallaron着 5、操作系统:精髓与设计原理 6、编译原理 7、数据通信与计算机网络 8、数据压缩原理与应用 C语言书籍推荐 1. The C programming language
13、;程序设计语言 2. Pointers on C 和指针 3. C traps and pitfalls 陷阱与缺陷 4. Expert C Lanuage 专家编程 5. Writing Clean Code -Microsoft Techiniques for Developing Bug-free C Programs
14、160;编程精粹-Microsoft 编写优质无错程序秘诀 6. Programming Embedded Systems in C and C+ 嵌入式系统编程 7.C语言嵌入式系统编程修炼 8.高质量C+/C编程指南林锐 尽可能多的编码,要学好C,不能只注重C本身。算法,架构方式等都很重要。嵌入式linux入门学习内容指南1、Linux 基础安装Linux操作系统 Linux文件系统 Linux常用命令 Linux启动过程详解 熟悉Linux服务能够独立安装Li
15、nux操作系统 能够熟练使用Linux系统的基本命令 认识Linux系统的常用服务安装Linux操作系统 Linux基本命令实践 设置Linux环境变量 定制Linux的服务 Shell 编程基础使用vi编辑文件 使用Emacs编辑文件 使用其他编辑器2、Shell 编程基础Shell简介 认识后台程序Bash编程熟悉Linux系统下的编辑环境 熟悉Linux下的各种Shell 熟练进行shell编程熟悉vi基本操作 熟悉Emacs的基本操作 比较不同shell的区别 编写一个测试服务器是否连通的shell脚本程序 编写一个查看进程是否存在的shell脚本程序 编写一个带有循环语句的shell
16、脚本程序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 编
17、译并下载Linux内核 编译并下载Linux应用程序4、嵌入式系统移植Linux内核代码 平台相关代码分析 ARM平台介绍 平台移植的关键技术 移植Linux内核到 ARM平台 了解移植的概念 能够移植Linux内核移植Linux2.6内核到 ARM9开发板5、嵌入式 Linux 下串口通信串行I/O的基本概念 嵌入式Linux应用软件开发流程 Linux系统的文件和设备 与文件相关的系统调用 配置超级终端和MiniCOM 能够熟悉进行串口通信 熟悉文件I/O 编写串口通信程序 编写多串口通信程序6、嵌入式系统中多进程程序设计Linux系统进程概述 嵌入式系统的进程特点 进程操作 守护进程 相
18、关的系统调用了解Linux系统中进程的概念 能够编写多进程程序编写多进程程序 编写一个守护进程程序 sleep系统调用任务管理、同步与通信 Linux任务概述任务调度 管道 信号 共享内存 任务管理 API 了解Linux系统任务管理机制 熟悉进程间通信的几种方式 熟悉嵌入式Linux中的任务间同步与通信编写一个简单的管道程序实现文件传输 编写一个使用共享内存的程序7、嵌入式系统中多线程程序设计线程的基础知识 多线程编程方法 线程应用中的同步问题了解线程的概念 能够编写简单的多线程程序编写一个多线程程序8、嵌入式 Linux 网络编程网络基础知识 嵌入式Linux中TCP/IP网络结构 soc
19、ket 编程 常用 API函数 分析Ping命令的实现 基本UDP套接口编程 许可证管理 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”程序 调试一个加入信号/槽的实例
20、 通过重载QWidget 类方法处理事件10、Linux 字符设备驱动程序设备驱动程序基础知识 Linux系统的模块 字符设备驱动分析 fs_operation结构 加载驱动程序了解设备驱动程序的概念 了解Linux字符设备驱动程序结构 能够编写字符设备驱动程序编写Skull驱动 编写键盘驱动 编写I/O驱动 分析一个看门狗驱动程序 对比Linux2.6内核与2.4内核中字符设备驱动的不同Linux 块设备驱动程序块设备驱动程序工作原理 典型的块设备驱动程序分析 块设备的读写请求队列了解Linux块设备驱动程序结构 能够编写简单的块设备驱动程序比较字符设备与块设备的异同 编写MMC卡驱动程序
21、分析一个文件系统 对比Linux2.6内核与2.4内核中块设备驱动的不同11、文件系统虚拟文件系统 文件系统的建立 ramfs内存文件系统 proc文件系统 devfs 文件系统 MTD技术简介 MTD块设备初始化 MTD块设备的读写操作了解Linux系统的文件系统 了解嵌入式Linux的文件系统 了解MTD技术 能够编写简单的文件系统为 ARM9开发板添加 MTD支持 移植JFFS2文件系统 通过proc文件系统修改操作系统参数 分析romfs 文件系统源代码 创建一个cramfs 文件系统嵌入式系统知识体系、学习误区及建议1 嵌入式系统的知识体系嵌入式系统的应用范围可以粗略分为两大类:电子
22、系统的智能化(工业 控制、现代农业、家用电器、汽车电子、测控系统、数据采集等),计算机应用的延伸(MP3、手机、通信、网络、计算机外围设备等)。从这些应用可以看出, 要完成一个以MCU为核心的嵌入式系统应用产品设计,需要硬件、软件及行业领域相关知识。硬件主要有MCU的硬件最小系统、输入输出外围电路、人机接口 设计。软件设计有固化软件的设计,也可能含PC机软件的设计。行业知识需要通过协作、交流与总结获得。概括地说,学习以MCU为核心的嵌入式系统,需要以下软硬件基础知识与实践训练:硬件最小系统(电源、晶振、复位、写入调试接口);通用IO(开关量输入输出,涉及各种二值量检测与控制);模数转换(各种传
23、感器信号的采集与处理,如红外、温度、光敏、超声波、方向等);数模转换(对模拟量设备利用数字进行控制);通信(串行通信接口SCI、串行外设接口SPI、集成电路互联总线I2C、CAN、USB、嵌入式以太网、ZigBee技术等);显示(LED、LCD等);控制(控制各种设备,包括PWM等控制技术);数据处理(图形、图像、语音、视频等的处理或识别);各种具体应用。万变不离其宗,任何应用都可以归入这几类。而应用中的硬件设计、软件设计、测试等都必须遵循嵌入式软件工程的方法、原理与基本原则。所以,嵌入式软件工程也是嵌入式系统知识体系的有机组成部分,只不过它融于具体项目的开发过程之中。 以上实践训练涉及硬件基
24、础、软件基础及相关领域知识。计算机语言、操作系统、开发环境等均是达到这些目的的工具。有些初学者,容易把工具的使用与所要达 到的真正目的相混淆。例如,有的学习者学了很长时间的嵌入式操作系统移植,而不进行实际嵌入式系统产品的开发,到最后也做不好一个嵌入式系统小产品,偏离 了学习目标,甚至放弃嵌入式系统领域。这就是进入了嵌入式系统学习误区,下面对此作一些分析。2 嵌入式系统的学习误区 关于嵌入式系统的学习方法,因学习经历、学习环境、学习目的、已有的知识基础等不同,可能在学习顺序、内容选择、实践方式等方面有所不同。但是,应该明 确哪些是必备的基础知识,哪些应该先学,哪些应该后学;哪些必须通过实践才能获
25、得;哪些是与具体芯片无关的通用知识,哪些是与具体芯片或开发环境相关的知 识。由于微处理器与微控制器种类繁多,也可能由于不同公司、机构出于自身的利益,给出一些误导性宣传,特别是我国嵌入式微控制器制造技 术落后,使得人们对微控制器的发展,在认识与理解上存在差异,导致一些初学者进入嵌入式系统的学习误区,浪费了宝贵的学习时间。下面分析可能存在的几个误 区。21 操作系统的困惑如果说,学习嵌入式系统不是为了开发其应用产品,那 就没有具体目标,诸如学习方法这样的问题也就不必谈了。实际上,这正是许多人想学,又不知从何开始学习的关键问题所在,不知道自己学习的具体目标。于是, 看了一些培训广告,看了书店中种类繁
26、多的嵌入式系统书籍,或上网以“嵌入式系统”为关键词进行查询,就参加培训或看书,开始“学习起来”。对于有计算机阅 历的人,往往选择一个嵌入式操作系统就开始学习了。这有点像“瞎子摸大象”,只了解其一个侧面。这样如何能对嵌入式产品的开发过程有全面了解呢?针对许多 初学者选择“XXX嵌入式操作系统+XXX处理器”的嵌入式系统入门学习模式,笔者认为是不合适的。笔者的建议是:首先把嵌入式系统软件与硬件基础打好 了,再根据实际需要,选择一种实时操作系统(RTOS)进行学习实践。要记住:RTOS是开发某些类嵌入式产品的辅助工具,是手段,不是目的;许多类嵌入 式产品,并不需要RTOS。所以,一开始就学习RTOS
27、,并不符合“由浅入深、循序渐进”的学习规律。RTOS本身由于种类繁多,实际 使用何种RTOS,一般需要由工作单位确定。基础阶段主要学习RTOS的基本原理与RTOS上的软件开发方法,而不是学习如何设计RTOS。以开发实际嵌 入式产品为目标的学习者,不要把过多的精力花在设计或移植RTOS上面。正如很多人使用Windows操作系统,而设计 Windows操作系统的只有Microsoft。许多人“研究”Linux,但不使用它,浪费了时间。人的精力是有限的,学习必须有所选择。22 硬件与软件的困惑 以MCU为核心的嵌入式技术的知识体系必须通过具体的MCU来体现、实践。但是,选择任何型号的MCU,其芯片相
28、关的知识只占知识体系的20左 右,80左右是通用的软件硬件及相关知识。80的通用知识,必须通过具体实践才能获得,所以学习嵌入式技术一般要选择一个系列的MCU。 系统含有硬件与软件两大部分,它们之间的关系如何?有些学者,仅从电子的角度认识嵌入式系统。认为“嵌入式系统=MCU硬件系统+小程序”。这些学者大 多具有良好的电子技术基础知识。实际情况是,早期MCU内部RAM小,程序存储器外接,需要外扩各种IO,没有像USB、嵌入式以太网等这样较复杂的接 口。因此,程序占总设计量比例小于50,使人们认为嵌入式系统(单片机)是“电子系统”,以硬件为主,程序为辅。但是,随着MCU制造技术的发展,不 仅MCU内
29、部RAM越来越大,Flash进入MCU内部改变了传统的嵌入式系统开发与调试方式,固件程序可以更方便地调试与在线升级,许多情况下与开发 PC机程序的方便程度相差无几,只不过开发环境与运行环境不是同一载体而已。这使得嵌入式系统的软件硬件设计方法发生了根本变化。 有些学者,仅从软件开发角度认识嵌入式系统,甚至仅从嵌入式操作系统认识嵌入式系统。这些学者大多具有良好的计算机软件开发基础知识,认为硬件是生产厂 商的事。他们没有认识到,嵌入式系统产品的软件与硬件均是需要开发者设计的。笔者常常接到一些关于嵌入式产品稳定性的咨询,发现大多数是由于软件开发者对 底层硬件的基本原理不理解。特别是有些功能软件开发者,
30、过分依赖于底层硬件的驱动软件,自己对底层驱动原理知之甚少。实际上,一些功能软件开发者,名义上 在做嵌入式软件,其实仅仅是使用嵌入式编辑、编译环境而已,本质与开发通用PC机软件没有两样。而底层硬件驱动软件的开发,若不全面考虑高层功能软件对底 层硬件的可能调用,也会使封装或参数设计得不合理或不完备,导致高层功能软件调用困难。可以看出,若把嵌入式系统的开发孤立地分为硬件设计、底层硬件驱动 软件设计、高层功能软件设计,那么一旦出现问题,就可能难以定位。实际上,嵌入式系统设计是一个软件、硬件协同设计工程,不能像通用计算机那样,软件、硬 件完全分开来看,而要在一个大的框架内协调工作。 学习嵌入式
31、系统是以软件为主还是以硬件为主,或者如何选择切入点,如何在软件与 硬件之间取得平衡?对于这个困惑的建议是:要想成为一名真正的嵌入式系统设计师,在初学阶段,必须打好嵌入式系统的硬件与软件基础。以下是从事嵌入式系统 设计二十多年的美国学者JohnCatsoulis在Designing Embedded Hardware一书中关于这个问题的总结:嵌入式系统 与硬件紧密相关,是软件与硬件的综合体,没有对硬件的理解就不可能写好嵌入式软件;同样,没有对软件的理解也不可能设计好嵌入式硬件。 23 片面认识嵌入式系统 嵌入式系统产品种类繁多,应用领域各异。在
32、第1部分中,把嵌入式系统的应用范围粗略分为电子系统的智能化与计算机应用的延伸两大类。从初学者角度,可能 存在分别从这两个角度片面认识嵌入式系统的问题。因此,一些从电子系统智能化角度认识嵌入式系统的学习者,可能会忽视编程结构、编程规范、软件工程的要 求、操作系统等知识的积累。另一些从计算机应用的延伸角度认识嵌入式系统的学习者,可能会把通用计算机学习过程中的概念与方法生搬硬套到嵌入式系统的实践 中,忽视嵌入式系统与通用计算机的差异。 实际上,在嵌入式系统学习与实践的初始阶段,应该充分了解嵌入式系统的特点,根据自身的 已有知识结构,制定适合自身情况的学习计划。目标应该是打好嵌入式系统的硬件
33、与软件基础,通过实践,为成为良好的嵌入式系统设计师建立起基本知识结构。学 习过程中,具体应用系统可为实践载体,但不能拘泥于具体系统,应该有一定的抽象与归纳。例如,初学者开发实际控制系统时没有使用实时操作系统,但不要认为 实时操作系统不需要学习。又例如,初学者可以一个带有实时操作系统的样例为蓝本进行学习,但不要认为任何嵌入式系统都需要实时操作系统,甚至为一个十分简 明的实际系统加上不必要的实时操作系统。因此,片面认识嵌入式系统,可能导致学习困惑。应该根据实际项目需要,锻炼自己分析实际问题、解决问题的能力。这 是一个长期的学习与实践过程,不能期望通过短期培训完成整体知识体系的建立,应该重视自身实践
34、,全面地理解嵌入式系统的知识体系。 24 入门芯片选择的困惑 嵌入式系统的大部分初学者需要选择一个微控制器(MCU)进行入门级学习,面对众多厂家生产的微控制器系列,往往不知如何是好。 首先是关于位数问题,目前主要有8位、16位和32位MCU。不同位数的MCU各有应用领域,这一点与通用微机有很大不同。例如做一个遥控器,不需要使 用 32位MCU,否则MCU芯片价格就已经超过遥控器价格需求。对于首次接触嵌入式系统的学习者,可以根据自己的知识基础选择入门芯片的位数。建议大多 数初学者选择8位MCU作为快速入门芯片,了解一些汇编与底层硬件知识,之后再
35、选16位或32位芯片进行学习实践。 关于芯片选择 的另一个误区是认为有“主流芯片”存在,嵌入式系统也可以形成芯片垄断。这完全是一种误解,是套用通用计算机系统的思维模式,而忽视了嵌入式系统应用的多 样性。关于学习芯片选择还有一个误区,即误认为选择工作频率高的芯片进行入门学习,更先进。实际上,工作频率高可能给初学者带来不少困难。 实际嵌入式系统设计不是追求芯片位数、工作频率、操作系统等因素,而是追求稳定可靠、维护、升级、功耗、价格等指标。初学者选择入门芯片,是通过某 一: MCU作为蓝本,获得嵌入式系统知识体系的通用基础。其基本原则是:入门时间较短、硬件
36、成本较低,知识要素较多,学习难度较低。 3 基础阶段的学习建议 基于以上讨论,下面对广大渴望学习嵌入式系统的学子提出几点基础阶段的学习建议: 嵌入式系统软件硬件密切相关,一定要打好软硬件基础。其实,只要找到正确的方法,加上努力,任何理工科学生,甚至非理工科学生,都能学好嵌入式系统。 选择一个芯片及硬件评估板(入门芯片最好简单一点,例如8位MCU)、选择一本好书(最好有规范的例子)、找一位好老师(最好是有经验且热心的)。硬 件评估板的价格一定要在1000元以下,不要太贵,最好能有自己动手的空间。不花一分硬件钱想要学好嵌入式系统不实际,因为这是
37、实践性很强的学科。好书, 可以让人少走弯路,不被误导。好老师也可以是做过一些实际项目的学长(一定要找做过几个成功项目的学长或老师做指导,否则经验不足也可能误导),有教师指 导,学习进程会加快(人工智能学科里有个术语叫无教师指导学习模式与有教师指导学习模式,无教师指导学习模式比有教师指导学习模式复杂许多。 许多人怕硬件,其实嵌入式系统硬件比电子线路好学多了。只要深入理解:MCU的硬件最小系统,对IO口、串行通信、键盘、LED、LCD、 SPI、 I2C、PWM、AD(包括一些传感器)、DA等逐个实验理解,逐步实践,再通过动手做一个实际的小系统,底层硬件基础就有了。各个硬件模
38、 块驱动程序的编写是嵌入式系统的必备基础。学习嵌入式系统的初期,这个过程是必须的。 至于嵌入式实时操作系统RTOS,一定不 要一开始就学,这样会走很多弯路,也会使你对嵌入式系统感到畏惧。等你软件硬件基础打好了,再学习就感到容易理解。实际上,许多嵌入式应用并不需要操作系 统。也可以根据实际项目需要,再学习特定的RTOS。不要被一些嵌入式实时操作系统培训班的宣传所误导,而忽视实际嵌入式系统软硬件基础知识的学习。 要避免片面地单纯从“电子”或“计算机软件”角度认识嵌入式系统。前面说过,嵌入式系统是软件与硬件的综合体。因此,要逐步从MCU的最小系统开始, 一点一点理解硬件原理及
39、底层硬件驱动编程方法。要通过规范的例子,理解软件工程封装、可复用等思想。通过规范编程,积累底层构件(component), 也就是一个一个模块;但是要封装得比较好,可复用。 注重实验与实践。这里说的实验主要指通过重复来验证他人的工作,目的是学习基础知识,这个过程一定要经历。实践是自己设计,有具体的“产品”目标。如果花500元左右,自己做一个具有一定功能的小产品,且能稳定运行1年以上,就可以说接近入门了。 关于入门芯片的选择。不要选太复杂的微控制器作为入门芯片,不能超越学习过程。不要一下子学习几种芯片。可以通过一个芯片入门,并具有一个实践经验 后,根据实际需要选择芯片开发
40、实际产品。注意,不要把微处理器(MPU与微控制器(MCU)概念相混淆,微处理器只是微控制器的内核。 关于嵌入式操作系统的选择。可以等到具有一定实践基础后,选择一个简单、容易理解原理的嵌入式操作系统进行学习。不要一开始就学习几种操作系统,理解了基本原理,实践中确有实际需要再学习也不迟。人总是要不断学习的。 关于汇编语言与C语言的取舍。随着:MCU对C编译的优化支持,对于汇编语言可以只了解几个必要的语句,而直接使用C语言编程。但必须通过第一个程序 理解芯片初始化过程、中断机制、程序存储情况等,区别于PC机程序的内容。另外,为了测试的需要,最好掌握一门PC机编程语言。
41、0; 要明确自己的学习目的,并注意学习方法。要明确学习目的是打基础,还是为了适应工作需要而进行的短训。学习方法方面,要根据学习目的选择合适的学习途 径,注意理论学习与实践、通用知识与芯片相关知识、硬件知识与软件知识的平衡,要在理解软件工程基本原理基础上理解硬件构件与软件构件等基本概念。 以上建议,仅供初学者参考。当然,以上只是基础阶段的学习建议。要成为良好的嵌入式系统设计师,还需要在实际项目中锻炼,并不断学习与积累经验。嵌入式Linux学前指导(初学者必读)目前,Linux作为嵌入式系统的主力军,广泛应用于消费类电子、工业控 制、军工电子、电信/网络/通讯、航空航天、汽车电子、医疗设
42、备、仪器仪表等相关行业。随着嵌入式行业的迅猛发展,嵌入式Linux凭借其系统发展的成熟 度、市场应用的高份额也受到更多工程师朋友的青睐,越来越多的企业和研发机构都转向嵌入式Linux的开发和研究,这使得嵌入式Linux在新兴的嵌入式 操作系统领域内也获得了飞速发展和广泛应用。而对于那些希望尽快进入嵌入式行业从事产品研发的朋友们,选择嵌入式Linux方向作为切入点无疑是最好的途 径之一。近期,有许多面临毕业、找工作的大学生来网站咨询了解 有关嵌入式Linux方向的学习安排。在与他们交流沟通的过程中,被问到最多的几个问题就是“如何做好嵌入式Linux学习前的准备?”,“学习嵌入式 Linux需要补
43、习哪些基础课程?”,“嵌入式Linux开发跟普通软件开发在学习方法上有什么不同?”,“项目实战环节多吗?”,“有专业人员带领 吗?”,相信这些也是很多准备入行的初学者都会关心的问题,为了帮助大家做好嵌入式Linux的学前准备,我们对这些常见的问题逐一进行解答,提供给大家 参考,希望能够有所帮助。1、如何做好嵌入式Linux学习前的准备?要成为一名合格的嵌入式Linux工程师,就需要系统的学习软、硬件相关领 域内的知识,需要在最开始就掌握开发的规范和原则,养成良好的工作习惯。为了确保学习的效果,这就要求准 备参加嵌入式Linux就业课程学习的同学要调整好自己的时间,务必要确保在4个多月的学习时间
44、内能够高度集中精力。在整个集中学习过程中,既要保证课上认真听讲、实战演练的时间,也要保证课下继续实战演练、查阅资料的时间。只有经过这种高强度的、实战为主的训练,才能够在比较短的时间内掌握规范的嵌入式开发工作流程,让自己符合嵌入式企业对应岗位的需求。除了在学习时间上要做好充分的准备之外,在学习的心态和方法的调整上也要做 好准备。许多朋友只了解嵌入式Linux方向美好的发展前景,只关注高收入、就业机会多等热点,却忽略了学习过程本身。为了能够让集中培训的效果发挥到最 佳,建议大家在学习开始前更多地去了解嵌入式产品研发的特点、所需要掌握的技术规范和工作要点,关注需具备基础的补充和学习,从而为后续的强化
45、学习过程做 好心态上的准备,毕竟态度往往决定了最后做事的结果。2、学习嵌入式Linux需要补习哪些基础课程?嵌入式Linux工程师的学习需要具备一定的C语言基础,因此面对许多朋友 只是在大一或者大二学习过C(还不一定认真学了,呵呵!),之后基本就不再用过的情况,建议大家学习之前先复习一下C语言基础这块。要提醒大 家的是,复习时不能只关注基本语法,对于常用的数据存储及处理方式,例如:数组、结构体等也要关注,有条件的话一定在机器上亲自敲敲代码、分析理解一下具 体案例代码编写的思路,让自己慢慢进入一名嵌入式开发人员的状态。此外,在时间允许的情况下,建议大家看一下有关计算机操作系统工作原理以及 计算机
46、组成原理等方面的专业书籍。对于进程、线程、任务调度、总线、I/O等基本概念及工作原理有一个初步的了解和掌握,这部分知识的准备对于后续更好地 学习嵌入式Linux系统开发将会起到很好的帮助作用。3、嵌入式Linux开发跟普通软件开发在学习方法上有什么不同?要成为一名成功的嵌入式软件开发人员,程序的设计能力是首要技能,这一点与 普通的软件开发人员的要求是一样的。但是作为“软硬兼施”的嵌入式开发,则要求大家不仅要了解较底层软件的工作过程和工作原理(例如操作系统级、驱动程序 级软件),在软件开发的专业水平上也需要充分考虑软件设计的时间和空间效率,这样才能设计出高性能嵌入式程序。因此面对相对复杂的嵌入式
47、系统的研发过程,在学习的过程中需要更多关注完整的知识体系结构的建立。特别是对于原理性知识的掌握程度则相对普通的软件开发人员提出了更高的要求。因此在学习的过程中,“要知其然,更要知其所以然”。记住贯穿始终的是:要知道为什么学?要知道学的是什么?要知道怎么学?要知道学了如何用?最后还要知道用的时候出了问题该如何解决?相信以这些问题为线索的学习过程一定可以帮助大家快速成为一名优秀的嵌入式开发工程师。嵌入式系统Linux内核开发学习指导框图嵌入式设计应具备的基本技能1、Linux 基础安装Linux操作系统 Linux文件系统 Linux常用命令 Linux启动
48、过程详解 熟悉Linux服务能够独立安装Linux操作系统 能够熟练使用Linux系统的基本命令 认识Linux系统的常用服务安装Linux操作系统Linux基本命令实践 设置Linux环境变量 定制Linux的服务 Shell 编程基础使用vi编辑文件 使用Emacs编辑文件 使用其他编辑器2、Shell 编程基础Shell简介 认识后台程序Bash编程熟悉Linux系统下的编辑环境 熟悉Linux下的各种Shell 熟练进行shell编程熟悉vi基本操作
49、0;熟悉Emacs的基本操作 比较不同shell的区别 编写一个测试服务器是否连通的shell脚本程序 编写一个查看进程是否存在的shell脚本程序 编写一个带有循环语句的shell脚本程序3、Linux 下的 C 编程基础linux C语言环境概述 Gcc使用方法 Gdb调试技术 Autoconf Automake Makefile 代码优化 熟悉Linux系统下的开发环境 熟悉Gcc编译器 熟悉Makefile规则编写Hello,World程序
50、0;使用 make命令编译程序 编写带有一个循环的程序 调试一个有问题的程序4、嵌入式系统开发基础嵌入式系统概述 交叉编译 配置TFTP服务 配置NFS服务 下载Bootloader和内核 嵌入式Linux应用软件开发流程熟悉嵌入式系统概念以及开发流程 建立嵌入式系统开发环境制作cross_gcc工具链 编译并下载U-boot 编译并下载Linux内核 编译并下载Linux应用程序4、嵌入式系统移植Linux内核代码 平台相关代码分析 ARM平台介绍
51、60;平台移植的关键技术 移植Linux内核到 ARM平台 了解移植的概念 能够移植Linux内核移植Linux2.6内核到 ARM9开发板5、嵌入式 Linux 下串口通信串行I/O的基本概念 嵌入式Linux应用软件开发流程 Linux系统的文件和设备 与文件相关的系统调用 配置超级终端和MiniCOM 能够熟悉进行串口通信 熟悉文件I/O 编写串口通信程序 编写多串口通信程序6、嵌入式系统中多进程程序设计Linux系统进程概述 嵌
52、入式系统的进程特点 进程操作 守护进程 相关的系统调用了解Linux系统中进程的概念 能够编写多进程程序编写多进程程序 编写一个守护进程程序 sleep系统调用任务管理、同步与通信Linux任务概述任务调度 管道 信号 共享内存 任务管理 API 了解Linux系统任务管理机制 熟悉进程间通信的几种方式 熟悉嵌入式Linux中的任务间同步与通信编写一个简单的管道程序实现文件传输 编写一个使用共享内存的程序7、嵌入式系统中多线程程序设计线程的基础知
53、识 多线程编程方法 线程应用中的同步问题了解线程的概念 能够编写简单的多线程程序编写一个多线程程序8、嵌入式 Linux 网络编程网络基础知识 嵌入式Linux中TCP/IP网络结构 socket 编程 常用 API函数 分析Ping命令的实现 基本UDP套接口编程 许可证管理 PPP协议 GPRS 了解嵌入式Linux网络体系结构 能够进行嵌入式Linux环境下的socket 编程 熟悉UDP协议、PPP
54、协议 熟悉GPRS 使用socket 编写代理服务器 使用socket 编写路由器 编写许可证服务器 指出TCP和UDP的优缺点 编写一个web服务器 编写一个运行在 ARM平台的网络播放器9、GUI 程序开发GUI基础 嵌入式系统GUI类型 编译QT 进行QT开发熟悉嵌入式系统常用的GUI 能够进行QT编程使用QT编写“Hello,World”程序 调试一个加入信号/槽的实例 通过重载QWidget 类方法处理事件
55、10、Linux 字符设备驱动程序设备驱动程序基础知识 Linux系统的模块 字符设备驱动分析 fs_operation结构 加载驱动程序了解设备驱动程序的概念 了解Linux字符设备驱动程序结构 能够编写字符设备驱动程序编写Skull驱动 编写键盘驱动编写I/O驱动 分析一个看门狗驱动程序 对比Linux2.6内核与2.4内核中字符设备驱动的不同Linux 块设备驱动程序块设备驱动程序工作原理 典型的块设备驱动程序分析 块设备的读写请求队列了解Linux块设备驱动
56、程序结构 能够编写简单的块设备驱动程序比较字符设备与块设备的异同 编写MMC卡驱动程序 分析一个文件系统 对比Linux2.6内核与2.4内核中块设备驱动的不同11、文件系统虚拟文件系统 文件系统的建立 ramfs内存文件系统 proc文件系统 devfs 文件系统 MTD技术简介 MTD块设备初始化 MTD块设备的读写操作了解Linux系统的文件系统 了解嵌入式Linux的文件系统 了解MTD技术 能够编写简单的文件系统为 ARM9开
57、发板添加 MTD支持 移植JFFS2文件系统 通过proc文件系统修改操作系统参数 分析romfs 文件系统源代码 创建一个cramfs 文件系统 简单地总结一下硬件开发的基本过程: 1、明确硬件总体需求情况,如CPU处理能力、存储容量及速度、I/O端口的分配、接口要求、电平要求、特殊电路要求等等。 2、根据需求分析制定硬件总体方案,寻求关键器件及相关技术资料、技术途径和技术支持,充分考虑技术可行性、可靠性和成本控制,并对开发调试工具提出明确要
58、求。关键器件可试着去索取样品。 3、总体方案确定后,做硬件和软件的详细设计,包括绘制硬件原理图、软件功能框图、PCB设计、同时完成开发元器件清单。 4、做好PCB板后,对原理设计中的各个功能单元进行焊接调试,必要时修改原理图并作记录。 5、软硬件系统联调。一般情况下,经过调试后原理及PCB设计上有所调整,需要二次投板。 6、可靠性测试、稳定性测试,通过验收,项目完成! 硬件工程师应具备的基本技能:
59、; (1)由需求分析至总体方案、详细设计的规划创造能力; (2)熟练运用设计工具,设计原理图、PCB板的能力; (3)熟练运用单片机、DSP、PLD、FPGA等进行软硬件开发调试的能力; (4)熟练运用仿真工具、示波器、信号发生器、逻辑分析仪等调测硬件的能力; (5)掌握常用的标准电路的设计能力,如复位电路、常用滤波器电路、功放电路、高速信号传输线的匹配电路等;
60、60;(6)故障定位、解决问题的能力; (7)设计文档的组织编写技能。 嵌入式书籍推荐 Linux基础 1、Linux与Unix Shell 编程指南 C语言基础 1、C Primer Plus,5th Edition【美】Stephen Prata着 2、The C Programming Language, 2nd Edition
61、【美】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、UN
62、IX Network Programming(UNP) 2、TCP/IP详解 3、Linux内核编程 4、Linux设备驱动开发(LDD) 5、Linux高级程序设计 杨宗德著硬件基础 1、ARM体系结构与编程杜春雷着 2、S3C2410 Datasheet 英语基础 1、计算机与通信专业英语 系统教程 1、嵌入式系统体系结构、编程与设计 2、嵌入式系统采用公开源代码和StrongARM/Xscale处理器毛德操 胡希明着 3
63、、Building Embedded Linux Systems4、嵌入式ARM系统原理与实例开发 杨宗德著理论基础 1、算法导论 2、数据结构(C语言版) 3、计算机组织与体系结构?性能分析 4、深入理解计算机系统【美】Randal E. Bryant David O''Hallaron着 5、操作系统:精髓与设计原理 6、编译原理 7、数据通信与计算机网络 8、数据压缩原理与应用 C语言书籍推荐 1. The
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025太阳能光伏建设项目施工合同模板
- 2025残障人士推拿治疗师劳动合同
- 2025精致装修租房合同样本
- 小学男生生理卫生知识教育
- 少年队主题活动策划方案
- 2025标准商场租赁合同模板
- 小学交通安全教育班会课件
- 2025员工无息借款合同书
- 缺铁性贫血的病人护理
- 小学生关于水的安全教育
- 立绘买断合同协议
- 2025春季学期国开电大本科《人文英语3》一平台在线形考综合测试(形考任务)试题及答案
- 针灸推拿治疗失眠的禁忌
- 利达消防L0188EL火灾报警控制器安装使用说明书
- 河南省驻马店市部分学校2024-2025学年高三下学期3月月考地理试题(含答案)
- 2025江苏盐城市射阳县临港工业区投资限公司招聘8人高频重点模拟试卷提升(共500题附带答案详解)
- 2025至2030年中国声音感应控制电筒数据监测研究报告
- DB50T 1041-2020 城镇地质安全监测规范
- 2025-2030年中国冰激凌市场需求分析与投资发展趋势预测报告
- 体育赛事运营方案投标文件(技术方案)
- 海绵城市施工质量保证措施
评论
0/150
提交评论