第一期 前言 《手机就是开发板》

        前几天翻抽屉发现了一堆旧手机,不禁感慨,从2009年开始使用android系统的手机到现在,平均每十个月就换一个手机,因为工作原因很熟悉nand和eMMC存储器的工作原理,知道手机内的个人信息即使被删掉也是可以轻易恢复的,所以出于隐私保护的因素每一个旧手机我都妥善的收藏着。手机已经逐渐成为我们的一个器官,每天和他打交道的时间是最多的,同时它也是一个消耗品,一个手机陪伴我们的时间也就是一到两年的时间。面对一堆旧手机我突然来了一个灵感,既然它们已经不再是保存个人信息的载体,何不折腾一下,把手机当作开发板,细细的研究一下它的工作原理。当然把一个已经是产品的手机当作开发板还是有点挑战性的,毕竟略微有一点逆向工程的意思。
        还记得第一次给手机刷机是2012年的事了,手机的型号是HTC_G11,当时手机信号不好,泡在论坛上有人说刷一下基带就好了,于是找了篇刷机的帖子按照上面说的一部一部的操作:解锁bootloader,刷recovery,刷booting,刷system,刷userdata,刷cache,刷基带。刷了一个通宵,刷完特有成就感,虽然今天看了没有什么技术含量,但毕竟大体了解了一下手机的系统构成。当然刷机后问题解决了也就没有再去研究过,因为工作上的事情太操心了。

        说干就干,对于一个开发板,我觉得只要有Datasheet文档和JTAG调试接口这两种输出其他的就都不是问题了。因为Jtag是基于SOC底层的控制方式,所以只要手机可以通过Jtag方式调试,也就可以作为开发板来使用啦。各种论坛潜水后,我在一个维修手机的论坛发现了HTC_G11手机Jtag的接法:

第一期 前言 《手机就是开发板》_第1张图片        

        于是,迅速连接焊点,将对应信号接入JLINK调试器,然后使用OpenOCD进行scan_chain,如下图这样,使用开关电源调到4v给手机供电,这里说一下手机电池电量的原理,电池的电量就是通过电压表现出来的从3.7v到4.2v对应0%到100%的电量,所以如果手机不用电池供电,只要通过对接3.7v到4.2v之间的直流电就能开机,还有一些手机有电池类型检测端子和温度反馈检测端子,再根据定义将相应端子对地接一定阻值的电阻就能开机。

结果很悲剧,OpenOCD没有任何反馈,我想这里面一定是有某些黑科技在,比如开机要按某些特定键激活JTAG接口之类的,最后发现手机的JTAG调试有专门的设备,比如riff box(当面三星的字库门很多都是用它就砖的)还有国产的 东海智能天骄王,这些厂商已经将手机JTAG研究的很透彻,而且支持的手机型号也在不断的更新中。JLINK和OpenOCD的组合可能不太支持,也可能理论上支持但需要基于源码做一些修改,所以对于Jtag的尝试就先到这里了,如果想研究Jtag刷手机的话可以考虑入手一个支持手机芯片的Jtag调试器。
        放弃Jtag调试手机最大的影响就是对手机Bootloader的调试会遇到很大的屏障,因为bootloader的调试需要更底层的Jtag作为保障,不过经过我一番研究发现,手机内要研究的东西还挺多,android在设计的时候加入了recovery的概念,这样就弱化了bootloader的重要性,而且bootloader都是有手机芯片生产商提供基础源码,这些都是不公开的,也就是说先去研究其他的问题,暂且放弃bootloader的研究。
        总要给一个想法找一个方向,定一个目标。经过1个星期的不断摸索,最终确定了《手机就是开发板》的研究方向:
        1.Android Kernel 驱动移植;
        2.Android HAL 移植;
        3.Andorid JNI 和 APP 初级掌握;
        4.Andorid ROM 移植和定制;

        通过将手机作为实验对象,实践动手操作来对以上提到的研究方向进行学习就是我想出《手机就是开发板》这个命题的核心思想。因为这几年我越来越体会到,没有输出的学习是徒劳的,所以我提倡找到实践途径再去学习的方式。
手机的选择也是很关键的,现在手机的芯片方案大体就这几家:
        高通 Qualcomm MSM系列;
        联发科 MediaTek MT系列;
        三星 sumsung Exynos系列;
        英伟达 Nvidia Tegra系列;
        海思 Hisilicon kylin系列;
        还有一些小众的品牌 intel、全志、展讯、Mstar、TI等等。

        每一系列的芯片都有自己的特点,这里我选择普及量最高的两款作为实践对象,分别是高通的MSM8974(骁龙800),联发科的MT6582。这两种芯片对应的手机很多,我这里有两款旧手机正好对应,分别是小米3和联想A850,下面是它们的照片。


下面制定一下学习路线。
        第一步,学习AOSP(Android Open Source Project)相关的内容,通过google官方文档,和google提供的模拟器学习android源码的编译流程,学习编译系统,在模拟器上对上面提到的四个研究方向做一遍实践;
        第二步,因为CyanogenMod对小米3提供官方支持,所以在小米3上对上面提到的四个研究方向再进行一遍实机操作;
        第三步,因为联发科将开源这部分任务留给了手机供应商,所以AOSP和CyanogenMod对MTK的手机都不提供官方支持,所以我们可以通过MT6582的手机来进行系统移植的实践,最终自己动手将android的系统移植到MTK方案的手机上;
        第四步,在自己定制的android系统上,选择一些硬件模块,比如GPS,sensor,camera,NFC,在这些方面从底层做一些修改并做出可以实现特殊功能的APP。


        通过这四步走和四个研究方向,预计用时60天,实现对android系统的初步了解,程度上比 会刷机 更深入一点。当然,需要一点基础,需要你在Windows和linux系统的语境间自由切换,不存在系统鸿沟,了解一点C/C++和JAVA基础,系统版本选择Android6.0,对应的CyanogenMod版本为CM13。
        《手机就是开发板》的代号为 PHDemo 是phone demo 的缩写。
        这里特别说明一下,我实验中使用的手机都是所有信息已经导出,不再进行实际使用的手机,也就是说任何实验造成的数据和硬件的损坏都不会造成实际损失。在这里强烈建议各位,不要拿正在使用的手机做实验,并且出于安全考虑,不建议在使用中的手机中刷非官方ROM,不建议获取root权限。
        每一期提到的源码和工具都可以在我的github链接上找到:https://github.com/aggresss/PHDemo

你可能感兴趣的:(手机就是开发板)