嵌入式学习总结

嵌入式学习是一个循序渐进的过程,如果是希望向嵌入式软件方向发展的话,目前最常见的是嵌入式Linux方向,关于这个方向,我认为大概分3个阶段:

1、嵌入式linux上层应用,包括QT的GUI开发

2、嵌入式linux系统开发

3、嵌入式linux驱动开发

嵌入式目前主要面向的几个操作系统是,LINUX,WINCE、VxWorks等等

Linux是开源免费的,而且其源代码是开放的,更加适合我们学习嵌入式。

所以你可以尝试以下路线:

(1) C语言是所有编程语言中的强者,单片机、DSP、类似ARM的种种芯片的编程都可以用C语言搞定),因此必须非常熟练的掌握。

推荐书籍:《The C Programming Language》 这本经典的教材是老外写的,也有中译版本。

(2) 操作系统原理,是必需的,如果你是计算机专业毕业那也就无所谓了,如果是非计算机专业的就必须找一本比较浅显的计算机原理书籍看一看,把啥叫“进程”“线程”“系统调度”等等基本问题搞清楚。

(3)Linux操作系统就是用C语言编写的,所以你也应该先学习下Linux方面的编程,只有你会应用了,才能近一步去了解其内核的精髓。

推荐书籍:《UNIX环境高级编程》(第2版)

(4) 了解ARM的架构,原理,以及其汇编指令,我们在嵌入式开发中,一般很少去写汇编,但是最起码的要求是能够看懂arm汇编。

(5) 系统移植的时候,就需要你从最下层的bootloader开始,然后内核移植,文件系统移植等。而移植这部分对硬件的依赖是非常大的,其配置步骤也相对复杂,也没有太多详细资料。

(6) 驱动开发

linux驱动程序设计既是个极富有挑战性的领域,又是一个博大精深的内容。

linux驱动程序设计本质是属于linux内核编程范畴的,因而是对linux内核和内核编程是有要求的。在学习前你要想了解linux内核的组成,因为每一部分要详细研究的话足够可以扩展成一本厚书。

以上只不过是大概的框架,在实际的开发中还会涉及很多东西,比如:交叉编译、makefile、shell脚本等等,所以说学习嵌入式的周期较长,门槛较高,自学的话更是需要较强的学习能力和专业功底。只要能坚持下来一定会取得成功!

如果之前基本没接触过嵌入式技术的话,建议你去参加嵌入式培训系统的学习这方面的知识,对你以后的就业发展很有好处的,建议你在线看一下千锋嵌入式培训学院相关嵌入式技术专题的视频,先对这个行业有更多了解,具体知道关键的技术点,更好地往这个方向发展。另外,千锋嵌入式培训学院从06年起陆续出版的四十多本畅销嵌入式专业教材,各大书店和图书馆都有,你可以百度一下“千锋嵌入式培训学院” 了解更多嵌入式行业的相关信息。

2

我在学习嵌入式学习网的视频,个人感觉还是很不错的,学习了两个月了,对嵌入式终于有所了解,现在都在学嵌入式linux的编程。

我以前看到这篇文章后才开始学的,转发让你看下,希望对你有所帮助。

关于如何从零基础开始学习嵌入式,我看到一篇很不错的文章,是一个专科生介绍自己如何从零基础开始自学嵌入式,并找到嵌入式的工作,里面介绍了他的学习方法和学习过程,希望对你有帮助。

专科生学嵌入式到找到工作的前前后后--学习的榜样

    先做个自我介绍,我07年考上一所很烂专科民办的学校,学的是生物专业,具体的学校名称我就不说出来献丑了。09年我就辍学了,我在那样的学校,一年学费要1万多,但是根本没有人学习,我实在看不到希望,我就退学了。

    退学后我也迷茫,大专都没有毕业,我真的不知道我能干什么,我在纠结着我能做什么。所以辍学后我一段时间,我想去找工作,因为我比较沉默寡言,不是很会说话,我不适合去应聘做业务。我想应聘做技术的,可是处处碰壁。

    一次偶然的机会,我才听到嵌入式这个行业。那天我去新华书店,在计算机分类那边想找本书学习。后来有个女孩子走过来,问我是不是读计算机的,有没有兴趣学习嵌入式,然后给我介绍了一下嵌入式现在的火热情况,告诉我学嵌入式多么的有前景,给我了一份传单,嵌入式培训的广告。听了她的介绍,我心里痒痒的,确实我很想去学会一门自己的技术,靠自己的双手吃饭。

    回家后,我就上网查了下嵌入式,确实是当今比较热门的行业,也是比较好找工作的,工资也是相对比较高。我就下决心想学嵌入式了。于是我去找嵌入式培训的相关信息,说真的,我也很迷茫,我不知道培训是否真的能像他们宣传的那样好,所以我就想了解一段时间再做打算。

    后来,我在百度知道看到一篇让我很鼓舞的文章《如何学习嵌入式》,是一个嵌入式高手介绍没有基础的朋友怎么自学入门学嵌入式,文章写的很好,包含了如何学习,该怎么学习。他提到一个方法就是看视频,因为看书实在太枯燥和费解的,很多我们也看不懂。这点我真的很认同,我自己看书往往看不了几页。

    我在想,为什么别人都能自学成才,我也可以的!我要相信自己,所以我就想自学,如果实在学不会我再去培训。

    主意一定,我就去搜索嵌入式的视频,虽然零星找到一些嵌入式的视频,但是都不系统,我是想找一个能够告诉我该怎么学的视频,一套从入门到精通的视频,一个比较完整的资料,最好能有老师教,不懂可以请教的。

     后来我又找到一份很好的视频,是在嵌入式学习网推出的一份视频《从零基础开始学嵌入式》,网址: http://www.51WEN.info/evem.htm   里面的教程还不错,很完整,可以让我从基础的开始学起。视频不便宜啊,但是我也忍了,毕竟买几本书都要几百了,何况他们还有半年的技术咨询和服务,算值了。

    下面介绍下我的学习流程,希望对和我一样完全没有基础的朋友有所帮助。

    收到他们寄过来的光盘后,我就开始学习了,由于我没有什么基础,我就从最简单的C语言视频教程学起,话说简单,其实我还是很多不懂的,我只好请教他们,他们还是很热心的,都帮我解决了。C语言我差不多学了一个礼拜,接下来我就学了linux的基本命令,我在他们提供linux虚拟机上都有做练习,敲linux的基本命令,写简单的C语言代码,差不多也就三个礼拜。我每天都在不停的写一些简单的代码,这样一月后我基本掌握了C和linux的基本操作。

    接下来我就去学习了人家的视频的培训教程,是整套的,和去参加培训没有多大的区别,这一看就是两个月,学习了ARM的基本原理,学习嵌入式系统的概念,也掌握了嵌入式的环境的一些搭建,对linux也有更深层次的理解了,明白了嵌入式应用到底是怎么做的,但是驱动我只是有一点点的了解,这个相对难一点,我想以后再慢慢啃。

    这两个月,除了吃饭睡觉,我几乎都在学习。因为我知道几乎没有基础,比别人差劲,我只能坚持努力着,我不能放弃,我必要要靠自己来养活自己,必须学好这门技术,同时我不懂的就问,这里真的很感谢他们的技术客服对我的任何问题都是耐心的解答,每天都我几乎都有好几个问题问他们,然后我就把不懂的问题总结记下来,这样慢慢积累了一段时间,我发现自己真的有点入门了。

   最后的一个月,我就去看关于实践部分的内容,了解嵌入式项目具体的开发流程,需要什么样的知识,我就开始准备这方面的知识,也就是学习这方面的视频,同时他们建议我去找了找一些嵌入式面试的题目,为自己以后找工作做准备。我就到网上找了很多嵌入式的题目,把他们理解的记下来,这样差不多准备了20天左右

    我觉得自己差不多入门了,会做一些简单的东西了。我就想去找工作看看,于是我就到51job疯狂的投简历,因为我学历的问题,专科没有毕业,说真的,大公司没有人会要我,所以我投的都是民营的小公司,我希望自己的努力有所回报。没有想过几天过后,就有面试了,但是第一次面试我失败了,虽然我自认为笔试很好,因为我之前做了准备,但是他们的要求比较严格,需要有一年的项目经验,所以我没有被选中。

    后来陆续面试了几家公司,终于功夫不负有心人。我终于面试上的,是在闵行的一家民营的企业,公司规模比较小,我的职务是嵌入式linux应用开发,做安防产品的应用的。我想我也比较幸运,经理很看重我的努力,就决定录用我,开的工资是3500一个月,虽然我知道在上海3500只能过温饱的生活,但是我想我足够了。我至少不用每天都要靠父母养,我自己也能养活自己的。我想只要我继续努力,我工资一定会翻倍的。

    把本文写出来,希望能让和我一样的没有基础的朋友有信心,其实我们没有必要自卑,我们不比别人笨,只要我们肯努力,我们一样会成功。

   最后祝愿所有想学嵌入式的朋友更早的入门!

最近很多朋友都在问,如何学习嵌入式,作为嵌入式的老鸟,我想我可以做一些唠叨,嵌入式的入门门槛稍微高一点,但是再高的城墙也是小砖头筑起来的,所以没有必要因为门槛高就觉得很困难,一步一个脚印,贵在坚持就可以了。
   学习嵌入式,该学习什么基本的知识呢?
   首先C语言,这个是毋庸置疑的,不管是做嵌入式软件还是硬件开发的人员,对C语言的掌握这个是必需的,特别是对于以后致力于嵌入式软件开发的人,现在绝大部分都是用C语言,你说不掌握它可以吗?至于如何学习C语言,我想这些基础的知识每个人都有自己的方法,关键要去学习,看书也好,网上找些视频看也好。很多人会问,C语言要学到怎么样,我觉得这没有标准的答案。我想至少你在明白了一些基础的概念后,就该写代码了,动手才是最重要的,当你动手了,遇到问题了,再反过来学习,反过来查查课本,那时的收获就不是你死看书能得到的。
   其次,应该对操作系统有所了解,这对你对硬件和软件的理解,绝对有很大的帮助。应该把系统的管理理解一下,比如进程、线程,系统如何来分配资源的,系统如何来管理硬件的,当然,不是看书就能把这些理解透,如果不是一时能理解,没关系,多看看,结合以后的项目经验,会有更好的理解的。
   还有应该学习下linux或者wince下的编程,这些对以后做应用的编程很有帮助,当然,如果做手机的话,那可以学习MTK、塞班、Android等操作系统,Android是以后发展的趋势,现在很热门,Android也是基于linux系统封装的,所以建议先学习下linux。
   还有,应该学习下单片机或者ARM或者MIPS,很多人说我没有单片机的经验,直接学ARM可以吗?我觉得那完全没有问题的,当然如果你学习过单片机,那最好不过了,以后学习ARM就更简单了。
  最后如果你把以上的知识都有所了解后,就该去阅读阅读一些优秀的代码,比如结合arm芯片手册学习去学习下UBOOT的源代码,了解下最小的系统开发,那对你整个嵌入式开发的非常有帮助的,可以的话,还可以学习下linux的源代码,当然如果你直接阅读2.6的代码,我想你会很痛苦的,可以先看看linux 代码早期的版本,比如0.12 的代码等等,麻雀虽小,五脏俱全,如果你全看完了,那我想你就是一名很成功的嵌入式工程师。
   至于上面说的知识如何学习呢?每个人都应该去找自己最好的方法,所谓的最好的方法就是最适合自己的方法。很多人看不进书,那就去看看视频吧。视频也应该要选择,不是随便看看,应该要有所选择,有所挑选。我也是这样一路走过来的,不过我这人比较懒,我看不进书,一看书我就想睡觉,所以这几年我都是看视频过来的,现在也算学有所成,但也不敢说是高手吧。
   我在网上看到,有人把自己学习嵌入式的视频总结出来,嵌入式系列实践和视频教程,大家可以看看网址http://www.embedstudy.com/viewnews-8701 我仔细看了觉得很不错,我本来也想整理下,可是奈何我自己的电脑硬盘空间才40G,没有办法,时间也是不够,心有余而力不足,我不是在帮他做广告,虽然要花钱,我觉得算不错,至少自己不用去整理和花大量的时间去找资源,当然如果网上有的下,你网速和硬盘都够的话,我建议大家自己网上下也好。想想我自己该开始学的时候,那时视频资源少之又少,我买书和买视频至少花了几千块,但是我觉得那很值,至少我现在赚回来了很多知识。
  
  最后,希望这篇文章对热爱嵌入式,想致力于嵌入式开发的朋友有所帮助。送给大家一句简单而又朴素的话,坚持就是胜利,贵在坚持!
  

怎样从零基础学习嵌入式

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

此外,在时间允许的情况下,对于零基础学习嵌入式建议大家看一下有关计算机操作系统工作原理以及计算机组成原理等方面的专业书籍。对于进程、线程、任务调度、总线、I/O等基本概念及工作原理有一个初步的了解和掌握,这部分知识的准备对于后续更好地学习嵌入式Linux系统开发将会起到很好的帮助作用。

下面就介绍一下Linux的学习:

一、从零基础开始:
  常常有些大学生在Linux论坛问一些问题,不过,其中大多数的问题都是很基础的。例如:为什么我使用一个命令的时候,系统告诉我找不到该目录,我要如何限制使用者的权限等问题,这些
  
  问题其实都不是很难的,只要了解了Linux的基础之后,应该就可以很轻易的解决掉这方面的问题。而大多数同学们常常一接触Linux就是希望构架网站,根本没有想到要先了解一下Linux的基
  
  础;
  
  二、Linux命令是必须学习:
  虽然Linux桌面应用发展很快,但是命令在Linux中依然有很强的生命力。Linux是一个命令行组成的操作系统,精髓在命令行,无论图形界面发展到什么水平这个原理是不会变的,Linux命令
  
  有许多强大的功能:从简的磁盘操作、文件存取、到进行复杂的多媒体图象和流媒体文件的制作。举一个例子linux的常用命令find,察看man文档,初学者一定会觉得太复杂而不原意用,但是你
  
  一旦学会就爱不释手.它的功能实在太强了,在配合exec参数或者通过管道重定向到xargs命令和grep命令,可以完成非常复杂的操作,如果同样的操作用图形界面的工具来完成,恐怕要多花十几陪的时间. 不同版本的Linux命令数量不一样.
  三、选择一本好的工具书:
  工具书对于学习者而言是相当重要的。一本错误观念的工具书却会让新手整个误入歧途。目前国内关于Linux的书籍有很多不过精品的不多,千锋强烈建议阅读影印本的“O’Reilly原版Linux图书;
  
  四、选择一个适合你的Linux发行版本
  目前全球有超过1百多个Linux发行版本,在国内也能找到十几个常见版本。如何选择请根据你的需求和能力,Redhat Linux 和ebian Linux是网络管理员的理想选择。对于英语不是很好的读者红旗Linux、中标Linux这些中文版本比较适合。现在一些Linux网站有一些Linux版本的免费下载,同学们也可以到武汉千锋智能科技有限公司官方网站下载;
  
  五、养成在命令行下工作:
  一定要养成在命令行下工作的习惯,要知道X-window只是运行在命令行模式下的一个应用程序。在命令行下学习虽然一开始进度较慢,但是熟悉后,您未来的学习之路将是以指数增加的方式增长的。从网管员来说,命令行实际上就是规则,它总是有效的,同时也是灵活的。即使是通过一条缓慢的调制解调器线路,它也能操纵几千公里以外地远程系统。
  
  六、选择一个适合你的Linux社区:
  随着Linux应用的扩展,出现了不少Linux社区。其中有一些非常优秀的社区:http://www.ixpub.net(国内最高水平GNU站点)、 http://www.chinaunix.net/ (中国最大的Unix技术社区),但是这几个论坛往往是Linux高手的舞台,如果在探讨高级技巧的论坛张贴非常初级的问题经常会没有结果。推荐适于初学者的Linux社区:Linux伊甸园 http://www.linuxeden.com/,优秀linux+oracle技术门户 http://www.ixdba.net,中国Linux公社 http://www.linuxfans.org/nuke/index.php
  
  七、勤于实践:
  要增加自己Linux 的技能,只有通过实践来实现了。所以,赶快找一部计算机,赶快安装一个 Linux 发行版本,然后进入精彩的Linux世界。相信对于你自己的 Linux 能力必然大有斩获。
  七、如何得到联机帮助:
  和私有操作系统不同,各个Linux的发行版本的技术支持时间都较短,这对于Linux初学者是往往不够的。其实当你安装了一个完整的Linux系统后其中已经包含了一个强大的帮助,只是可能你还没有发现和使用它们的技巧。
  1. 主流Linux发行版都自带非常详细的文档(包括手册页和FAQ),从系统安装到系统安全,针对不同层次的人的详尽文档,仔细阅读文档后40%问题都可在此解决。
  2. 查阅经典工具书和Howto,特别是Howto是全球数以万计的Linux、Unix的经验总结非常有参考价值通常40%的问题同样可以解决。
  
  八、在Linux论坛获取帮助:
  如果上面的措施没有解决问题,此时你就需要Linux社区的帮助了。Linux的使用者一般都是专业人士,他们有着很好的电脑背景且愿意协助他人,Linux高手更具有鼓励新手的文化精神。如何在Linux社区获得帮助,需要说明的是你要有周全的思考,准备好你的问题,不要草率的发问,否则只会得到到草率的回答或者根本得不到任何答案。越表现出在寻求帮助前为解决问题付出的努力,你越能得到实质性的帮助。最好先搜寻一下论坛是否有您需要的文章。这样可以获得事半功倍的效果。
  
  九.用Unix思维学习Linux:
  Linux是参照Unix思想设计的,理解掌握Linux必须按照Unix思维来进行。思想性的转变比暂时性的技术提高更有用,因为他能帮助你加快学习速度。
  
  十.学习专业英文:
  如果你想深入学习Linux,看不懂因为文档实在是太难了。写的最好的,最全面的文档都是英语写的,最先发布的技术信息也都是用英语写的。即便是非英语国家的人发布技术文档,也都首先翻译成英语在国际学术杂志和网络上发表。安装一个新的软件时先看README,再看INSTALL然后看FAQ,最后才动手安装,这样遇到问题就知道为什么。如果说明文档不看,结果出了问题再去论坛来找答案反而浪费时间。
  
  十一.Linux学习的路线图:
  1.掌握至少50个以上的常用命令。
  2.熟悉Gnome/KDE等X-windows桌面环境操作。
  3.掌握.tgz、.rpm等软件包的常用安装方法
  4.学习添加外设,安装设备驱动程序(比如网卡)
  5.熟悉Grub/Lilo引导器及简单的修复操作。
  6.熟悉Linux文件系统和目录结构。
  7.掌握vi,gcc,gdb等常用编辑器,编译器,调试器。
  8.理解shell别名、管道、I/O重定向、输入和输出以及shell脚本编程。
  9.学习Linux环境下的组网。
  
  十二.寻找专业的Linux培训机构:
  选择一家专业的Linux教育培训机构的确可以达到事半功倍的效果。不仅能大大缩短学员自行摸索和自我积累的时间,而且能帮助学员在更高的起点上超越,从而在“前人”的肩膀上未雨绸缪,少走弯路。

基于ARM的嵌入式学习,技术基础是关键。

首先学习相关的基本硬件知识,例如一般处理器及接口电路(Flash/SRAM/SDRAM/EEPROM/Cache、UART、Timer、GPIO、Watch dog、USB等)等硬件知识,至少了解一种CPU的体系结构;至少了解一种操作系统(中断、优先级、任务通信、同步等)。

对于应用编程,要掌握C、C++和汇编语言程序设计(至少会C语言),对处理器的体系结构、组织结构、指令结构、编程模式和应用编程要有了解。在此基础上,还需要在实际工程实践中掌握一定的实际项目开发技能。

其次,嵌入式学习要有一个较好的嵌入式开发教学平台,也就是开发板。

再次,必须对基本内容有深入的了解。在处理器指令系统和应用编程学习的基础上,重点是加强外围功能接口应用的学习。主要是人机接口和通信接口。如:USB接口、AD转换、GPIO、以太网、IIC串行数据通信、音频接口和触摸屏知识。

最后,熟悉至少一种嵌入式操作系统,熟练裁剪、定制及移植、设备驱动程序和应用程序的开发。

嵌入式学习步骤

C语言学习

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

此外,在时间允许的情况下,对于嵌入式学习步骤很重要的一点是建议大家看一下有关计算机操作系统工作原理以及计算机组成原理等方面的专业书籍。对于进程、线程、任务调度、总线、I/O等基本概念及工作原理有一个初步的了解和掌握,这部分知识的准备对于后续更好地学习嵌入式Linux系统开发将会起到很好的帮助作用。

Linux的学习

从零基础开始:

  常常有些大学生在Linux论坛问一些问题,不过,其中大多数的问题都是很基础的。例如:为什么我使用一个命令的时候,系统告诉我找不到该目录,我要如何限制使用者的权限等问题,这些问题其实都不是很难的,只要了解了Linux的基础之后,应该就可以很轻易的解决掉这方面的问题。而大多数同学们常常一接触Linux就是希望构架网站,根本没有想到要先了解一下Linux的基础;

  虽然Linux桌面应用发展很快,但是命令在Linux中依然有很强的生命力。是学习嵌入式很重要的步骤之一,Linux是一个命令行组成的操作系统,精髓在命令行,无论图形界面发展到什么水平这个原理是不会变的,Linux命令有许多强大的功能:从简的磁盘操作、文件存取、到进行复杂的多媒体图象和流媒体文件的制作。举一个例子linux的常用命令find,察看man文档,初学者一定会觉得太复杂而不原意用,但是你一旦学会就爱不释手.它的功能实在太强了,在配合exec参数或者通过管道重定向到xargs命令和grep命令,可以完成非常复杂的操作,如果同样的操作用图形界面的工具来完成,恐怕要多花十几陪的时间. 不同版本的Linux命令数量不一样.  

工具书的选择

  工具书对于学习者而言是相当重要的。一本错误观念的工具书却会让新手整个误入歧途。目前国内关于Linux的书籍有很多不过精品的不多,千锋强烈建议阅读影印本的“O’Reilly原版Linux图书;

要养成在命令行下工作的习惯

  一定要养成在命令行下工作的习惯,要知道X-window只是运行在命令行模式下的一个应用程序。在命令行下学习虽然一开始进度较慢,但是熟悉后,您未来的学习之路将是以指数增加的方式增长的。从网管员来说,命令行实际上就是规则,它总是有效的,同时也是灵活的。即使是通过一条缓慢的调制解调器线路,它也能操纵几千公里以外地远程系统。

  目前全球有超过1百多个Linux发行版本,在国内也能找到十几个常见版本。如何选择请根据你的需求和能力,Redhat Linux 和ebian Linux是网络管理员的理想选择。对于英语不是很好的读者红旗Linux、中标Linux这些中文版本比较适合。现在一些Linux网站有一些Linux版本的免费下载,同学们也可以到武汉千锋智能科技有限公司官方网站下载;

选择好的Linux学习社区

  随着Linux应用的扩展,出现了不少Linux社区。其中有一些非常优秀的社区:http://www.ixpub.net(国内最高水平GNU站点)、 http://www.chinaunix.net/ (中国最大的Unix技术社区),但是这几个论坛往往是Linux高手的舞台,如果在探讨高级技巧的论坛张贴非常初级的问题经常会没有结果。推荐适于初学者的Linux社区:Linux伊甸园 http://www.linuxeden.com/,优秀linux+oracle技术门户 http://www.ixdba.net,中国Linux公社 http://www.linuxfans.org/nuke/index.php

勤于实践

  要增加自己Linux 的技能,只有通过实践来实现了。所以,赶快找一部计算机,赶快安装一个 Linux 发行版本,然后进入精彩的Linux世界。相信对于你自己的 Linux 能力必然大有斩获。

选择适合的操作系统

  和私有操作系统不同,各个Linux的发行版本的技术支持时间都较短,这对于Linux初学者是往往不够的。其实当你安装了一个完整的Linux系统后其中已经包含了一个强大的帮助,只是可能你还没有发现和使用它们的技巧。

  1. 主流Linux发行版都自带非常详细的文档(包括手册页和FAQ),从系统安装到系统安全,针对不同层次的人的详尽文档,仔细阅读文档后40%问题都可在此解决。
 

  2. 查阅经典工具书和Howto,特别是Howto是全球数以万计的Linux、Unix的经验总结非常有参考价值通常40%的问题同样可以解决。

用Unix思维学习Linux

  Linux是参照Unix思想设计的,理解掌握Linux必须按照Unix思维来进行。思想性的转变比暂时性的技术提高更有用,因为他能帮助你加快学习速度。

学习专业英文

  如果你想深入学习Linux,看不懂因为文档实在是太难了。写的最好的,最全面的文档都是英语写的,最先发布的技术信息也都是用英语写的。即便是非英语国家的人发布技术文档,也都首先翻译成英语在国际学术杂志和网络上发表。安装一个新的软件时先看README,再看INSTALL然后看FAQ,最后才动手安装,这样遇到问题就知道为什么。如果说明文档不看,结果出了问题再去论坛来找答案反而浪费时间。

Linux学习的路线图

1.掌握至少50个以上的常用命令。

2.熟悉Gnome/KDE等X-windows桌面环境操作。

3.掌握.tgz、.rpm等软件包的常用安装方法

4.学习添加外设,安装设备驱动程序(比如网卡)

5.熟悉Grub/Lilo引导器及简单的修复操作。

6.熟悉Linux文件系统和目录结构。

7.掌握vi,gcc,gdb等常用编辑器,编译器,调试器。

8.理解shell别名、管道、I/O重定向、输入和输出以及shell脚本编程。

9.学习Linux环境下的组网。

选择培训机构

  选择一家专业的Linux教育培训机构的确可以达到事半功倍的效果。不仅能大大缩短学员自行摸索和自我积累的时间,而且能帮助学员在更高的起点上超越,从而在“前人”的肩膀上未雨绸缪,少走弯路。

ARM的学习

  基于ARM的嵌入式学习,技术基础是关键。

  首先学习相关的基本硬件知识,例如一般处理器及接口电路(Flash/SRAM/SDRAM/EEPROM/Cache、UART、Timer、GPIO、Watch dog、USB等)等硬件知识,至少了解一种CPU的体系结构;至少了解一种操作系统(中断、优先级、任务通信、同步等)。

  对于应用编程,要掌握C、C++和汇编语言程序设计(至少会C语言),对处理器的体系结构、组织结构、指令结构、编程模式和应用编程要有了解。在此基础上,还需要在实际工程实践中掌握一定的实际项目开发技能。

  其次,嵌入式学习要有一个较好的嵌入式开发教学平台,也就是开发板。

  再次,必须对基本内容有深入的了解。在处理器指令系统和应用编程学习的基础上,重点是加强外围功能接口应用的学习。主要是人机接口和通信接口。如:USB接口、AD转换、GPIO、以太网、IIC串行数据通信、音频接口和触摸屏知识。

  最后,熟悉至少一种嵌入式操作系统,熟练裁剪、定制及移植、设备驱动程序和应用程序的开发。

嵌入式学习指导

首页 > 嵌入式学习资料 > 嵌入式学习指导

如何学习嵌入式开发

概述:

实践当然是最锻炼人的方式,但是我想在校生很少有这样的机会,别说本科生,硕士生也未必有条件。所以我想学习嵌入式要从个人的知识背景和现实条件出发,订立合适的阶段目标,在允许的条件下多动手多思考。


    一般情况下硬件设备是比较短缺的,所以可以在软件方面和嵌入式系统开发模式上下功夫。提醒大家一点,嵌入式系统开发设计的内容很多,所以大家不要乱,在了解嵌入式系统开发的体系结构后,一步一步的下手,最容易上手的是Linux下的C,比如uC/OS II(有开放源代码),虽然可能无法在硬件上仿真,但也不必着急。无论对初学者还是自以为是高手的人来说,编程水平(这可不受硬件条件限制)绝对是没有止境的。而锻炼编程水平需要的条件只是一台PC而已,条件比较容易具备。有了较高的编程水平(嵌入式主要是C,当然OO的几种语言c++,java是发展趋势),等到有机会的时候及时补充硬件知识,会很快成为高手的。

嵌入式的入门门槛稍微高一点,但是再高的城墙也是小砖头筑起来的,所以没有必要因为门槛高就觉得很困难,一步一个脚印,贵在坚持就可以了。

学习嵌入式,该学习什么基本的知识呢?

1C开发经验
条件:Linux


方法:随便,主要是掌握ANSI C编程(不包括gtk,qt等图形可视化开发)

首先C语言,这个是毋庸置疑的,不管是做嵌入式软件还是硬件开发的人员,对C语言的掌握这个是必需的,特别是对于以后致力于嵌入式软件开发的人,现在绝大部分都是用C语言,你说不掌握它可以吗?至于如何学习C语言,我想这些基础的知识每个人都有自己的方法,关键要去学习,看书也好,网上找些视频看也好。很多人会问,C语言要学到怎么样,我觉得这没有标准的答案。我想至少你在明白了一些基础的概念后,就该写代码了,动手才是最重要的,当你动手了,遇到问题了,再反过来学习,反过来查查课本,那时的收获就不是你死看书能得到的。

2、网络、操作系统、体系结构


条件:Linux,各种书,算法、例程。


方法:通过C编程实现简单的网络等知识的算法和过程。

  

开发者应该对操作系统有所了解,这对你对硬件和软件的理解,绝对有很大的帮助。应该把系统的管理理解一下,比如进程、线程,系统如何来分配资源的,系统如何来管理硬件的,当然,不是看书就能把这些理解透,如果不是一时能理解,没关系,多看看,结合以后的项目经验,会有更好的理解的。

3、嵌入式系统概念


条件:各个嵌入式网站,讨论组,书籍


方法:少提问(尤其是等着天上掉馅饼,这主要是防止增长惰性,也解决不了实际问题),多思考。

还有应该学习嵌入式系统,如linux或者wince下的编程,这些对以后做应用的编程很有帮助,当然,如果做手机的话,那可以学习MTK、塞班、Android等操作系统,Android是以后发展的趋势,现在很热门,Android也是基于linux系统封装的,所以建议先学习下linux。

4、嵌入式开发实践

条件:各种嵌入式系统开发工具的demo版,包括编译器,仿真器。可以找高手们要,也可以下载。


方法:这里有两个分支,一个是基于MCU/MDSP的嵌入式系统开发,一个是象Palm OS,WinCE,uC/OS II等RTOS下的应用软件开发。对硬件感兴趣,想成为真正高手的由第一个分支入手,以后进入第二个分支;如果十分厌烦硬件,只想停留在软件开发上的,可以只由第二个分支入手,以后就和pc上的开发没有什么本质上的区别了,找份不错的工作应该没问题,可以不用进行下面的步骤了,感兴趣可以参考第6条。

还有,应该学习下单片机或者ARM或者MIPS,很多人说我没有单片机的经验,直接学ARM可以吗?我觉得那完全没有问题的,当然如果你学习过单片机,那最好不过了,以后学习ARM就更简单了。

5、硬件开发


条件:各种嵌入式芯片、存储器等电路器件,protel99等电路设计软件,电路板制作。


方法:这时候该有开发条件了,最起码是51系列,这个比较方便。电路的设计内容较多,不过看起来吓人,实际上比软件要简单的多。只要下功夫,实践会告诉你一切。

最后如果你把以上的知识都有所了解后,就该去阅读阅读一些优秀的代码,比如结合arm芯片手册学习去学习下UBOOT的源代码,了解下最小的系统开发,那对你整个嵌入式开发的非常有帮助的,可以的话,还可以学习下linux的源代码,当然如果你直接阅读2.6的代码,我想你会很痛苦的,可以先看看linux 代码早期的版本,比如0.12 的代码等等,麻雀虽小,五脏俱全,如果你全看完了,那我想你就是一名很成功的嵌入式工程师。

6、硬件工程/软件工程/项目管理


条件: 各个芯片详细资料和使用经验,软件工程知识,项目管理知识,培训,大型项目


参与经验方法:已经是高手了,但是学无止境,沾沾自喜于已有的知识是致命的。那个下一步。你该是管

嵌入式学习指导

首页 > 嵌入式学习资料 > 嵌入式学习指导

ARM与嵌入式linux的入门建议

时间:20##年02月09日 10:28:30 来源:中国IT实验室 作者:chen

   由于很多人总问这个问题,所以这里做一个总结文档供大家参考。这里必须先说明,以下的步骤都是针对Linux系统的,并不面向WinCE。也许你会注意到,现在做嵌入式的人中,做linux研究的人远比做WinCE的人多,很多产家提供的资料也是以linux为主。我一直很难理解,其实WinCE的界面比linux的界面好看多了,使用起来也很方便,更为重要的是,WinCE的开发和Windows下的开发基本一样,学起来简单得多,但是学linux或者使用linux做嵌入式的人就是远比WinCE多。在和很多工作的人交流时我了解到,他们公司从没考虑使用WinCE,因为成本高,都是使用linux进行开发。我读研究生的的实验室中也没有使用WinCE的,大都研究linux,也有少部分项目使用vxwork,但是就没有听说过使用WinCE的,原因就是开源!当然现在WinCE6.0听说也开源,不过在成本和资源上linux已经有了无人能挡的优势。与此相对应的是,越来越多的电子厂商已经开始使用linux开发产品。举个例子,Google近期开发的智能手机操作系统Android其实就是使用linux-2.6.23内核进行改进得到的。

  第一,学习基本的裸机编程。

  对于学硬件的人而言,必须先对硬件的基本使用方法有感性的认识,更必须深刻认识该硬件的控制方式,如果一开始就学linux系统、学移植那么只会马上就陷入一个很深的漩涡。我在刚刚开始学ARM的时候是选择ARM7(主意是当时ARM9还很贵),学ARM7的时候还是保持着学51单片机的思维,使用ADS去编程,第一个实验就是控制led。学过一段时间arm的人都会笑这样很笨,实际上也不是,我倒是觉得有这个过程会好很多,因为无论做多复杂的系统最终都会落实到这些最底层的硬件控制,因此对这些硬件的控制有了感性的认识就好很多了

  学习裸机的编程的同时要好好理解这个硬件的构架、控制原理,这些我称他为理解硬件。所谓的理解硬件就是说,理解这个硬件是怎么组织这么多资源的,这些资源又是怎么由cpu、由编程进行控制的。比如说,s3c2410中有AD转换器,有GPIO(通用IO口),还有nandflash控制器,这些东西都有一些寄存器来控制,这些寄存器都有一个地址,那么这些地址是什么意思?又怎么通过寄存器来控制这些外围设备的运转?还有,norflash内部的每一个单元在这个芯片的内存中都有一个相应的地址单元,那么这些地址与刚刚说的寄存器地址又有什么关系?他们是一样的吗?而与norflash相对应的nandflash内部的储存单元并不是线性排放的,那么s3c2410怎么将nandflash的地址映射在内存空间上进行使用?或者简单地说应该怎么用nandflash?再有,使用ADS进对arm9行编程时都需要使用到一个初始化的汇编文件,这个文件究竟有什么用?他里面的代码是什么意思?不要这个可以吗?

  诸如此类都是对硬件的理解,理解了这些东西就对硬件有很深的理解了,这对以后更深一步的学习将有很大的帮助,如果跳过这一步,我相信越往后学越会觉得迷茫,越觉得这写东西深不可测。因为,你的根基没打好。

  不过先声明一下,本人并没有使用ADS对ARM9进行编程,我是学完ARM7后直接就使用ARM9学linux系统的,因此涉及使用ADS对arm9进行编程的问题我很难回答^_^,自己去研究研究吧。

  对于这部分不久将提供一份教程,这个教程中的例程并不是我为我们所代理的板子写的,是我在我们学院实验室拿的,英培特为他们自己 的实验箱写的,不过很有借鉴意义,可以作为一份有价值的参考。

  第二,使用linux系统进行一些基本的实验。

  在买一套板子的时候一般会提供一些linux的试验例程,好好做一段时间这个吧,这个过程也是很有意义的,也是为进一步的学习积累感性认识,你能想象一个从没有使用过linux系统的人能学好linux的编程吗?好好按照手册上的例程做一做里面的实验,虽然有点娃娃学走路,有点弱智,但是我想很多高手都会经历这个过程。

  在这方面我们深蓝科技目前没有计划提供相应的例程,主要是开发板的提供商会提供很丰富的例程,我们不做重复工作,只提供他们没有的、最有价值的东西给大家。

  第三,研究完整的linux系统的的运行过程。

  所谓完整的linux系统包括哪些部分呢?

  三部分:bootloader、linux kernel(linux内核)、rootfile(根文件系统)。

  那么这3部分是怎么相互协作来构成这个系统的呢?各自有什么用呢?三者有什么联系?怎么联系?系统的执行流程又是怎么样的呢?搞清楚这个问题你对整个系统的运行就很清楚了,对于下一步制作这个linux系统就打下了另一个重要的根基。介绍这方面的资料网上可以挖掘到几吨,自己好好研究吧。

  第四,开始做系统移植。

  上面说到完整的linux有3部分,而且你也知道了他们之间的关系和作用,那么现在你要做的便是自己动手学会制作这些东西。

  当然我不可能叫你编写这些代码,这不实现。事实上这个3者都能在网下载到相应的源代码,但是这个源代码不可能下载编译后就能在你的系统上运行,需要很多的修改,直到他能运行在你的板子上,这个修改的过程就叫移植。在进行移植的过程中你要学的东西很多,要懂的相关知识也很多,等你完成了这个过程你会发现你已经算是一个初出茅庐的高手了。

  在这个过程中如果你很有研究精神的话你必然会想到看源代码。很多书介绍你怎么阅读linux源代码,我不提倡无目的地去看linux源代码,用许三多的话说,这没有意义。等你在做移植的时候你觉得你必须去看源代码时再去找基本好书看看,这里我推荐一本好书倪继利的《linux内核的分析与编程》,这是一本针对linux-2.6.11内核的书,说得很深,建议先提高自己的C语言编程水平再去看。

  至于每个部分的移植网上也可以找到好多吨的资料,自己研究研究吧,不过要提醒的是,很多介绍自己经验的东西都或多或少有所保留,你按照他说的去做总有一些问题,但是他不会告诉你怎么解决,这时就要靠自己,如果自己都靠不住就找我一起研究研究吧,我也不能保证能解决你的问题,因为我未必遇到过你的问题,不过我相信能给你一点建议,也许有助你解决问题。

  这一步的最终目的是,从源代码的官方主页上(都是外国的,悲哀)下载标准的源代码包,然后进行修改,最终运行在板子上。

  盗用阿基米德的一句话:“给我一根网线,我能将linux搞定”。

  第五,研究linux驱动程序的编写。

  移植系统并不是最终的目的,最终的目的是开发产品,做项目,这些都要进行驱动程序的开发。

  Linux的驱动程序可以说是五花八门,linux2.4和linux2.6的编写有相当大的区别,就是同为linux2.6但是不同版本间的驱动程序也有区别,因此编写linux的驱动程序变都不是那么容易的事情,对于最新版本的驱动程序的编写甚至还没有足够的参考资料。那么我的建议就是使用、移植一个不算很新的版本内核,这样到时学驱动的编程就有足够的资料了。

  这部分的推荐书籍可以参考另一篇文章《推荐几本学习嵌入式linux的书籍》。

  第六,研究应用程序的编写。

  做作品做项目除了编写驱动程序,最后还要编写应用程序。现在的趋势是图形应用程序的开发,而图形应用程序中用得最多的还是qt/e函数库。我一直就使用这个函数库来开发自己的应用程序,不过我希望你能使用国产的MiniGUI函数库。盗用周杰伦的广告词就是“支持国产,支持MiniGUI”。MiniGUI的编程比较相似Windows下的VC编程,比较容易上手,效果应该说是相当不错的,我曾使用过来开发arm7的程序。不过MiniGUI最大的不好就是没有像qtopia这样的图形操作平台,这大大限制了他的推广,我曾经幻想过与北京飞漫公司(就是MiniGUI的版权拥有者)合作使用MiniGUI函数库开发像qtopia这样的图形操作平台,不过由于水平有限这只能是幻想了,呵呵。

  完成这一步你基本就学完了嵌入式linux的全部内容了。

  还有一个小小的经验想和大家分享。我在学习嵌入式linux的过程中很少问人,客观原因是身边的老师、同学师兄都没有这方面的高手,主观原因是我不喜欢问人,喜欢自己研究解决问题。这样做有个好处,就是可以提高自己解决问题的能力,因为做这些东西总有很多问题你难以理解,别人也没有这方面的经验,也不是所有问题都有人给你答案,这时必须要自己解决问题,这样,个人的解决问题能力就显得非常关键了。因此我的建议就是一般的问题到网上搜索一下,确实找不到答案了就问问高手,还是不行了就自己去研究,不要一味去等别人帮你解决问题。

  记住,问题是学习的最好机会。

嵌入式Linux开发就业班

相关推荐