最近工作上开始转向android,虽然以前接触过,但并没有在一个全新的硬件平台上移植android。

这次需要移植的平台是 imx35 cpu的一个硬件设备。主要设备有 lcd,touch panel,audio,battery,g sensor,light sensor,backlight,keypad,wifi,bluetooth,gps等等。目前已经做了除wifi和bt之外的其他部分,计划两个星期内,做好这两个部分。

整个移植过程比较繁琐,首先要做好各个部分驱动,然后把android的代码添加到先前做好的base上。其中经历了不下百次的实验和失败,所以最终的经验弥为珍贵。在此,以切身操作的经历为基础,把关键环节记录下来。

移植的前期当然是调查,然后实验。但网络上的信息多是 在一种广泛使用的硬件平台上移植,而且没有精确的操作细节。所以只能对移植有一个大体的概念,出现的问题和解决方法都没有描述。

首先做移植的前提条件,一,当前平台的BSP,即有效地内核和驱动。二,android 源码。包括内核代码,和rootfs 代码。对于后者的获取,在此就不说了,网上的指导很多,可以照着做。 如果没有当前平台的BSP,那么还是先把对应的驱动完成吧,毕竟rootfs是建立在内核和驱动之上的。比如,lcd的驱动没有或者没有完成,rootfs又怎么能操作lcd进行显示呢?在此,可以简单的测试一下lcd,和audio,比如用MPlayer放个视频,用aplayer 放个 MP3。如果显示正常,播放流畅,说明lcd 的framebuffer 和 alsa 基本正常。

如果这个两个前提准备好了,那么就可以开始移植内核了。 当然有两种方法可以选择:一,在现有的内核上添加对android的支持,二,在android内核之上添加平台的支持。 至于选择哪种方法,就要看自己的要求,已经工作量大小了。其实,android内核与标准内核相比,改动不是特别多,可能有几十个文件。用 beyond compare看一下,我直接手动拷贝过去,然后改一下Kconfig 和Makefile。这里,几个比较重要的文件是,misc目录下的文件,ashmem。这里需要一定的内核和驱动基础,要确保最终编译通过。

此时得到一个支持android的内核,放到硬件上,试试看,此时可以看看对应的设备节点是否出现。前提是,你的rootfs中有udev或者mdev。同时在启动信息中,可以看到一些新的关于android支持的内容。

根据新加入的android驱动代码,可以在/sys下,/dev下看到对应的节点。如果没有出现,那么说明移植失败了,需要重新修改。

现在手里没有设备,明天看一下,有哪些新生成的节点,在下一篇中列一下。

至此,得到一个“支持”android的内核了。

更多相关文章

  1. cocos2d-x 2.x版本之win32 window移植android 环境搭配 只用NDK
  2. G1安装android软件方法 (实机运行)
  3. 编译移植android 2.3到tiny210
  4. 由浅入深研究Android(1)--开篇•序
  5. 如何成为一个Android高手
  6. Windows下安装Android(安卓)SDK与USB驱动程序
  7. 如何移植ROS程序到Android
  8. Linux C++工程师2小时了解Android记录
  9. FFMPEG for android

随机推荐

  1. Google Android操作系统内核编译图文教程
  2. android中activity的启动方式
  3. Android(安卓)控件系列: GridView 的简单
  4. Android—Http连接之GET/POST请求
  5. [android] 保存文件到手机内存
  6. 监听home键(android:launchMode="singleTa
  7. Android屏幕元素层次结构
  8. Android(安卓)TextView实现复制和超链接
  9. Android(安卓)Studio 环境搭建 与相关问
  10. :Android(安卓)dispatchTouchEvent