怎样学习嵌入式软件

什么是嵌入式?

嵌入式分为广义和狭义两种。广义的嵌入式就是片上系统(system on a chip),包含单片机、PSOC、NIOS、Microblaze等。而狭义的嵌入式就是ARM9、cortex A8等特定的跑操作系统的芯片。这里主要介绍狭义嵌入式的学习路线。

还是主流的方法。先学会使用它。再深入研究底层。

经常使用的操作系统有linux、WIN CE、安卓、Vxworks、QNX、OSE等。眼下资料最多的是linux,所以以下以linux为例。

一、安装虚拟机和linux系统。

一般人用的电脑都会装Windows系统,要想在Windows上跑其他系统。得安装虚拟机。

而眼下主流的虚拟机有vmware、VirtualBox、hyperV等,你能够随便选一个安装。然后去官网下载个人版的linux镜像(.iso文件)并把它安装在虚拟机里面就可以。这里给出主流linux系统的官网链接:ubuntufedoracentosdebiansuse。假设你没实用过linux的话,推荐使用ubuntu。由于RedHat要收费。并改名为RHEL,所以这里不作介绍。

先下载一本《鸟哥私房菜》。

然后进入第二、三、四阶段(前期的学习不须要开发板)。

二、学会使用linux经常使用命令。

这里,必须改改在Windows下点鼠标的习惯。在linux下做事得用命令行。此外,在linux下载软件。不须要在百度下载,而是用linux自带的软件包管理工具(如:apt-get、dnf、rpm等)。假设你用ubuntu的话,得改动软件源(下载软件的网址),由于国外的源比較慢,百度上有具体说明。接下来,得学会最主要的命令,如:ls、cd、find、grep、ps、diff、fdisk、ifconfig等。

跟着教材多操作几遍就会了。没有非常深的理论知识,不须要掌握全部的命令,也不须要记住全部命令的选项。用到的时候会查就能够了。

有空的话能够上ubuntu社区或者linux公社

三、学会使用linux经常使用工具。

1、编辑器(写代码必备的)。

有gedit,vim,emacs,sublime等。推荐学vim

2、gcc和gdb。gcc是编译器。gdb就是代码调试器。

3、makefile、autoconf、automake。这里可不像VC++6.0这样的工具。点个鼠标就给你编译好。

在linux下,你得用makefile和make工具,来编译代码。

当中autoconf和automake能够自己主动生成makefile。

4、ssh、tftp。

假设你在ARM开发板上弄了个Webserver,那么。你就能够用这些工具去訪问它。当中,ssh工具建议用SecureCRT或者MobaXterm

5、samba。要想用linux跟windows交换数据,还能够搭建sambaserver。

6、版本号控制器。有svn,cvs,git等。推荐学git。

有了git。你就不必手动备份代码了。

四、学会编写shell脚本。

在实际工作中,复杂的系统管理操作,不会一行一行地敲命令,而是用脚本(命令是基础)。

脚本也是一种编程语言,仅仅只是是解释型语言。相比C/C++、C#、JAVA这类高级语言。脚本要易学非常多(由于添加了语法糖)。在linux下,shell也有非常多种。如:bsh、bash、csh、tcsh、ksh、zsh等,通常是学bash,其他的遇到再学也不迟。由于都是大同小异的。

此外,bash语法比較奇特,非常多符号(如:$#,$0,$?等)比較难记,只是也不是必需特意去死记它,有个印象就能够了。用到的话再查手冊,这里重点掌握正則表達式。

假设有时间的话,建议再学python脚本。python的语法要easy非常多。用途也比bash广非常多。

推荐《Shell脚本编程诀窍》。

五、学会linux下C编程。

虽然学会bash已经能做非常多事情了。可是驱动和内核开发还是用C语言,由于那时候系统还没起来。bash是用不了的。此外。C语言的运行效率比bash要高,网络编程的Socket也经常常使用C语言开发。在这里,得掌握主要的文件操作、进程/线程控制、Socket等。推荐《Linux环境C程序设计》、《UNIX环境高级编程》、《UNIX网络编程
卷1
》、《UNIX网络编程 卷2》,也许这些教材有点难。可是,请不要钻牛角尖。不懂的临时跳过,在学完下一阶段的理论之后,再来看。之前不懂的东西就变得easy。

六、增强理论知识。

由于有的人打着嵌入式硬件project师的名号装逼,事实上嵌入式硬件就是普通硬件project师做的工作。我们这里都是讨论软件方面的内容,并且嵌入式是以软件为主导的(工资上有较大差距)。假设对硬件感兴趣的。能够參考本博客《怎样学习硬件设计——理论篇》和《怎样学习硬件设计——实践篇》,这里不要求掌握硬件,有一定程度的了解就可以。

1、单片机。

详细的学习路线请參考本博客的《怎样学习单片机》。

不想学单片机的话,能够学计算机组成原理。

2、数据结构。主要掌握表和树,当中链表会在操作系统的调度算法中用到。

3、操作系统。所有都是重点,必须深入研究,才会对linux有个较全面的认识。

4、编译原理。有时间的话,最好多看看。没空的话,也得了解一下。

对于提高编程能力,有一定的帮助。

5、数据库。除了主要的数据库理论之外,还得掌握SQLite或者Oracle。

6、ARM体系结构。介绍ARM的架构和指令集。在移植uboot和驱动中会用到。不做这两项工作的话,能够不学。

7、计算机网络基础。开发中用到的socket、ssh、tftp、http就会涉及到网络相关的知识。

8、接口应用。

如:串口、zmodem、IIC、SPI、1-wire、USB、HDMI、CAN、IIS、PCIE、蓝牙、陀螺仪等。

           学完上面这些理论之后。得再复习一下linux下C编程。你会有更大的收获。

           先下载一本韦东山的《嵌入式Linux应用开发全然手冊》。还要买一块2440的开发板(尽管s3c2440已经停产。可是这芯片按照是资料最多的一块)。然后进入七、八、九、十阶段。当中第七、八、九阶段。使用开发板自带的bootloader就可以,临时不必研究它。

七、文件系统。

       在学习操作系统原理的时候,已经有介绍文件系统了,并且不须要深入研究文件系统的详细算法,仅仅须要了解其特性再学会使用它就能够了。

如:NFS、FAT32、NTFS、yaffs2、ext4、ZFS等。

八、内核裁剪。

        一般初学。能够先掌握内核剪裁(详细工作就是填写若干个选项)。剪裁仅仅是去掉内核部分不须要的功能,以降低代码体积。

这里仅仅要求你对内核的各个功能选项都非常熟悉就能够了。假设剪裁还不能满足要求的话。得阅读内核源代码。改动内核了。推荐《Understanding
the Linux Kernel
》和《Linux Kernel Development》。阅读内核源代码,推荐windows下的source insight。

九、驱动开发。

        因为系统还没起来。所以驱动能用到的API(内核的部分API。如:kprintk、kmalloc等)并不多,非常多函数还是得自己写的。当中,会常常訪问临界资源。所以得掌握自旋锁、睡眠锁。此外。驱动程序出问题的话。整个系统就挂掉了,所以还要掌握各种调试驱动的方法,如:goto语句、日志系统、KDB等。接下来就要熟悉掌握字符设备和块设备的驱动程序了。

推荐《小白的博客》和《Linux
Device Drivers》
(不建议看中文版)。

十、移植bootloader。

单片机也有bootloader,在keil C下的startup.a51。主要是做一些初始化工作。那么,在ARM上面的bootloader也是一样的功能,相同,也没有那么重要所以把它排在后面。

经常使用的bootloader有vivi和uboot。一般学习uboot。主要掌握uboot的启动流程和移植。

在经过前面的学习,那么uboot对你来说已经很easy的了,一般仅仅须要学会使用uboot或者用已经移植好的uboot,不须要深入研究它。

推荐看uboot自带的帮助文档。

阅读uboot源代码,推荐windows下的source
insight。

十一、图形界面开发。

经常使用的GUI图形库有:GTK++、QT、JAVA、安卓等。有C++基础的。建议学习QT,不会C++的,建议学JAVA。在前期的GUI开发,能够不须要使用开发板。而2440下适合跑QT。假设要跑JAVA、安卓的话。建议换一块开发板,能够考虑Exynos4412开发板。

此外,你还能够用python自带的TKinter来开发图形界面。

推荐《QT5编程入门》、《疯狂JAVA讲义》、《疯狂Android讲义》、《python编程入门》。

由于安卓系统是在linux的基础上封装了一层API,所以,假设做安卓驱动,就得掌握linux(上面前十个阶段)。假设仅仅做安卓app,你仅仅须要使用android studio或者eclipse配合安卓模拟器(最好用安卓手机)。就能够了,不须要学习linux,也不须要开发板。

在你做过几个GUI项目之后,再学习UML设计模式这会大大增强你的代码架构能力。

十二、Web开发。

有的时候得在ARM板上搭个webserver,这里。得学习HTML、CSS、Javascript、XML、Ajax、PHP等。看起来内容非常多。但事实上并不多。由于这些语言都非常easy上手。初学能够使用Adobe的Dreamweaver做开发,上手之后一个sublime
text配合firefox浏览器就能够了(还要学习MVC模式)。此外,还得会用bash或者python编写CGI程序,这样才干够在网页上调用究竟层的C语言接口。推荐《疯狂HTML
5/CSS3/JavaScript讲义
》。

十三、杂谈。

本文没有涉及流程图绘制软件文档生成工具等(这两个东西在工作中会经经常使用到)。

由上文可知,嵌入式软件涉及非常多计算机相关的知识,这对于电子专业的学生来说。无疑相当于跨专业那么大难度。此外,就算你掌握了上面所提及的知识,那也仅仅是打开一扇小小的窗户而已,还有非常多事情做不了的。比方:二维码识别、视频採集卡等。

BTW,嵌入式的工作也分成几个岗位,各自是系统project师、驱动project师、软件project师(负责网页或GUI开发)、UIproject师(又称美工)。

系统project师:熟悉操作系统的内核原理、熟读内核源代码。

主要职责为系统打补丁或者加入新功能,如:热升级、提高系统的容错性等。

一般的公司是不做这样的开发的。

驱动project师:熟悉各种外设的驱动开发,为内核和GUI提供接口。

因为非常多IC厂商提供了相关芯片的驱动程序,而导致非常多驱动project师下岗(需求量降低)。

软件project师:熟悉各种编程语言和GUI图形库、框架(不是会查文档就能够的。而是要求很熟悉框架)。因为项目需求常常变更,开发效率跟不上变化,所以软件project师的需求量大大添加。

UIproject师:主要负责美化界面。

美术特长生更适合这类工作。

时间: 2024-08-09 19:52:41

怎样学习嵌入式软件的相关文章

如何学习嵌入式软件

什么是嵌入式? 嵌入式分为广义和狭义两种.广义的嵌入式就是片上系统(system on a chip),包括单片机.PSOC.NIOS.Microblaze等.而狭义的嵌入式就是ARM9.cortex A8等特定的跑操作系统的芯片.这里主要介绍狭义嵌入式的学习路线. 还是主流的方法,先学会使用它,再深入研究底层. 常用的操作系统有Linux.WIN CE.安卓.Vxworks.QNX.OSE等,目前资料最多的是linux,所以下面以linux为例. 一.安装虚拟机和linux系统. 一般人用的电

如何学习FPGA(转)

原文来自:http://m.blog.csdn.net/k331922164/article/details/44626989 一.入门首先要掌握HDL(HDL=verilog+VHDL). 第一句话是:还没学数电的先学数电.然后你可以选择verilog或者VHDL,有C语言基础的,建议选择VHDL.因为verilog太像C了,很容易混淆,最后你会发现,你花了大量时间去区分这两种语言,而不是在学习如何使用它.当然,你思维能转得过来,也可以选verilog,毕竟在国内verilog用得比较多. 接

新手入门嵌入式学习单片机?stm32?树莓派?4412开发板资料大汇报-基础了解

ARM+Linux是目前比较吃香的嵌入式软件开发组合,4412开发板是目前嵌入式入门很好的选择,但很多新手对于如何入门嵌入式感觉不知从何下手,本文学习嵌入式软件开发需要具备哪些基本知识 Linux基础 Linux的源码和架构都是开放的,在嵌入式系统中应用尤为广泛,学习Linux对于系统的开发会有很大的帮助.详细了解Linux下的目录结构.基本命令.编辑器VI.编译器GCC.调试器GDB和 Make 项目管理工具,Shell Makefile脚本编写等知识,以及嵌入式开发环境的搭建. 赶快加入吧

《嵌入式怎么学?新人十问及解答》

常见的ARM嵌入式学习问答,设计者和学习者最关心的11个问题:1.ARM嵌入式是学习硬件好还是学习软件好? 2.嵌入式软件和硬件,哪一种职位待遇更高?或者说,在设计中哪一个更重要? 3.学完51单片机后,想买ARM开发板继续学习,是买ARM7还是ARM9? 4.到底是学习哪种内核:ARM7.CORTEX-M3.CORTEX-M4.ARM9.CORTEX-A8还是CORTEX-A9? 5.ARM芯片如何选择型号? 6.学习ARM主要学习啥? 7.是先学习基于操作系统的应用层程序的编程,还是先学习基

2015_6_16-我的嵌入式软件学习路线

首先先在开头声明一下,我对嵌入式软件的也是一个不折不扣的新手,下面所有的学习路线都是我在网上借鉴各位前人的学习路线之后自己总结整理的,所以肯定会有不对的地方,请大家不要见怪,也请各位看见此篇博文的大神们(我知道这个几率很小,估计连个看的人都没有)有什么高明的见解,一定要指出来,在此小弟先谢谢了! 先说一下我都会什么,以前在大学时代做个几个项目,一开始用的是STC的51,后来就转用ST公司的STM32了,M3内核的F1系列用的比较多,M4内核的F4系列也用过,但是都是基于库函数,所以在编程上除了有

关于嵌入式如何学习(看了不后悔,给学技术的同行一条光明的路)

关于嵌入式如何学习,我相信有很多大牛回答得很专业,最近在知乎上看到一网名为----李brooks,~的网友对此进行了总结,我个人觉得非常好,还有其他两位网友li crifan和Tony Ho,毕竟我工作以来也还有好多东西没有接触,就有他说的那些中的部分内容,我们来看看他们说了什么内容: 有一位大学生四年级的网友提出这样的问题: 本人大四学生,专业为电气类的,有C语言,单片机,模电,数电的基础,一直想从事嵌入式方面的工作(感兴趣),但是以目前的水平,暂时还不能找到这方面的工作,所以一直在纠结是先找

学习嵌入式还有前途吗?

嵌入式 PK 互联网 互联网+浪潮越来越热,一个学习Android app开发的应届生待遇都可以开到8K以上,越来越多的人开始投入到互联网开发领域中去.这是今年,尤其是去年2015年开始的火爆的互联网行情.家里的亲戚也曾跟我说过,你不是研究生吗,工资咋还这么低?隔离老王家的儿子本科毕业才2年,工资都15K了......从事嵌入式开发的工程师工资往往轻松被互联网的人double kill,甚至treble kill.网上各个QQ群.论坛.贴吧里也经常有在校的大学生迷茫,到底该选择嵌入式,还是互联网

学习游戏要学习编程语言吗?十大主流编程语言解析

计算机的发展,促使了一个新的职业的出现,程序员是近些年出现的并且得到了广泛关注的一个职业,相信这也是很多莘莘学子的职业梦想.但程序员也有很多种,并不是每一个程序员能够精通所有的编程语言.所谓术业有专攻,如果将来志在编程世界的网友就要注意了,今天给大家推荐一下2014年最流行的编程语言,他们可以说是未来程序员们生存的工具. 1.JavaScript JavaScript在Web应用上有着非常大的需求,JavaScript主要用于实现为Web浏览器,以提供增强的用户界面和动态网站. 直到google

(转)嵌入式开发如何学习

一般来说,在嵌入式行业中从事嵌入式产品研发的人往往来自这样一些专业:计算机.电气,自动化,微电子,电子信息,通信,机械等相关专业,由于大学里面不同专业基础课的设置,所以在准备学习的过程中需要根据实际情况有不同的侧重. 一是程序设计的基础,例如:基本的编程语言基础,至少对数据类型.程序的结构及流程控制等最基本的内容要相当清楚,所以建议恶补一下C语言,呵呵!另外有不少同学都问到数据结构的基础,我一直认为数据结构和算法的学习是帮助形成程序设计逻辑思维的很好训练方式,对于程序员的长期专业素养的提高一定有