Linux驱动修炼(一)——前言

声明

        作者博客中具有"原创"标志的属个人所著,仅为个人学习记录整理所得,不涉及任何商业用途。在撰写过程中,包括但不限于会引用第三方图片、链接、表格等用于辅助讲解、分析等为目的行为,若此行为侵犯了您的权益,请您私信告知作者予以修正。创作不易,转载时请标注作者与来源,非经允许,不得用于盈利目的。
        技术交流、学习、分享、使用等需遵守中华人民共和国相关法律法规、中华民族基本道德和基本网络道德规范。作者坚决反对和抵制一切不负责任的言行和违法犯罪行为,包括但不限于激进、破坏、低俗、广告等。一经转载,即表示您已经接受本声明!需自行承担一切风险与责任。


一、什么是驱动

        相信很多朋友应该在小时候玩过小霸王的游戏吧!实际上在我们玩小霸王时用的手柄,里面就有驱动的身影。从广义上来说,驱动其实就是使硬件能够正常工作起来的一种方式;从狭义上来说,驱动指的就是能够让硬件正常工作起来的驱动程序。

二、驱动有什么作用

        上面也提到了我们在玩小霸王时用的手柄,游戏手柄上面有很多的按键每个按键有什么作用,其实都是在驱动程序中已经确定好的。比如我们通过上下左右方向按键进行移动,通过AB键进行攻击和跳跃。所以驱动的作用就是使我们的硬件设备能够达到预期(或者说需求)的效果,需要注意的是这种预期是在特定的范围之类的!而每个硬件设备都有自己所对应的驱动程序,使硬件设备达到最佳的工作状态和提供相应的功能。

三、学习驱动需要具备哪些技能

        首先在学习驱动之前,应该要具备一些必要的和非必要的前置技能和知识储备,有利于在学习驱动的时候更加理解。作者在下面总结了一些自己在平时的工作学习中认为对驱动开发有一定帮助的,整理出来供大家参考:

技能必要性说明
C语言必要C语言是目前驱动开发必须具备的技能之一,目前驱动开发主要就是以C语言作为开发语言。
汇编语言建议汇编语言虽然在驱动开发中也有其出现的身影,在非原厂的驱动开发中汇编语言基本很难用到,但是在分析问题的过程中还是具备一定的帮助。
数据结构必要数据结构在驱动中有着大量的运用,特别是复杂驱动往往能看到数据结构的身影,比如:链表、队列等。
设计模式非必要设计模式在驱动中主要体现在设计驱动的软件架构方面或优化驱动的性能方面,作者个人理解更倾向于这是一种设计思想,可以在驱动开发中进行辅助优化。
Linux应用开发建议Linux应用开发建议还是要具备一定的能力,实际我们在实际的驱动开发工作中,往往以提供接口的方式居多,这样会涉及在上层中构建一些库来支撑上层的开发,并且上层Linux应用开发也有助于分析问题。
内核建议学习驱动开发建议对内核有一定了解,实际上驱动也是属于内核的一部分。并且在复杂驱动中同样有大量的同/异步、锁机制等运用,而且内核中一些工具和技术栈也可以辅助驱动的调试。
硬件知识必要驱动往往是和硬件关系非常紧密的,所以在学习驱动的同时有必要具备硬件相关的知识,比如:数/模电原理、原理图/PCB图、认识基本的电子元器件等。
硬件调试建议硬件调试(焊接、仪器仪表使用等)这项技能作者认为还是需要具备一定的能力,在作者身边的驱动开发者有不会硬件调试的,每次前期调试都是和硬件配合,其实这样是非常耽搁时间的(如果太过于责权划分的话,就当我没说)。
英语必要其实英语这项技能争议还是挺大的,有的朋友觉得英语不好照样编程。但是在驱动开发中大量的技术手册、数据文档等,都是英文文档,如果英语能力比较差的话阅读文档会比较吃力的。

        表格中必要的技术项是在驱动开发中大量使用的,为了避免增加驱动开发的学习时间,需要掌握必要的技术项。表格中建议的技术项是对驱动开发起一定的辅助作用的,可以在学习驱动前择选学习,这样对学习驱动非常有好处,深入性的原理可以自行安排或者放缓学习。比如在学习驱动前,对内核中的锁机制、同步方式等有一定了解,在学习驱动开发的时候就会轻松许多。表格中非必要的技术项不会影响驱动开发的学习,可以在闲暇之余,根据自己的时间安排学习。

四、学习驱动的思路

        结合作者的学习和工作的情况,作者谈谈自己的看法。作者是学电子信息专业出身的,在学校只接触过单片机(由此入行),所以作者具备硬件的技术知识和调试能力的。在作者自学的过程中也走过不少弯路,对思路和方向都不明确,所以花了大量的时间。上述也提到了那些技能是必要、建议、非必要,在此也不过多赘述了。对思路上面整理了下列几条供大家参考:

  1. 了解驱动的模型,主要是了解驱动是如何管理的、如何使用的、如何设计的。
  2. 了解驱动常用接口及原理,如:I2C、UART、USB、SPI等。
  3. 多阅读、多练习。

        感觉写了跟没写差不多,其实思路这个东西就是建立自己的学习模式和提高自己的理解能力。驱动这个东西,接口、总线、协议众多,各种外设、芯片也是千千万,不能一概而论,估计市面上也没用任何一本书将所有的情形都涵盖。作者的思路就是,它是干嘛的、它有什么作用、它能干什么、它的原理是什么,带着问题去学习就是学习驱动的关键所在。


        以上所述皆为作者个人理解,作者文笔和理解能力有限,难免存在理解错误或描述不清的地方,还请各位朋友多多海涵。也烦请阅读的朋友可以指出作者的问题,希望能和各位朋友一起共同进步,若是方便也可以在评论区留下您宝贵的意见或给作者发送私信一起探讨问题,作者在此提前谢过各位!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值