欢迎来到天天文库
浏览记录
ID:27851102
大小:56.00 KB
页数:6页
时间:2018-12-06
《关于一位驱动工程师的感悟.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、关于一位驱动工程师的感悟 不知不觉做驱动再过2个月就3年了,可以说这3年学习到的很多,老大或者同事们的指教,针对性通过百度等搜索等,还有就是自己一边工作一边自己研究到的知识,解决问题的能力也是慢慢积累起来的。 这二年多来一直在做驱动,由开始开始接触调试LCDTP等等,每次会重复做事,但是自己学习到的也很多,学会分析关键问题,掌握一些驱动调试方法,其实调试驱动来说一个printk真的够了,再强大不过了,调试过高通modem侧代码后发现kernel是多么好调试。 再调试LCD中首先研究懂得了一些平台操作display的流程与kernel
2、背光操作,之后解决问题就很熟手了。比较难的就是调试qct的lk里面的lcd显示与开机logo保持,这些感觉对于刚开始做驱动还是蛮吃力的那段时间压力很大,期间会使用delay来调试lk与kernel刚启动出现的问题,比与说在lk里面logo消失或者kernel刚启动时消失,调试过一次lcdlkdisplay后后面不亮的或者其它问题的都很好解决了,当然是qct的,调试qrd就轻松多了,主要是问题比较少。启动时显示出现问题使用delay就很好查了,有的可能说串口输出,但是实践证明delay是最实用的。当然串口输出调试确实很好比如死机等等,很强大,个
3、人感觉只要可以输出log,就很难存在解决不了的问题。 对于TP,无非采样上报,属于i2c设备同时属于input设备,调试期间遇见的更多是FAE优化抗干扰与报点,睡眠电流,唤醒不能工作等问题。相比lcd简单的多。搞lcdtp差不多了,感觉掌握的很好,问题出现可以快速解决了,之后又搞了charge与batt,同时像休眠问题也在搞,后面一直从事电源管理方面的。charge与batt个人感觉功能ok后后续还是需要试用期间慢慢优化的,特别是电量不准确问题,做qct出现过插上charger后不能充电问题,还有许多其他的问题量产前都会慢慢出现,个人觉得只
4、要熟悉Linuxpower部分解决不是很难的,还是那句话linuxkernel出现的问题由于有printk最容易解决的,除非是硬件问题。 是的驱动与硬件经常相互指责,当出现问题的时候。再说camera,只记得第一年搞过高通realease出来的一个sense模组,还有一个需要在其它平台移植过来的驱动,调试过程中无非上上电,拉下RST,移植中出现空指针等,解决完遇见的问题后camera最终会亮起来,当然之后还需要tunning。这个是个很费力的活,同时很耗时间。以后没有干过camera了,个人觉得还是继续研究linuxkernel里面的为好,
5、毕竟是做驱动,而不是去为了camera效果一直去tunning。tunning需要专门的人去做,一旦专门tunning就很难有时间做别的活了。当然有些公司给tunnningcamera的待遇很好,即使这样我也不会动心去深入搞这块。个人爱好等不一样,后面一直专注于linuxkernel。 所在公司不光做手机还会集成其它的模块,这样开发起来相比只做手机的难度大了许多,很多东西自己得去研究。比如集成第三方modem,驱动工程师活也多,虽然一般厂家会提供驱动但是适配到新的平台难免有许多问题,甚至很严重的问题需要分析解决。 开发难度上层最大,但是驱
6、动是基础,所以稳定性等要求比较高。比如集成UART挂载的模块,会涉及到串口通讯驱动与数据流等问题。还有sdio接口的模块比如网卡特别功能的T卡等模块,这里简单的说下可热插拔的sdio设备,当插入设备时,首先sdcchost会出发中断,在core.c里面会根据协议来detect是什么接口设备是sd还是sdio还是mmc,检测到后会出现log:newhighspeedxxxx,之后就加载驱动。 说下usb,拿usb接口的网卡来说下usb流程,首先当kernel启动时hub会检测到usb设备,通过2次RSTport来获取设备描叙符,设置addre
7、ss,我们在驱动里面需要找到对应的驱动,对于usb网卡来说,在driver/net/usb下面有许多类似的驱动程序,可以找到最匹配的一个来使用,加入获取到的PIDVIDCALSS等信息,host会通过这些信息来match对应的usb设备接口,当然许多usb设备不止一个接口,usb通讯可以理解为多个高通串口,这里很可能需要根据不同的CLASS或者INTERFACE来加载不同的驱动,对于网卡驱动来说有自己driver模型而不需要字符设备等供上层交互,usb设备驱动是linux最复杂点的,就说这么多。 等到集成到AP上的模块可以正常工作后,你会发
8、现几乎每个模块由于使用到了linux下面的总线,会导致休眠不了,不同的接口都需要自己研究处理,让kernel休眠下来,这部分很多需要自己的摸索。尤其是usb驱动的休
此文档下载收益归作者所有