美文网首页
Android产品U-BOOT中移植SATA硬盘初始化功能

Android产品U-BOOT中移植SATA硬盘初始化功能

作者: Hemsl | 来源:发表于2019-11-27 18:12 被阅读0次

    需求背景

    公司的无敌高端娱乐设备带了巨大的8T曲库盘,这么高端的东西竟然被市场诟病系统启动Launcher后,还在等待硬盘挂载,这个体验实在不咋地。为了维护产品的逼格,那么优化挂载速度刻不容缓,这个艰巨的任务由此拉开巨幕。

    前期思路

    1. 比较直接,在kernel中sata驱动中下手,找到sata初始化慢的原因。
    2. 比较有经验的老大提出来的,在uboot中提前给硬盘上电,加速初始化。

    实践过程:

    第一个思路:

    1. 对比测试,发现影响sata硬盘挂载的因素非常多,有如下:
    1. 硬盘类型,希捷的绿盘尤其垃圾,同时上电,初始化最慢
    2. 硬盘容量,容量越大,挂载正常越慢
    3. 硬盘格式,ext格式和ntfs也会有些差异
    4. 硬盘从异常状态恢复挂载速度很慢,典型的机器异常断电导致
    

    这些问题,最典型的莫过于硬盘本身的问题,比如希捷绿盘这个问题,经过分析sata驱动,发现ahci协议在硬盘初始化的流程中,有个soft reset的步骤,这一步希捷绿盘就会失败,其他别的型号的盘正常,然后失败后陷入漫长的等待,直到状态正常,执行下一步操作,最后从kernel启动到硬盘挂载正常需要28s,正常是一半的时间。这就无法从kernel sata驱动中优化赢得时间。直到现在我还没找到优化的方法。

    第二个思路:

    1. uboot中提前给硬盘上电,测试了一些方法:
    1. 确认硬盘上电的gpio,查到到uboot中设置gpio操作的方法,setGPIO(GPIO_NUM, 1), 输出电压用万用表量一下,一直不生效,陷入沉思;
    2. 开始怀疑设置gpio的方法,再找了一个了led指示灯的方法去测试,发现可以生效,再次陷入深深的沉思。
    3. 最后找了芯片原厂的工程师求助,发现gpio可能被复用为其他功能,需要按照他们提供的寄存器先配置为普通gpio的功能,经过一番尝试果然解决。忽略细节害死人。
    4. 接下来就是找了一个uboot中sata初始化的代码,移植进来。结果喜人,即使是希捷这个坑人的绿盘,初始化到挂载速度也有大幅提升。挂载速度可以由28s缩短到15s。
    

    番外

    大部分的Android代码,没有考虑到硬盘的支持,所以一般厂商提供的uboot代码中没有sata相关的功能,这时就需要开启搜索技能,经过搜索发现,各大uboot代码中sata驱动这一块逻辑流程都差不多,差异的部分在于每家的芯片差异,导致某些寄存器、GPIO地址不同。这就需要认真研究代码流程,然后对照芯片手册,一点一点调试移植。

    相关文章

      网友评论

          本文标题:Android产品U-BOOT中移植SATA硬盘初始化功能

          本文链接:https://www.haomeiwen.com/subject/lfqmwctx.html