年前做过一款Android 2.3,用飞思卡尔iMX5的系统,
过了几天猪狗不如的生活。。终于搞定。
有了上次经验,这次用iMX6做Android 4的平台,就顺畅了很多。
第一天,下载系统
下载飞思卡尔的iMX6安卓软件包。下过来后,按照文档的指示,下载repo,
克隆各种git仓库路径。。网速太慢,晚上放着下。。
第二天,编译系统
第二天早上一看,代码全下好了,好现象!还是按照文档,编译uboot,kernel,boot.img,system.img等各部分。期间遇到编译错误若干,还好都不难解决,基本上还是编译iMX5安卓时遇到的老问题,还有就是linux编译机器要装一个软件包。大半天的功夫,编译完成。
接下来的功夫,参考硬件设定的管脚分配,在linux kernel的arch/arm下,将管脚分配的代码重新整理一遍。上百管脚映射到代码里,真不是省心的事情。
------ (分割线,等待硬件打板子贴片回来)
(N天后的)第三天,软硬件联合调试
硬件板子终于回来,开始软硬件联合调试,真正的挑战开始了。刚开始心里非常没谱,这拿到手里的就是块砖啊,能不能运行起来是个未知数。。。如果硬件有什么问题,咱调试软件可就苦了。事后证明,我们的硬件工程师Y大神,是非常牛逼且细致的,几乎没出什么问题。
软件调试的过程,就是拔除一个个问题的过程。
第一步,先把uboot启动起来。开始极不顺,uboot烧进去,板子啥输出都没有。这不是板子,就是砖拿。。后来发现问题了,弄错一个芯片小型号,找到对应型号的uboot,串口终于打出数据。低级错误,简直。。
第二步,启动linux kernel。研究下uboot的启动参数,将booti命令指向正确的mmc设备,linux正常启动。
第三步,让linux kernel正确加载init并引导文件系统。这里又遇到不小的困难,kernel启动完就不动了。不过呢,咱不是飞思卡尔做系统的工程师,所以咱相信,一定是小问题。。各种可能的问题一一考虑,文件系统所在的分区对否?mmc卡的驱动对否?加载顺序对否?mmc卡4线还是8线模式?mmc卡硬件上供电没?一一确认修改无误后,并调整mmc卡为4线,调整文件系统所在的mmc卡为linux识别到的第一块卡。android系统的串口终端命令行,终于运行起来了。
碰壁无数,怀疑无数,Y大神给打气无数。。好在收获不小。此时天色已晚,代码渐欲迷人眼,收拾装备,明日再站。
第四天,继续软硬件联合调试
安卓的串口界面出来了,是个好现象,给了大家不少的鼓舞。不过遗憾的是,仍旧没看到lvds屏幕显示出图形界面。Y大神帮看了又看硬件电路,觉得应该没有问题的。屏幕的背光能亮,但是屏幕上就是完全没有内容。Y大神提醒,会不会IPU的输出通道设错了呢?果真如此的话,也是很令人吐血的,一则系统默认的参数,不大可能留着第一个通道不用,用第二个;二则咱trace了下内核关于IPU部分的代码,铩羽而归。
然而,事情就是如此的巧合,事后证明,的确是这个地方问题所在。期间种种迂回曲折,不说了。
屏幕点亮后,启动进入安卓界面,接上鼠标,管用!再测试RTC,管用!兴奋异常!
然后将触控屏的驱动加到内核里,再次管用!当然还有点问题,触控屏的位置不对,联想到Android 4和以前的2.3不同,它的触控屏需要有个idc描述文件。抄段idc文件,用PID/VID命令方式,放到指定的idc目录下。能使用触屏的安卓系统,也做出来了。
一面是疲惫,一面是激动,安卓系统虽然成功运行,后续需要优化的其实还很多。
此时又是天色已晚,代码渐欲迷人眼。鏖战几天,人跟散架了似的。跟老总告假调休,将代码提交到仓库,后续的工作交代给同事,休假去也。
(转载请标明:http://www.cnblogs.com/xhawk18/)