<sup id="oewps"><pre id="oewps"><sub id="oewps"></sub></pre></sup>
    <div id="oewps"></div>

      <div id="oewps"><ol id="oewps"></ol></div>
      查看: 2195|回复: 0
      打印 上一主题 下一主题

      [提问] 初学者福音:ARM与嵌入式Linux的入门建议 [复制链接]

      xyd2018 (离线)
      积分
      1499
      帖子
      300
      跳转到指定楼层
      楼主
      发表于 2019-3-16 10:46:40 |只看该作者 |倒序浏览
      也许你会注意到,现在做嵌入式的人中,做linux研究的人远比做WinCE的人多,很多产家提供的资料也是以linux为主。我一直很难理解,其实WinCE的界面比linux的界面好看多了,使用起来也很方便,更为重要的是,WinCE的开发和Windows下的开发基本一样,学起来简单得多,但是学linux或者使用linux做嵌入式的人就是远比WinCE多。在和很多工作的人交流时我了解到,他们公司?#29992;?#32771;虑使用WinCE,因为成本高,都是使用linux进行开发。我读研究生的的实验室中也没有使用WinCE的,大都研究linux,也有少部分项目使用vxwork,但是就没有听?#20498;?#20351;用WinCE的,原因就是开源!?#27604;?#29616;在WinCE6.0听说也开源,?#36824;?#22312;成本和资源上linux已经有了无人能挡的优势。与此相?#26434;?#30340;是,越来越多的电子厂商已经开始使用linux开发产品。举个例子,Google开发的智能手机操作系统Android其实就是使用linux-2.6.23内核进行改进得到的。

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

      所谓的理解硬件就是说,理解这个硬件是怎么组织这么多资源的,这些资源又是怎?#20174;蒫pu、由编程进行控制的。比如说,s3c2410中有AD转换器,有GPIO(通用IO口),还有nandflash控制器,这些东西?#21152;?#19968;些寄存器来控制,这些寄存器?#21152;?#19968;个地址,那么这些地址是什么意思?又怎么通过寄存器来控制这些外围设备的运转?还有,norflash内部的每一个单元在这个芯片的内存中?#21152;?#19968;个相应的地址单元,那么这些地址与刚刚说的寄存器地址又有什么关系?他们是一样的吗?而与norflash相?#26434;?#30340;nandflash内部的储存单元并不是线性排放的,那么s3c2410怎么将nandflash的地址?#25104;?#22312;内存空间上进行使用?或者简单地说应该怎么用nandflash?再有,使用ADS进对arm9行编程时都需要使用到一个初始化的汇编文件,这个文件究竟有什么用?他里面的代码是什么意思?不要这个可以吗?
      诸如此类都?#23884;杂?#20214;的理解,理解了这些东西就?#26434;?#20214;有很深的理解了,这对以后更深一步的学习将有很大的帮助,如果跳过这一步,我相信越往后学越会觉得迷茫,越觉得这写东西深不可测。因为,你的根基没打好。

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

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

      第二、使用linux系统进行一些基本的实验
      在买一套板子的时候一般会提供一些linux的试验例程,好好做一?#38382;?#38388;这个吧,这个过程也是很有意义的,也是为进一步的学习积累?#34892;?#35748;识,你能想象一个?#29992;?#26377;使用过linux系统的人能学好linux的编程吗?好好按照手册上的例程做一做里面的实验,虽然有点娃娃学走路,有点弱智,但是我想很多高手都会经历这个过程。

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

      第三、研究完整的linux系统的的运行过程
      所谓完整的linux系统包括哪些部分呢?

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

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

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

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

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

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

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

      盗用阿基米德的一句话:?#26696;?#25105;一根网线,我能将linux搞定”。

      第五、研究linux驱动程序的编写
      移植系统并不是最终的目的,最终的目的是开发产品,做项目,这些?#23478;?#36827;行驱动程序的开发。

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

      第六、研究应用程序的编写
      做作品做项目除了编写驱动程序,最后还要编写应用程序。现在的趋势是图形应用程序的开发,而图形应用程序中用得最多的还是qt/e函数库。我一直就使用这个函数库来开发自己的应用程序,?#36824;?#25105;希望你能使用国产的MiniGUI函数库。盗用周杰伦的广告?#31034;?#26159;“支持国产,支持MiniGUI”。MiniGUI的编程比较相似Windows下的VC编程,比?#20808;?#26131;上手,效果应该说是相当不错的,?#20197;?#20351;用过来开发arm7的程序。?#36824;齅iniGUI最大的不好就是没有像qtopia这样的图形操作?#25945;ǎ?#36825;大大限制了他的推广,?#20197;?#32463;幻想过与?#26412;?#39134;漫公司(就是MiniGUI的版权拥有者)合作使用MiniGUI函数库开发像qtopia这样的图形操作?#25945;ǎ还?#30001;于水?#25509;?#38480;这只能是幻想了,呵呵。

      完成这一步你基本就学完了嵌入式linux的全部内容了。   
      还有一个小小的经验想和大家分享。我在学习嵌入式linux的过程中很少问人,客观原因是身边的老师、同学师兄都没有这方面的高手,主观原因是?#20063;?#21916;欢问人,喜欢自己研究解决问题。这样做有个好处,就是可以提高自己解决问题的能力,因为做这些东西总有很多问题你难以理解,别人也没有这方面的经验,也不是所有问题?#21152;?#20154;给你答?#31119;?#36825;时必须要自己解决问题,这样,个人的解决问题能力就显得非常关键了。因此我的建议就是一般的问题到网上搜索一下,确实?#20063;?#21040;答案了就问问高手,还是不行了就自己去研究,不要一?#24230;?#31561;别人帮你解决问题。
      记住,问题是学习的最好机会。免费试听C语言、电子、PCBSTM32、Linux、FPGA、Python等。想学习的你和我联系预约就可以免费听课了宋工Q3/5/2/4/6/5/9/0/8/8   Tel/WX:1/7/3/1/7/9/5/1/9/0/8



      您需要登录后才可以发表评论 登录 | 立即注册

      关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
      电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
      回顶部
      11选5出号精准规律
      <sup id="oewps"><pre id="oewps"><sub id="oewps"></sub></pre></sup>
      <div id="oewps"></div>

        <div id="oewps"><ol id="oewps"></ol></div>
        <sup id="oewps"><pre id="oewps"><sub id="oewps"></sub></pre></sup>
        <div id="oewps"></div>

          <div id="oewps"><ol id="oewps"></ol></div>