Focus on the Linux kernel

感觉对于刚开始做驱动还是蛮吃力的那段时间压力很大,期间会使用o消失或者,FAE优化抗干扰与报点,睡眠电流,唤醒不能工作等问题。相比了,感觉掌握的很好,问题出现可以快速解决了,之后又搞了,后面一直从事电源管理方面的。

所在公司不光做手机还会集成其它的模块,这样开发起来相比只做手机的难度大了许多,很多东西自己得去研究。比如集成第三方modem,驱动工程师活也多,虽然一般厂家会提供驱动但是适配到新的平台难免有许多问题,甚至很严重的问题需要分析解决。开发难度上层最大,但是驱动是基础,所以稳定性等要求比较高。比如集成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里面的睡眠与唤醒了,当然还有第三方模块自己的功耗问题这个第三方负责了。

能解决大厂不能解决的问题。解决后高通支持反过来问如何解决的?倒是很滋润。对于高通支持工程师我想说,他们支持越来越慢,很多时候完全靠自己,居然有时说没有机器,但是每次关闭case还是习惯性好评。

害了年轻人,个人很庆幸当时入职选择了做高通驱动。之前也是可以选择做,就我熟知的人说怎么怎么样,但是国产的毕竟跑起来的也是很牛逼的。个人觉得知识在于深入研究才会长能力。以后有机会倒是想多接触几个平台。但是做linux驱动的感觉与平台关系也不是很大,毕竟Linux大的框架摆在那里。

记得刚入职时干活很急很浮躁,恨不得一下功能就ok。但是现在干活更多的是享受,一种积累,一种深入发掘的过程。做产品更多的是关注是自己后期试用来找出或者测试出来的问题,同时定位解决问题。

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

这一次是一个告别,或者一个永远的告别,

Focus on the Linux kernel

相关文章:

你感兴趣的文章:

标签云: