嵌入式系统学习方法


现在我们开看一下如果说我们作为一个企业的架构师来说怎么样才能完成整个系统移植的工作呢?


当然在现在这个工作开发中,一般来说公司不可能从头到尾把bootloader功能子系统和内核核心子系统和交叉编译环境和文件系统子系统这四个层次全部做完,因为这样来说时间比较浪费。



嵌入式Linux系统移植要点


根据思维导图拟出小标题为这些大篇内容分段。


我们还是一样,目前先看一下我们嵌入式Linux系统移植要点,也就是要想完成系统移植其实就是四个部分,就是说如果你相当于就是一个从零做起的工程师,想要真正完成一个完完整整的项目其实就是四个部分。


第一个部分


想办法把交叉环境给搭建好,那具体怎么搭建是在我们一会儿的课程会讲的内容。


第二个部分


第一部分完了第二个我们就要想我们还要涉及到系统一上来过后就一定会运行到的一个程序,而这个程序我们也把它取名叫做启动加载也就是bootloader这个功能,那么这个功能其实就有很多种方案的选择,也就是这个地方其实就是个选的概念。也就是你第一个可以向我们之前讲ARM的时候,可以自己做一个很简单的bootloader,但是如果我们想要启动内核可能要复杂一点,那么这个情况下,我们也可以自己去开发,我们有很多项目可以帮我们完成一些相应的工作,也就是说可以节约时间,所以说在bootloader中很多大型项目更多的就是选择。


选一个比较适合项目的启动代码,那选完之后可能我们公司的项目跟选择出来的不太一致所以说我们就还要改,所谓改就是移植。那有了bootloader我们最终的目的是loader,loader内核,而内核一般情况下是开源的,因为我们说Linux就是开源的,如果要移植其他的就去找一些相应的安装包就可以或者是找一些它已经做好的库。


第三个部分


然后kernel 的配置、编译、移植和调试,那么kernel我们拿Linux来说,Linux也是支持的平台特别多,所以在这种情况下我们又有新的问题,我不能把这个内核编的什么平台都支持,因为这样太大了。这样肯定是不现实的,因为这样的内核功能太大众化来了不是太专一的,所以这样对它来说也没有意义。


因为它的内容太大,所以我们又涉及到一个概念就是配置,就白了就是选,选完后还要编译,编完之后还要调试,调试过后在把它写到我们真正的开发板上。但是还是一样kernel做完后并不是就代表完成了。


第四个部分


因为我们说kernel其实只是一个内部的核心概念,但具体给用户的东西还没完,我们实际上还要一个文件系统的概念也就是根文件系统的制作。


所以,总的来说整个系统移植其实就是围绕四个大点来做,一般情况下,一个公司在前两个阶段可能工作量不大,或者是在我们买芯片的时候,可能芯片公司都已经给我们了,而更多的我们要做的是根据我们产品需求我们的内核可能会变。比如说现在很多像家用路由器或智能路由器,那路由器上它可能还想新增加一个功能,比如说它可以远程安防,它安装一个摄像头,而这个摄像头可以监控家里一些事物的变化,那很显然,这个光把别人一个路由器拿来插上摄像头是没有作用的,因为你的路由器并没有摄像头的驱动。我们需要把摄像头的驱动给加进来,所以这样来说产品公司就会设计到内核的二次编译和二次配置,然后把我们根据我们这个业务需求所需要一些硬件的驱动程序给它加载进来或者是配置进来甚至来说是开发出来。


method1.png


然后在这个完成过后当然还涉及到既然有了内部驱动但是又该怎么用,我们还要有相应的应用文件在我们的根文件系统中体现出来,所以说后面两个是在我们学习开发中使用率最高的部分。


前面两个部分要看具体情况,如果说你刚好是芯片公司,那这两个部分刚好就是你的事情。如果是产品公司那后面那个事情应该就是重中之重了。所以整个来说这就是我们嵌入式移植的核心点。那么我们的课程安排其实也是这样来安排的,首先大家来看到我们总共就是分了四个课程,第一个课程我们会给大家把第一个要点就是交叉编译环境给大家讲明白,然后从第二课开始我们就针对bootloader功能子系统,当然我们选了一个叫做uboot这样一个开源项目给大家讲,然后第三章也就是我们内核核心子系统就讲的是Linux操作系统,然后我们来看看Linux操作系统是怎么做的。最后文件系统子系统我们采用的就是有朋至远方来之文件系统的制作,了解文件系统是怎么做出来的。


所以总的来说,我们的课程也是按照以上四节的思路去给大家讲的。下面我们在有了这个框架思想后主要来看一下这个学习方法。



学习思路和方法


根据思维导图拟出小标题为这些大篇内容分段


因为系统移植你如果说它难,可以说非常非常难,说它简单也可以几句话就讲完。所以说这就是它的一个特点,然后我们先简单说一下咱们现在学习的方法,因为很多同学在学到这个课程中都或多或少有一些疑惑,所以我们先还是给大家统一一个思想“先整体后局部,层层推进”就是说你一定要先把整个框架搭建搞清楚过后,然后我们再说每一个具体细节,你不要一上来就先纠结细节,如果你纠结于细节你就会发现你完全陷入整个迷宫中,或者整个泥潭中,根本没有办法在往下去工作了,也就是说不可能在去做更高的驱动,架构师等等。所以一定要先有整体,先整体然后在局部,这个整体我们讲课方式一般都是这样“如何编译 ---> 如何添加命令或功能 ---> 如何自定义自己的开发板”也就是说每个子系统是如何编译,这是最简单的但是一定要记住,然后我们可不可以在基本情况下添加一些东西或者说是改一些东西,最后是如何跟我们开发板的具体硬件连接在一起,所以说具体思路是一种层层推进的感觉,所以说有先易后难的感觉。


以上就是我们总体的教学方案。如果有同学不是很理解为什么要这样做,我举一个很简单的例子,之前我给大家说过就是说我们的Linux内核,比如我们用3.0.8这个内核来举例,原来有个人做个一个统计,也就是一个人每一秒钟读一行代码,如果想把这个3.0.8这个内核里的代码全部读完至少需要两年时间,而且还只是读完,还没有理解,因为一秒看一行你根本不知道在说什么,所以没有理解代码之间的层次关系。所以说我们对于任何一个子系统,可以这样说每一个子系统它的复制程度少则一个月多则半年或者更多时间你才去理解到,所以对于这个部分我们希望大家学习的时候一定要先掌握整体。每个子系统都具有一个复杂的层次关系。需要首先掌握相关子系统的藏宝图,有了这个地图,去探索他就有了方向。


所谓的整体就是把子系统的地图找到,就是说我们在学这个概念的时候,你第一个需要学这个框架的地图,有了这个地图,以后即使你们现在工作或者去做一个新的产品,那么同样的根据这个地图一样可以找到相应的入口,这样才能做相应的开发。 如果说你连这个地图都不知道就别想二次开发了,甚至来说你只是依葫芦画瓢按照别人的命令去敲一遍而已,没有任何意义。


所以说这是我们的一个总体学习方法和思路,也希望大家能够理解到然后我们通过思路把这个系统移植的每个点把它掌握到。



【本文由麦子学院独家原创,转载请注明出处并保留原文链接】

logo
© 2012-2016 www.maiziedu.com
蜀ICP备13014270号-4 Version 5.0.0 release20160127

免费领取价值1888元求职宝典!

客服热线 400-862-8862

回到顶部