驱动程序员因为和底层设备打交道的地方比较多,所以很多人认为开发驱动程序是一门非常高级的活儿。但是很多已经做驱动开发的程序员却不这么认为,在他们眼里,开发驱动程序只是拿着芯片公司给出的demo code,修修改改,本身没什么太大的难度,也没有技术含量可言。事实上真的是这样吗?下面就谈一下个人的一些意见,仅供大家参考。
(01)驱动程序员需要较好的C语言功底和汇编功底,因为操作的是controller寄存器或者总线,所以编写代码的时候必须想好每一行code带来的结果是什么;
(02)驱动往往是和具体的os绑定在一起的,无论是linux、windows、vxworks,都需要开发者了解相关的os 驱动框架。本质上说,这些都是套路,熟能生巧就好了;
(03)驱动程序员很多时候需要承担额外的责任,firmware的同事要找他,app开发的同事也要找他,所以驱动程序员需要在最短时间内shoot问题的本质;
(04)对于刚立项的project,很多时候软、硬件的错误是无法判断的,所以驱动程序员还需要自己利用示波器、逻辑分析仪、协议分析仪等工具来定位故障,撇清责任;
(05)开发驱动程序所依赖的文档大部分都是英文的,所以提高自己英文阅读能力也是必不可少的;
(06)最简单的驱动代码是GPIO、UART之类的程序,最复杂的就是sata、pci、usb总线类的驱动代码,host、device、协议、控制器本身,这些都要了解一些;
(07)编写驱动程序不是容易的事情,又要看cpu厂商提供的控制器手册,还要看芯片厂商提供的命令手册,这样才能将两者绑定在一起,工作不好做;
(08)驱动程序员涉及到调度、互斥、延时、中断、dma等内容,所以本身需要对os的内容很了解;
(09)不同类型的cpu差别还是很大的,对于虚拟地址、cache、字节对齐、字节序、多核这些概念,驱动程序员理解得要更加深刻;
(10)驱动程序调试不容易,printk和点灯是常用的方法,除此之外就是工作经验的积累了。
(11)目前android是很火,驱动开发也很吃香,但是android驱动开发本质上还是linux开发,套路还是一致的,这点没有改变,培养自己的内功很重要。