这几天,开始弄MIZ702N开发板的linux系统移植部分,发现不管是uboot还是linux内核还是文件系统的移植都还是基本上保持着我当初学习嵌入式时的步骤和方法,还是一样的“配方”,还是一样的套路,但是我却完全高兴不起来,因为这意味着我无法高效而又可控的进行我的项目。
Linux系统的移植流程并不复杂,但是我一直都觉得它是个很烦人的步骤,虽然都是一样的套路。它的烦人首先在于它依赖的东西太多了,而这些依赖的资源和工具有很多往往是硬件供应商定制而不太通用的东西。为了快速进行项目,我们大多先照着硬件供应商给定的源码工具和实例来做,但即使这样,你也许仍然会遇到不少这样或者那样的问题,更糟糕的是你解决的这些问题并不能给你的下次开发带来多少好处,换句话说就是你能够能够通过本次解决的问题让你下次开发时更有经验,但是你不能保证下次开发时就不会遇到问题。所以对嵌入式开发者来说,这看似固定流程化的操作,但是你却不得不一次一次面对问题丛生的过程。
其次是它的内部的复杂性,很多时候我们仅仅靠硬件供应商给我们提供的资源是远远不够的,我们的项目可能需要更多自定制话的东西,这时候最可靠的办法就是去阅读源码了:uboot、内核源码的文件结构,启动的流程,从源码中寻找是最可靠的。但是这中间要花费的时间和精力实在是太大了。当然通过源码的学习得到的知识是通用的,因为像uboot、linux内核这些稳定后主要的主要的结构就不会经常变化了,学到后就是自己的。只是如果不是专门以linxu移植为产品的公司的话,linux移植在实际项目中顶多就是一个小小的中间过程,而在这个上面费很长的时间实在是有点轻重倒置。
linux移植仅仅是嵌入式开发的一个缩影,代表这嵌入式软件开发整体复杂而低效开发的开发技术水平。当然这是有客观原因的,由于嵌入式领域与生俱来的多样性,导致它的开发本来就很难变得简洁统一。步入嵌入式领域,开发者就不得不陷入各种硬件平台和各种软件代码相互依赖的泥潭中,无法很好的集中精力处理核心的事情。
想想从我学习起到现在已经有5年的时间了,这五年里各种技术不断的更迭,新的开发框架不断涌现,但是嵌入式软件开发技术似乎仍然停留在5年前,也许是更久的水平。我可以这样理解:一门技术不怎么改变,要不就是已经完善得不需要做什么修改了,要不就是这个领域已经没有了创新,停止了进步,显然我不认为嵌入式软件开发技术是前者。