0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何学习Linux驱动开发?

信盈达 2022-01-06 16:34 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Linux驱动开发,看起来是一份很高大上的职业,毕竟从事上层应用开发人员太多,而且门槛又不是特别高,而内核级开发从业人员要少得多,而且资料又较少。

有许多刚刚接触到Linux驱动开发的同学会感觉非常困惑,面对复杂的Linux内核有一种无从下手的感觉。今天就和大家分享一下,让刚刚步入驱动开发的同学少走一些弯路。

01要知道将来要做什么

学习,都是有目的性的,要么是兴趣使然,要么就是刚性需求,为了找一份好的工作。在这里先和大家聊聊做设备驱动将来可以做哪些方面。

我把linux设备驱动开发工作分为两大类,一类是做BSP级的开发,另外一类是做外设驱动的开发。

BSP的开发指的是板级代码的开发,和CPU是密切相关的,例如I2C/SPI Adapter的驱动。如果使用通用的芯片,比如三星的Exynos,飞思卡尔的I.MX系列,TI的OMAP或者DaVinci系列,基本都会有现成的BSP包,这部分代码通常是芯片厂商提供和大型公司贡献。

大家可以看看linux内核源码中/arch/arm/mach-omap,内部很多代码都是诺基亚贡献。做BSP级的开发需要有较深的功底,首先要十分了解CPU特性,另外要使代码有良好的扩展性和复用性,方便后续移植。有这样需求的往往是芯片商或使用专用芯片的设备商。

外设驱动开发就相对简单一些,都是和特定的外设硬件打交道。

通过利用BSP级代码提供的API或者linux提供的更高层的抽象接口来操作硬件。实际上和应用层的开发大同小异。

例如操作I2C总线上的EEPROM,实际上的读和写操作都有已经封装好的API来完成.而开发者需要做的是了解外设的特性,通过封装好的API对外设进行操作。新入门的开发者建议从外设驱动开发入手,循序渐进。当然,一个优秀的开发者是即可以做BSP级代码的开发,也能做外设驱动的开发的。

02用面向对象的思想去思考

面向对象,即OO思想,大家应该非常熟悉。linux的内核虽然用面向过程的C语言实现,但是仍然是通过面向对象的思想去设计的。

如果从单片机转行做linux设备驱动,会发现和单片机的或者裸机的驱动设计有很大区别。设计linux设备驱动不单单是对硬件设备的操作,更多需要考虑的是扩展性和代码的复用。

所以就出现了platform device/driver,i2c device/driver,spi device/driver,抽象出了设备和驱动两部分,使设备细节和驱动分离。另外还出现了一些框架,提供了底层接口的封装,做开发时要习惯用OO思想去设计。当然要记住条条大路通罗马,不使用这些device/driver也可以实现设备驱动,只是不太推荐这样做。

03从各驱动框架入手

Linux提供了各种框架(子系统),对底层进行封装,抽象出相同操作的接口,这样可以更好的实现复用。想入门linux驱动开发,可以先从框架入手,掌握API的使用,再逐渐深入研究,从上到下去学习。不要把驱动开发想象的太复杂,实际和英语的完型填空差不多,框架有了,只需要自己去填写操作具体硬件的细节代码而已。

几个比较重要和常用的框架有:

GPIO:这个就不用多说了,刚开始接触驱动的基本会练习通过GPIO点亮LED的操作,linux封装了相关的gpio操作接口。

SPI:学会spi device/driver的用法,以及收发消息API,可以参考一些代码,基本都是相同的套路。

I2C:学会i2c device/driver的用法,和学习SPI的套路一样。

PINCTRL:非常重要的一个框架,负责CPU引脚复用,由于现在的CPU都很复杂,一个引脚支持多种复用。

V4L2:一个非常复杂的视频采集框架,具体可以参考相关的文档。驱动里面有很多例子可供参考,同时提供了模板vivi.c

Framebuffer:显示相关的框架,熟悉其中API,而且有模板skeletonfb.c。

DMA Engine: 把DMA操作进行封装,目前驱动代码中关于DMA的操作很多是使用私有的BSP包中的DMA接口,如果支持DMA Engine的话,建议使用DMA Engine。

中断:比较常用的了,接口不多,很少掌握。

USB框架:USB框架比较复杂,API较多,可以通过读已有的代码进行学习。

MTD框架:存储相关比较重要的框架,网上相关的文档很多。

设备树:设备树是在新的内核里面引进来的,可以把板级代码中的各种device通过设备树文件去描述,动态创建,这样更灵活。其实不要把设备树想象的太复杂,实际和解析JSON,XML一样,各个节点中记录设备相关的信息,提供给驱动使用。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 驱动器
    +关注

    关注

    54

    文章

    9115

    浏览量

    156511
  • Linux
    +关注

    关注

    88

    文章

    11817

    浏览量

    219555
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何理解Linux内核中的PCIe驱动

    各异的芯片组,加上各种 PCI 设备自身独特的功能需求,Linux 内核中的 PCI 支持远比我们希望的要复杂得多。今天这篇文章,我们将从驱动开发的视角,梳理 Linux PCI 设备
    的头像 发表于 04-11 17:22 1259次阅读

    Linux内核驱动开发的技术核心精要

    嵌入式Linux驱动开发是连接硬件与操作系统的关键环节。随着内核演进(如Linux 6.13)和硬件复杂度提升,开发者需掌握并发控制、中断分
    发表于 03-10 13:56

    从架构到驱动:这三本经典书,承包了我的嵌入式Linux入门与进阶

    私房菜(基础学习篇 第四版)》《Linux 设备驱动开发(第 2 版)》,这三本书恰好构成了从 “底层架构” 到 “系统基础” 再到 “驱动
    的头像 发表于 02-09 17:02 1357次阅读

    迅为iTOP-Hi3516开发驱动开发资料全面上线,构建从入门到精通的完整学习路径!

    迅为iTOP-Hi3516开发linux驱动开发资料全面上线,构建从入门到精通的完整学习路径!
    的头像 发表于 12-19 15:47 850次阅读
    迅为iTOP-Hi3516<b class='flag-5'>开发</b>板<b class='flag-5'>驱动</b><b class='flag-5'>开发</b>资料全面上线,构建从入门到精通的完整<b class='flag-5'>学习</b>路径!

    迅为Hi3403开发驱动教程全面上线,开启嵌入式Linux开发新篇章!

    迅为iTOP-Hi3403开发linux驱动教程全面上线,开启嵌入式Linux开发新篇章!
    的头像 发表于 12-18 14:23 892次阅读
    迅为Hi3403<b class='flag-5'>开发</b>板<b class='flag-5'>驱动</b>教程全面上线,开启嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>开发</b>新篇章!

    从小白到大牛:Linux嵌入式系统开发的完整指南

    从小白到大牛:Linux嵌入式系统开发的完整指南 一、小白入门:搭建 Linux 嵌入式开发的认知地基​ 对于零基础学习者,首先要打破 “嵌
    发表于 12-16 10:42

    Linux驱动开发的必备知识

    驱动框架进行开发。 6、调试技能: 掌握内核调试工具,如 KDB、KGDB、printk 等。 能够分析内核日志,定位驱动程序中的问题。
    发表于 12-04 07:58

    迅为iTOP-3568开发板 Linux驱动开发实战:menuconfig图形化配置实验

    迅为iTOP-3568开发板 Linux驱动开发实战:menuconfig图形化配置实验
    的头像 发表于 11-24 15:29 951次阅读
    迅为iTOP-3568<b class='flag-5'>开发</b>板 <b class='flag-5'>Linux</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>实战:menuconfig图形化配置实验

    【迅为工业RK3568稳定可靠】itop-3568开发Linux驱动开发实战:RK3568内核模块符号导出详解

    【迅为工业RK3568稳定可靠】itop-3568开发Linux驱动开发实战:RK3568内核模块符号导出详解
    的头像 发表于 11-21 13:25 1635次阅读
    【迅为工业RK3568稳定可靠】itop-3568<b class='flag-5'>开发</b>板<b class='flag-5'>Linux</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>实战:RK3568内核模块符号导出详解

    【免费送书】成为硬核Linux开发者:《Linux 设备驱动开发(第 2 版)》

    Linux系统的设备驱动开发,一直给人门槛较高的印象,主要因内核机制抽象、需深度理解硬件原理、开发调试难度大所致。2021年,一本讲解驱动
    的头像 发表于 11-18 08:06 1837次阅读
    【免费送书】成为硬核<b class='flag-5'>Linux</b><b class='flag-5'>开发</b>者:《<b class='flag-5'>Linux</b> 设备<b class='flag-5'>驱动</b><b class='flag-5'>开发</b>(第 2 版)》

    【书籍评测活动NO.67】成为硬核Linux开发者:《Linux 设备驱动开发(第 2 版)》

    ,助力读者学习后能独立完成驱动程序开发。结语在当前人工智能与物联网紧密结合的AIoT时代,各类传感器、可穿戴设备要在低功耗状态下承载智能计算,高效的驱动程序是关键环节。《
    发表于 11-17 17:52

    迅为3568开发板从零学习Linux驱动开发:迅为一站式资料包如何让我效率翻倍

    迅为3568开发板从零学习Linux驱动开发:迅为一站式资料包如何让我效率翻倍
    的头像 发表于 11-05 11:16 540次阅读
    迅为3568<b class='flag-5'>开发</b>板从零<b class='flag-5'>学习</b><b class='flag-5'>Linux</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>:迅为一站式资料包如何让我效率翻倍

    【北京迅为】itop-3568开发驱动开发指南(重制版)

    iTOP-RK3568开发驱动开发指南目录:前言学习方法Linux驱动基础第 1 章 你好!内
    发表于 10-30 15:48 43次下载

    RK3506开发Linux开发板极致性价比之选

    内存,256MB存储,裸机开发Linux开发、QT开发、LVGL开发、快速启动顺畅支持!官方售价到手仅49.9元,性价比极高!RK3506
    的头像 发表于 09-11 16:26 3893次阅读
    RK3506<b class='flag-5'>开发</b>板<b class='flag-5'>Linux</b><b class='flag-5'>开发</b>板极致性价比之选

    Linux 应用开发手册

    T507linux应用开发手册
    发表于 08-22 17:01 15次下载