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

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

3天内不再提示

如何配置和操作Linux驱动程序开发板

德州仪器 来源:德州仪器 作者:德州仪器 2022-02-15 13:36 次阅读

本文档概述了利用Linux开发板为 Linux 内核开发驱动程序的基础知识,并简单介绍了如何配置和操作 Linux 驱动程序开发板。

一 开发背景

驱动是什么?

驱动程序是驻留在内核中的一段软件,它促进主机设备和外围设备之间的交互。这些外围设备可以像鼠标或键盘一样普通。我们为我们的产品编写驱动程序软件以便于和各种类型的主机设备进行通信

Linux内核是什么?

Linux内核是构成Linux操作系统的核心代码。 常见的基于 Linux 内核构建的高级操作系统 (HLOS) 有 Ubuntu、Android 和 Yocto。一个计算机系统是一个硬件和软件的共生体,它们互相依赖,不可分割。计算机的硬件,含有外围设备、处理器、内存、硬盘和其他的电子设备组成计算机的发动机。但是没有软件来操作和控制它,自身是不能工作的。完成这个控制工作的软件就称为操作系统,在Linux的术语中被称为“内核”,也可以称为“核心”。Linux内核的主要模块(或组件)分以下几个部分:存储管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信,以及系统的初始化(引导)、系统调用等。内核的开发由维护人员来监督,维护者拥有内核各个部分的开发权,任何添加到内核各自部分的代码都必须发送给他们。 这个通过维护者向内核提交代码的过程称为上游。

二 环境搭建

1. 软件环境的搭建

强烈建议使用专用的 Linux 机器来进行驱动程序的开发。 除了 Windows PC 之外,使用 Linux 机器或使用 Linux 机器作为主计算机是驱动程序开发的理想配置。不建议在 Windows 中运行 Linux 虚拟机,除非用户具有设置和维护虚拟机的背景,否则可能会出现兼容性和存储的问题。

2. 硬件设备的连接

如何配置和操作Linux驱动程序开发板

图1. Linux驱动开发过程中硬件设备的连接示意图

硬件设备的连接较为简单,其中,Linux机器通过USB to OTG和USB to TTL的转接线相连,Linux开发板通过I2C总线和I2S总线与目标设备相连以完成驱动的开发。USB to TTL模块的作用就是把通信电平转换到Linux主机和Linux开发板都能识别的电平进行通信。

3. Linux操作系统中的常用工具

Gedit

Gedit 是一个基于 GUI 的文本编辑器,具有软件开发的一些基本功能。 Gedit 可以用作纯文本编辑器,也可以把它用来当成是一个集成开发环境 (IDE), 它会根据不同的语言高亮显现关键字和标识符。

Picocom

Picocom 是一个常见的串口调试工具,可以在 Linux 终端窗口中运行。利用Picocom可以通过串口通信协议与 Linux开发板进行通信和操作。

Nano

Nano 是一个基于命令行的文本编辑器。 Nano 提供最基础的文本编辑功能,用于在终端内进行编辑。 在 Ubuntu 中,Nano 是默认的命令行文本编辑器。

三 Linux驱动开发

1. 概述

如何配置和操作Linux驱动程序开发板

图2. Linux驱动开发流程及主要开发文件

针对Linux驱动的开发,有3大类型的文件是必不可少的,其中一部分就是最基础的驱动文件(The driver files),驱动文件中包含了驱动本身的文件后缀为.C的源代码和.H的头文件,以及Kconfig文件和Makefile文件,其中,Kconfig文件的作用是当我们编译Linux内核时,我们会发现有的模块被编译进了内核,有的只是生成了一个个模块。因此,我们如何让内核发现我们编写的模块呢?这就需要在Kconfig文件中进行定义说明。至于如何生成模块,那么就需要利用Makefile文件告诉编译器,怎么编译生成这个模块。另一个部分就是我们的设备树文件(Devicetree files),所以什么是设备树文件呢?其实在没有设备树文件以前,我们需要将Linux开发板的信息硬编码到内核的.C源文件中。不同开发板的硬件配置不一样,因此内核中存在大量的板级配置源码,从而会造成代码冗余。因此针对这个现象,我们可以用设备树的方法将板级配

置信息独立的存放到.dts/.dtsi文件中。此时,针对不同的开发板,只需要配置相应的.dts/.dtsi文件即可,这样可以避免大量重复的编码工作,但是如果更换Linux开发板那么就需要更换相对应的设备树文件进行配置。最后一部分我们需要的文件就是作为参考文档的说明文档(Reference documentation),这个参考文档中会对如何配置设备树文件做出定义,是我们编写设备树文件时必须参考的说明文档。驱动文件(The driver files)经过编译会生成名为zImage的镜像编译文件,设备树文件(Devicetree files)经过编译会生成文件后缀为.dtb的二进制文件,在成功的通过编译得到这两个文件后,我们就可以将这两个文件烧录到我们的Linux开发板中,这就是我们Linux驱动开发的原理过程。

2. 开发驱动源代码、Makefile和Kconfig文件

要开始开发驱动程序源代码、Makefile 和 Kconfig 文件,用户必须导航到内核中驱动程序所在的目录。 进入该目录后,创建一个适当的源代码文件并打开现有的 Kconfig 和 Makefile 文件。在 Kconfig 文件中,开发人员需要为设备驱动程序创建一个条目,这个条目向内核描述了设备需要的驱动程序,并专门列出了驱动程序的依赖项。在 Makefile 文件中,开发人员同样需要为设备驱动程序创建一个条目,该条目负责告诉编译器需要从驱动源代码创建哪些目标文件。虽然驱动源代码对于所要开发的驱动程序和开发人员来说是独一无二的,但每个驱动程序都有相似的流程。首先,设备必须在一系列模块表中注册。例如,of_device_idtable 用于将设备实例与设备树文件匹配,i2c_device_idtable 用于建立 I2C 通信,acpi_device_table 用于 ACPI 系统。所有模块表都由最终的 module_i2c_driver 表链接。在建立模块表之后,驱动程序会执行probe() 函数,在此函数中,驱动程序检查设备是否可用和可配置,如果设备可用,则为驱动程序分配资源。如果设备不可用,则函数应返回错误并释放任何已分配的资源。在此之后,init() 函数将分别运行并获取和设置可以在用户空间中配置和读取的属性。

3. 开发Defconfig和Devicetree文件

Defconfig 和 Devicetree 文件特定用于开发人员用来验证驱动程序的平台。Defconfig 确定编译内核时要在内核中安装或启用哪些模块。开发者可以选择手动编辑设备树或使用 pinmux 工具生成设备树代码。

4. 说明文档 / dt-bindings

说明文档描述了如何操作和配置设备驱动程序。 此文档应提供设备驱动程序及其驱动设备的简要说明。 在简要说明之后,会列出驱动程序的属性。其中最重要的属性即 compatible 属性。 所有兼容的实例都列在其中。 在 compatible 属性之后,用户将列出所有可配置的属性。在每个属性中,开发人员需提供属性的简要说明,指导用户如何配置该属性。

结语

本文简要介绍了如何利用Linux开发板为 Linux 内核开发驱动程序的原理和基础过程,要了解更多关于Linux驱动开发相关的详细信息,请参阅“Third Edition of Linux Device Drivers”或“The Linux Kernel Module Programming Guide”,以便更加深入地了解该主题。

审核编辑:汤梓红

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

    关注

    87

    文章

    11277

    浏览量

    209263
  • 主机
    +关注

    关注

    0

    文章

    991

    浏览量

    35111
  • 开发板
    +关注

    关注

    25

    文章

    5024

    浏览量

    97352
收藏 人收藏

    评论

    相关推荐

    Linux驱动程序程序员指南

    电子发烧友网站提供《Linux驱动程序程序员指南.pdf》资料免费下载
    发表于 11-22 15:53 0次下载
    <b class='flag-5'>Linux</b><b class='flag-5'>驱动程序</b><b class='flag-5'>程序</b>员指南

    LSP 2.10 DaVinci Linux驱动程序

    电子发烧友网站提供《LSP 2.10 DaVinci Linux驱动程序.pdf》资料免费下载
    发表于 10-09 09:30 0次下载
    LSP 2.10 DaVinci <b class='flag-5'>Linux</b><b class='flag-5'>驱动程序</b>

    嵌入式linux开发板怎么操作

    嵌入式Linux开发板是一种基于Linux操作系统的嵌入式系统开发平台。它通常包括一个处理器、内存、存储器、输入/输出接口等硬件组件,以及一
    的头像 发表于 09-02 09:09 363次阅读

    嵌入式linux开发板芯片的工作原理

    嵌入式Linux开发板是一种基于Linux操作系统的嵌入式系统开发平台,它广泛应用于工业控制、智能家居、智能交通、医疗设备等领域。 嵌入式
    的头像 发表于 09-02 09:07 371次阅读

    linux开发板与树莓派的区别

    操作系统的微型计算机,主要用于教育、编程、媒体播放等领域。 硬件配置 Linux开发板Linux开发板
    的头像 发表于 08-30 15:34 888次阅读

    linux开发板如何编译curl

    Linux开发板上编译 curl 库通常涉及到几个步骤,包括准备开发环境、下载源代码、配置编译选项以及执行编译和安装过程。以下是一个基本的指南,帮助你在
    的头像 发表于 08-30 15:33 589次阅读

    linux开发板和单片机开发的区别

    、PIC等,处理能力和内存容量相对较低。 操作系统 Linux开发板通常使用Linux操作系统,具有丰富的软件资源和
    的头像 发表于 08-30 15:30 709次阅读

    Linux设备驱动程序分类有哪些

    Linux设备驱动程序操作系统与硬件设备之间的桥梁,负责实现硬件设备与操作系统之间的通信和控制。Linux设备
    的头像 发表于 08-30 15:11 508次阅读

    linux驱动程序如何加载进内核

    Linux系统中,驱动程序是内核与硬件设备之间的桥梁。它们允许内核与硬件设备进行通信,从而实现对硬件设备的控制和管理。 驱动程序的编写 驱动程序的编写是
    的头像 发表于 08-30 15:02 431次阅读

    linux驱动程序主要有哪些功能

    Linux驱动程序操作系统与硬件设备之间进行通信的桥梁,负责实现硬件设备与操作系统之间的数据交换和控制。Linux
    的头像 发表于 08-30 14:47 341次阅读

    linux驱动程序的编译方法是什么

    Linux驱动程序的编译方法主要包括两种: 与内核一起编译 和 编译成独立的内核模块 。以下是对这两种方法的介绍: 一、与内核一起编译 与内核一起编译意味着将驱动程序的源代码直接集成到Linu
    的头像 发表于 08-30 14:46 523次阅读

    linux驱动程序运行在什么空间

    Linux 驱动程序操作系统的一部分,负责管理硬件设备与操作系统之间的交互。驱动程序运行在内核空间(Kernel Space),这是
    的头像 发表于 08-30 14:37 382次阅读

    虹科技术 Linux环境再升级:PLIN驱动程序正式发布

    Linux驱动程序领域再添新成员,PLIN驱动程序现已正式发布。
    的头像 发表于 06-28 13:34 355次阅读
    虹科技术 <b class='flag-5'>Linux</b>环境再升级:PLIN<b class='flag-5'>驱动程序</b>正式发布

    ESP-32DevKitc开发板驱动程序无法安装是怎么回事?

    在购买了ESP32芯片以及ESP32-DevKitc开发板之后,将开发板用数据线连接到电脑之后,并没有自动安装驱动程序,然后我在网上也下载了CP210X驱动程序,也没有用,请问怎么解决
    发表于 06-21 14:27

    fpga开发板linux开发板区别

    (Field-Programmable Gate Array)是一种可编程逻辑器件,它可以通过编程改变硬件逻辑电路的功能和结构。FPGA采用了可编程的门极,可以根据需要重新配置内部电路,从而实现不同的功能和逻辑关系。而Linux开发板
    的头像 发表于 02-01 17:09 2200次阅读