最近工作上开始转向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. Android JSON解析示例代码
  2. 【Android】Android Studio 1.5+ 中混合调试Native和Java代码
  3. Android之A面试题③应用程序启动过程源代码分析
  4. Android实现TextView中文字链接的4种方式介绍及代码

随机推荐

  1. 如何在电脑上安装模拟器体验Android 4.0
  2. Android中ListView的onKeyDown、onKeyUp
  3. Android 蓝牙开发
  4. Android 模拟器 GPU ON
  5. Android近场通信---NFC基础(五)
  6. android lib 发布到jcenter
  7. 关于使用 Android MVVM + LiveData 模式
  8. Android 学习资料(一)
  9. Android Studio开发——百度地图定位
  10. layer-list 的用法