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

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

3天内不再提示

如何使用Linux设备驱动程序点亮LED

Wildesbeast 来源:今日头条 作者:嵌入式在左C语言在 2020-04-18 10:25 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本篇文章来学习嵌入式Linux驱动程序开发中的第一步——点亮led

驱动程序开发的步骤主要分为以下几个部分:

根据原理图确定相关引脚;

查看芯片手册(以我的板子来说就是三星平台EXYNOS4412系列);

编写驱动程序;

编写用于测试的应用程序;

以上的驱动程序开发过程,不仅仅只是在Linux中,在所有的嵌入式软件开发中,也基本都是遵循这套流程。

特别说明:第一个步骤和第二个步骤我将直接跳过(查看原理图和芯片手册),因为这两者取决于我们的硬件平台,大家可以根据具体的应用进行修改即可。重点放在第三个步骤和第四个步骤,也就是编写驱动程序和测试程序。

下面进行详细的讲解

编写驱动程序

(1)确认led所连接的引脚,led1、led2分别连接的引脚为EXYNOS4_GPD0(0)和EXYNOS4_GPD0(1),此处的EXYNOS4_GPD0(0)是一个宏,该宏是IO引脚的结构描述,两个led定义为一个数组的代码如下:

(2)写使用到的两个gpio申请,且申请成功之后将他们配置为输出模式,同时保持默认高电平,根据原理图可知当低电平时led打开,所以开机led默认关闭,代码如下:

(3)对应上一步,写释放申请的gpio,代码如下:

(4)写led设备与文件操作相关的函数(在本例中主要是open()函数和ioctl()函数等),代码如下:

open函数和release函数

ioctl函数

然后将实现的文件操作函数填充到file_operations结构体中,如下:

由于在本例中不使用read()、write()和llseek()等函数,所以可以不用写这些文件操作函数的具体实现。

(5)写模块入口函数和模块出口函数,代码如下:

在模块入口函数中,主要完成注册设备、设备初始化、将设备注册到系统、创建设备节点以及申请gpio并初始化。

模块入口函数——前半部分

模块入口函数——后半部分

在模块出口函数中,主要完成一些释放工作,例如注销设备、注销设备节点、释放gpio等。

模块出口函数

最后修饰入口函数和出口函数,以及模块的许可证声明即可:

编写用于测试的应用程序

代码如下:

实现的效果为:运行测试程序,输入可执行文件名,并输入两个控制参数,第一个参数决定控制哪一个led,第二个参数决定是点亮led还是关闭led,如果输入参数个数不等于3时不能控制点灯。

在文章结束部分作一些总结:

对宏定义EXYNOS4_GPL2(0)的操作实际上就是对4412芯片管脚寄存器的操作;

上层程序员(包括驱动工程师)不用关心物理地址和虚拟地址具体是多少,只需要对一组宏定义操作,就是对4412内部寄存器操作;

关于led管脚的申请、赋值以及配置所使用到的主要函数为: GPIO申请函数和赋值函数gpio_request – gpio_set_value()、三星平台的GPIO配置函数s3c_gpio_cfgpin()、GPIO配置输出模式的宏变量S3C_GPIO_OUTPUT。

通过对普通GPIO的操作,大家可以了解到,学习驱动的过程中,很大一部分时间实际上是用于熟悉库函数的使用。其实无论什么驱动都没有想象的那么难,一般性的方法都是先了解和掌握和对应驱动相关的库函数。

最后在掌握驱动库函数的基础上,掌握Linux架构,驱动自然很容易写出来或者很容易就移植成功,希望此篇文章可以帮助读者初步进入嵌入式Linux设备驱动的世界。

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

    关注

    243

    文章

    24440

    浏览量

    687533
  • Linux
    +关注

    关注

    88

    文章

    11628

    浏览量

    218010
  • 驱动程序
    +关注

    关注

    19

    文章

    868

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

    ——这便是《Linux 设备驱动开发》。本书从基础知识出发,分专题透彻讲解Linux环境下的设备驱动
    发表于 11-17 17:52

    如何使 ML56-TK 驱动程序适应 Linux 内核?

    如何使 ML56-TK 驱动程序适应 Linux 内核
    发表于 08-20 07:57

    为FreeRTOS增加新的设备驱动程序

    如果你正在使用FreeRTOS构建嵌入式系统,并且考虑添加新的设备驱动程序,那么这篇文章很适合你。高效的设备集成不仅仅是让设备功能正常运行——更关乎模块化、可靠性和安全性。
    的头像 发表于 08-06 15:44 753次阅读
    为FreeRTOS增加新的<b class='flag-5'>设备</b><b class='flag-5'>驱动程序</b>

    zephyr设备驱动程序模型

        1:Zephyr 内核支持多种设备驱动程序驱动程序是否可用取决于board 和驱动程序。 Zephyr 设备模型为配置作为系统一部
    的头像 发表于 07-29 10:34 481次阅读
    zephyr<b class='flag-5'>设备</b><b class='flag-5'>驱动程序</b>模型

    求助,关于55513 Linux驱动程序问题求解

    ; 我们使用 linux 内核 5.4 来构建 fmac 驱动程序,但是当 insmod ko 文件时 brcmfmac 将失败:brcmfmac:brcmf_sdio_htclk:访问关闭时钟失败
    发表于 07-09 08:02

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

    PLIN驱动程序现已正式发布,本文将展示如何安装PLIN驱动程序,以及如何在Linux环境下进行基本的PLIN通信操作,确保您能够快速掌握并应用这一新工具。
    的头像 发表于 04-21 15:29 798次阅读
    <b class='flag-5'>Linux</b>环境再升级:PLIN<b class='flag-5'>驱动程序</b>正式发布

    RTC芯片有Linux PCA2131驱动程序吗?

    RTC 芯片有 Linux PCA2131驱动程序吗? 1) 如果没有,我可以使用任何兼容的驱动程序驱动这个 RTC 芯片吗? 2) 如果是,我在哪里可以找到它?
    发表于 03-31 06:22

    嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-Linux设备驱动的分类

    Drivers):这类驱动程序用于支持网络接口卡(NIC)和其他网络设备。它们负责管理数据包的传输、网络连接和协议处理等功能。Linux设备驱动
    发表于 03-12 10:20

    飞凌嵌入式ElfBoard ELF 1板卡-Linux设备驱动的分类

    Drivers):这类驱动程序用于支持网络接口卡(NIC)和其他网络设备。它们负责管理数据包的传输、网络连接和协议处理等功能。Linux设备驱动
    发表于 03-10 17:00

    AN3761-KSZ DSA驱动程序的使用

    电子发烧友网站提供《AN3761-KSZ DSA驱动程序的使用.pdf》资料免费下载
    发表于 01-22 16:28 0次下载
    AN3761-KSZ DSA<b class='flag-5'>驱动程序</b>的使用

    用于InterBase的ODBC驱动程序:可与多个第三方工具兼容

    、macOS 和 Linux 上从符合 ODBC 标准的报告、分析、BI 和 ETL 工具访问 InterBase 数据库。我们的 ODBC 驱动程序完全支持标准的 ODBC API 功能和数据类型,并
    的头像 发表于 01-22 09:57 843次阅读
    用于InterBase的ODBC<b class='flag-5'>驱动程序</b>:可与多个第三方工具兼容

    适用于MySQL的dbExpress驱动程序:提供对MySQL的快速访问

    (包括社区版)快速访问 MySQL,以及 macOS(32 位和 64 位)和 Linux(64 位)平台。对于此服务器,dbExpress 将驱动程序作为实现通用 dbExpress 的独立库,提供用于
    的头像 发表于 01-21 09:52 675次阅读

    适用于Oracle的ODBC驱动程序

    Linux 上符合 ODBC 标准的报告、分析、BI 和 ETL 工具访问 Oracle 数据库。我们的 ODBC 驱动程序完全支持标准 ODBC API 功能和数据类型,并支持从任何地方轻松
    的头像 发表于 01-13 09:17 858次阅读

    适用于Oracle的dbExpress驱动程序

    (包括社区版)快速访问 Oracle macOS(32 位和 64 位)和 Linux(64 位)平台。对于此服务器,dbExpress 将驱动程序作为实现通用 dbExpress 的独立库提供 用于
    的头像 发表于 01-09 16:04 692次阅读
    适用于Oracle的dbExpress<b class='flag-5'>驱动程序</b>

    USB音频过滤器驱动程序安装

    电子发烧友网站提供《USB音频过滤器驱动程序安装.pdf》资料免费下载
    发表于 12-19 14:28 0次下载
    USB音频过滤器<b class='flag-5'>驱动程序</b>安装