做高通平台安卓驱动感言

做高通平台安卓驱动感言

大家好,又见面了,我是全栈君。

         第二次写这类博客,之前还是求职期间写的面试之类的经历。下面是做高通安卓驱动的感言。 同一时候献给择职想做驱动的參考。

         不知不觉做驱动再过2个月就3年了。能够说这3年学习到的非常多。老大或者同事们的不吝赐教。针对性通过百度等搜索等。还有就是自己一边工作一边自己研究到的。知识,解决这个问题的能力也是慢慢积累起来的。这二年多来一直在做驱动,由開始開始接触调试LCD TP等等。每次会反复做事,可是自己学习到的也非常多,学会分析关键问题,掌握一些驱动调试方法,事实上调试驱动来说一个printk真的够了。再强大只是了,调试过高通modem側代码后发现kernel是多么好调试。

再调试LCD中首先研究懂得了一些平台操作display的流程与kernel背光操作,之后解决这个问题就非常熟手了。比較难的就是调试qctlk里面的lcd显示与开机logo保持。这些感觉对于刚開始做驱动还是蛮吃力的那段时间压力非常大。期间会使用delay来调试lkkernel刚启动出现的问题,比与说在lk里面logo消失或者kernel刚启动时消失,调试过一次lcd lk display后后面不亮的或者其他问题的都非常好攻克了,当然是qct的,调试qrd就轻松多了,主要是问题比較少。启动时显示出现故障使用delay就非常好查了。有的可能说串口输出,可是实践证明delay是最有用的。当然串口输出调试确实非常好比方死机等等。非常强大,个人感觉仅仅要能够输出log,就非常难存在解决不了的问题。

对于TP。无非採样上报。属于i2c设备同一时候属于input设备。调试期间遇见的更多是FAE优化抗干扰与报点。睡眠电流,唤醒不能工作等问题。相比lcd简单的多。

lcd tp差点儿相同了,感觉掌握的非常好,问题出现能够高速攻克了,之后又搞了chargebatt,同一时候像休眠问题也在搞。后面一直从事电源管理方面的。chargebatt个人感觉功能ok后兴许还是须要试用期间慢慢优化的,特别是电量不准确问题。做qct出现过插上charger后不能充电问题。还有更多的问题量产前都会慢慢出现。个人认为仅仅要熟悉linux power部分解决不是非常难的,还是那句话linux kernel出现的问题因为有printk最easy解决的,除非是硬件问题。是的驱动与硬件常常相互指责,当出现故障的时候。再说camera,仅仅记得第一年搞过高通realease出来的一个sense模组,另一个须要在其他平台移植过来的驱动。调试过程中无非上上电。拉下RST。移植中出现空指针等。解决完遇见的问题后camera终于会亮起来,当然之后还须要tunning。这个是个非常费力的活。同一时候非常耗时间。以后没有干过camera了,个人认为还是继续研究linux kernel里面的为好。毕竟是做驱动,而不是去为了camera效果一直去tunning

tunning须要专门的人去做,一旦专门tunning就非常难有时间做别的活了。当然有些公司给tunnning camera的待遇非常好,即使这样我也不会动心去深入搞这块。个人爱好等不一样。后面一直专注于linux kernel

         所在公司不光做手机还会集成其他的模块,这样开发起来相比仅仅做手机的难度大了很多,非常多东西自己得去研究。

比方集成第三方modem。驱动project师活也多。尽管一般厂家会提供驱动可是适配到新的平台难免有很多问题,甚至非常严重的问题须要分析解决。开发难度上层最大,可是驱动是基础,所以稳定性等要求比較高。

比方集成UART挂载的模块,会涉及到串口通讯驱动与数据流等问题。还有sdio接口的模块比方网卡 特别功能的T卡等模块。这里简单的说下可热插拔的sdio设备,当插入设备时,首先sdcc host会出发中断,在core.c里面会依据协议来detect是什么接口设备是sd还是sdio还是mmc,检測到后会出现log:new high speed xxxx,之后就载入驱动。说下usb,拿usb接口的网卡来说下usb流程,首先当kernel启动时hub会检測到usb设备,通过2次RST port来获取设备描叙符,设置address,我们在驱动里面须要找到相应的驱动,对于usb网卡来说。在driver/net/usb以下有很多类似的驱动程序。能够找到最匹配的一个来使用,增加获取到的PID VID CALSS等信息。host会通过这些信息来match相应的usb设备接口,当然很多usb设备不止一个接口。usb通讯能够理解为多个高通串口。这里非常可能须要依据不同的CLASS或者INTERFACE来载入不同的驱动,对于网卡驱动来说有自己driver模型而不须要字符设备等供上层交互,usb设备驱动是linux最复杂点的。就说这么多。等到集成到AP上的模块能够正常工作后,你会发现差点儿每一个模块因为使用到了linux以下的总线。会导致休眠不了。不同的接口都须要自己研究处理,让kernel休眠下来。这部分非常多须要自己的摸索。

尤其是usb驱动的休眠是最不优点理的,涉及到runtime机制。对于手机厂家来说调驱动很多其它的是他们家的外设,通常都有模板。可是对于集成很多其它功能的嵌入式产品来说。功能非常丰富,附加值高,开发难度很多其它,大量的上层须要自己做,就做驱动而言,首先底层须要提供一个类似字符设备或者misc设备接口等供上层读写,驱动写好后须要写个简单的測试程序来open write read文件,再跟下kernel里面的数据流,查查硬件通讯有没有问题。模块接收到没有,会不会丢数据等等。这些稳定性会在后期暴漏出来慢慢改进。

等一切ok后就是kernel里面的睡眠与唤醒了,当然还有第三方模块自己的功耗问题这个第三方负责了。

         去年经历过一个非常难解决的问题就是高端平台上1080P LCD偶尔会蓝屏的问题,可是通常一周可能才出现一次左右。甚至不会出现。当时顶着压力花费非常久终于还是攻克了。提case给高通,他们给的不能解决。最后是自己硬着头皮解决的,这个问题难在复现bug非常难,后来发现某个大厂这个平台上都有这个问题,非常庆幸自己能解决大厂不能解决的问题。

解决后高通支持反过来问怎样解决的?倒是非常滋润。对于高通支持project师我想说。他们支持越来越慢,非常多时候全然靠自己,竟然有时说没有机器,可是每次关闭case还是习惯性好评。

         从去年開始能够给公司解决一些比較难的底层问题到如今领导把LCD等外设交给新入职的调试,个人能力慢慢成长,如今还是非常关注linux kernel里面一些驱动等研究。解决一些有难度的问题。

虽说说不上精通linux kernel可是能够说非常熟悉。产品底层出现故障能够高速定位分析。个人感觉即使做驱动十年也谈不上精通,毕竟linux kerne是个系统内核,精髓在内存管理等等。说精通恐怕仅仅有那些提交linux改进优化系统内核的人。

        前段时间看过别人评价做mtk驱动的。说怎么怎么简单。害了年轻人,个人非常庆幸当时入职选择了做高通驱动。之前也是能够选择做mtk驱动的或者wince的。再加上这家公司技术实力还是比較牛逼的在业界。自己做高通,就我熟知的kernel代码确实非常美丽,外国人写的质量非常高。同一时候设备驱动非常丰富。对于刚參加工作的人确实非常故意处,学到的非常的多。

对于mtk自己没有做过。尽管别人说怎么怎么样,可是国产的毕竟跑起来的也是非常牛逼的。个人认为知识在于深入研究才会长能力。以后有机会倒是想多接触几个平台。可是做linux驱动的感觉与平台关系也不是非常大,毕竟Linux大的框架摆在那里。

    记得刚入职时干活非常急非常浮躁。恨不得一下功能就ok。

可是如今干活很多其它的是享受。一种积累。一种深入发掘的过程。

做产品很多其它的是关注是自己后期试用来找出或者測试出来的问题,同一时候定位解决这个问题。

    兴许发展方向:研究音频方面,之前自己也学习了不少,可是没有亲自做过,这些都是别人负责的,自己也会拿手机去debug比方耳机插拔 按键 speaker等。这些都是简单的。软件上很多其它的是底层通道切换等等。

     

         

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115571.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pytest parametrize fixture_参数化类型

    pytest parametrize fixture_参数化类型前言当某个接口中的一个字段,里面规定的范围为1-5,你5个数字都要单独写一条测试用例,就太麻烦了,这个时候可以使用pytest.mark.parametrize装饰器可以实现测试用例参数化。官方示

    2022年8月6日
    2
  • Android P Preview1 兼容要点[通俗易懂]

    AndroidPPreview1,昨天3.8发布,兼容Preview1主要改下targetSdkVersion=28compileSdkVersion为前一个版本(比如27)在AndroidStudio3.2下能完整支持AndroidPPreview1AndroidPPreview1要点1.1约束调用非API接口:比如用JNI、反射来调用一下系统类、方法    Android…

    2022年4月15日
    43
  • node.js常用npm命令

    node.js常用npm命令本文主要介绍npm的常用命令,如果用过淘宝镜像cnpm同样适用。特别注意,此处的指令多为node.js的依赖包,所以node.js是必不可少。一、安装node.js的依赖包Tips:每次都要打开cmd,进行指令操作,后续就不再提醒了。npminstallname>如:npminstallgulp默认安装express的最新版本如:npminstallgulp

    2022年7月16日
    12
  • 高并发抢购思路

    高并发抢购思路电商的秒杀和抢购,对我们来说,都不是一个陌生的东西。然而,从技术的角度来说,这对于Web系统是一个巨大的考验。当一个Web系统,在一秒钟内收到数以万计甚至更多请求时,系统的优化和稳定至关重要。这次我们会关注秒杀和抢购的技术实现和优化,同时,从技术层面揭开,为什么我们总是不容易抢到火车票的原因?一、大规模并发带来的挑战在过去的工作中,我曾经面对过5w每秒的高并发秒杀功能,在这个过程中,整…

    2022年5月6日
    43
  • Matlab画图-非常具体,非常全面

    Matlab画图-非常具体,非常全面

    2021年11月17日
    517
  • 几行代码让qq机器人关键词检测,让机器人也可以又哭又笑,戳一戳你

    几行代码让qq机器人关键词检测,让机器人也可以又哭又笑,戳一戳你在之前的文章讲到了如何制作机器人,传送门:qq机器人制作,后来又发了闪照破解插件制作,传送门:闪照破解这里再发一个简单的demo插件演示如下:交流群:970353786,非诚勿扰。fromnonebotimporton_keyword,on_commandfromnonebot.typingimportT_Statefromnonebot.adapters.cqhttpimportMessage,Bot,Event#这两个没用的别删fromnonebot.a

    2022年5月12日
    67

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号