在开始讲解移植工作的开展之前,首先讲一下移植工作的几个大的方面——编译器的移植、Bootloader、内核移植、文件系统的移植、应用程序的移植。下面,分开讲这几个方面的具体工作。

编译器的移植

其实“移植”这个词并不合适,因为这就是一个交叉编译环境的搭建,根据我们的需求,使用arm-linux-gcc即可。交叉编译就是指将本平台上的源代码编译为另一个平台上适用的代码,这个过程需要对主机进行交叉编译环境的搭建,并且需要平板进行支持。

Bootloader

这里先讲一下目前主流平板的启动过程与桌面机的区别。我们都知道桌面机在启动时会先启动BIOS,然后由BIOS来加载MBR,再由MBR交给GRUB来引导内核的启动,之后的省略。而平板的启动过程是在加电之后启动BootLoader来启动内核,然后加载文件系统和界面完成整个系统的启动。这部分的资料根据不同的Bootloader方式还不同,目前,嵌入式Linux系统主流的方式为U-Boot。

内核移植

Linux内核对多平台有很好的支持。内核的对外部接口是统一的,并且与平台无关。内核的大多数代码也是与平台无关的。主要的体系结构相关代码存在于:
      -- arch/architecture
      -- include/asm-architecture
   那么,ARM 体系的平台相关代码就主要是:
      -- arch/arm
      -- include/asm-arm

由于Linux内核本身对不同平台都有比价良好的支持,在内核方面我们要做的只需要裁剪即可。在内核移植过程中,需要自己新做的工作并不多。

文件系统的移植

根据Android当时的发展历程来看,保留Linux本身的文件系统是最好的选择。目前,Android已经发展到了4.3的版本,到目前为止,Android的根文件系统仍旧跟Linux所使用的文件系统一样。那么,我们只需要在平板系统上重建一个一样的文件系统即可。

应用程序的移植

最理想情况下,程序可以不作更改,或仅仅打一些补丁,然后告诉编译环境按照目标环境要求编译即可。但是,依赖某些平台特性的应用程序移植起来往往难度更大。如:
      -- 图形库
      -- 为速度进行优化的代码,比如编解码器

应用程序移植过程中的常见问题(参考网上资料)
      依赖软件造成移植性问题:
      -- C库版本问题
      -- 图形库带来的问题
      -- 软件依赖某些服务带来问题
      --  网络应用在 little-endian 平台上的处理,网络传递数据是 big-endian的。
      --  软件依赖特定平台的特性。
      --  平台的数据一致性模型差异。 

除了这几方面外,硬件平台本身也会对C程序和C库产生影响,主要是通过字长、字节顺序、内存页面大小等队C库产生影响,我们对C库还有针对平板做一定的优化,再有就是在内核移植时,要加入对触摸屏支持较好的驱动程序,而目前,Linux内核中虽然有触摸屏驱动,但是驱动本身并不完美,仍需要做一定的改动。

以上就是今天对Arm架构中Linux移植所存在问题的分析,但是对移植技术了解并不充足,还有不少不对的地方,今后随着学习的深入会逐步纠正。

 

       By  Air_Fighter

2012.8.3