建议:如果是从未接触过驱动开发的人想入这行,建议买本宋宝华的书先看上2个月,弄懂什么是驱动,大致要做哪些工作。安卓驱动开发入门建议先做传感器的驱动开发,因为传感器驱动开发架构清晰,相对简单易于上手。
下面大致讲一下一个项目开发过程中驱动工程师要做的事情:
一:驱动移植
驱动移植要做两件事:一是代码的移植,二是代码的调试。对于一个已经成熟的平台且公司之前开发过该平台,那么这个阶段就相对简单了,这种情况下比较适合公司培养新人入手,了解驱动移植的过程。但是如果是一个新开发的平台,那么工作就比较大了,期间遇到的问题会比较多。这个阶段的目的就是使得外设能够跑起来,手机系统能够操作该外设。
下面以光距离传感器ltr559在高通MSM8916平台为例进行具体的说明。
1:找到ltr559光距离传感器代码,这里把握一个原则,最省事的是能够直接找到该平台(这里是MSM8916)已经调试成功的代码,如果没有则找LTR559厂商要源代码,和LTR559规格书。
2:根据分类,将该代码放到平台底版本合适的文件夹下。这里是/kernel/drivers/sensor/alsps/ ----qualcomm
/kernel/drivers/misc/mediatek/alsps/ -----mediatek
根据平台在上面对应的目录下新建一个ltr559文件夹,然后把ltr559.c放到该文件夹中
3:配置编译文件config 和makefile文件
4:配置该外设:ltr559的设备树(一般是.dtsi文件),mtk项目还需要配置dws.
文件大致路径:/kernel/arch/arm(arm64)/boot/dts/项目名/平台名.dtsi文件
设备树:通俗的讲就是该设备的一些相关的属性,最重要的是要配置设备树是
属性名compatible ---用于设备与驱动的匹配
slave设备的 i2c 地址----用于cpu与外设通过I2C通信
gpio,中断脚的配置等等
5:上面这些都做好后就可以开始编译代码了
根目录下source build/envset ---导入环境
lunch 任何选择需要编译的项目
make bootimage -j32 ---开始编译内核(-j后面数字代表CPU核数)
6:接下来就是调试代码了,实现该外设基本功能。调试过程中容易遇到的问题之后再讲。
7:最后就是解bug阶段了。