如何进行驱动开发(一)
扫描二维码
随时随地手机看文章
笔者是一个毕业以后一直进行驱动开发的软件工程师。写这个文章的目的是为了记录软件工作中遇到的一些问题和思考,避免在后续的软件工作中犯相同的问题。
首先要进行驱动开发,那就要知道驱动是什么。笔者理解的驱动,就是芯片要运作起来,必须要依赖软件的一系列的配置,这一系列配置就是驱动。至于为什么需要驱动,能点开这篇文章的人应该都清楚。
可能有些才开始接触底层开发的人员或者对这部分不太了解的人会认为驱动开发是个很高大上的职业。但笔者作为工作在基层的员工来说,大部分驱动开发并没有太多的技术含量。为什么这么说,原因如下:
1、大部分功能是由芯片实现,驱动的作用主要是控制和初始化。大部分芯片驱动就是写这个,写完了芯片就能跑起来了。具体做什么业务再根据具体场景来进行控制配置,这就不是驱动的范围了。
2、驱动开发是有套路的不管是用户态驱动还是内核态驱动,基本按照这个套路走,就不会有大问题。特别是用户态驱动,是一层很薄的软件,就像一个洋葱剥几层就看到最里面的东西,没太多技术。
3、大部分驱动由于主要做控制和初始化,涉及不到复杂的算法,所以其实编码阶段大部分都不会太难。
所以我感觉我上班的大部分时间其实是在搬砖,所以码农这个称呼其实也有一定道理 []~( ̄▽ ̄)~*。但是驱动为什么还是比较吸引人,还是因为驱动开发也有它自己的难点和魅力,我理解的驱动开发的难点(魅力)主要是集中在以下几点
1、芯片需要跟软件一起完成的功能,也就是说整套功能流程需要软件和芯片紧密配合。这部分功能驱动是比较复杂的,会涉及到软硬件资源的保护,软硬件的交互效率等问题。
2、内核态驱动与内核耦合,在出现异常后,如何定位是一个难点,特别是踩内存这种问题,或者出现了某种异常直接复位,无问题现场。这种问题分析是很难短时间内找到问题点的,必须要一步步抽丝剥茧。
以上主要是笔者对驱动开发的基本理解,难免会有些地方理解不够到位,如果出现理解不一致的情况欢迎一起交流探讨。后续会针对何如开发Linux驱动,以及开发中遇到的问题进行具体分析。