linux驱动开发之LED灯驱动(附驱动源码,适用于全志,瑞芯微等芯片)

devtools/2024/10/20 18:59:14/

最近学习linux驱动,前面讲述了字符型驱动开发的驱动编写框架以及具体步骤,而LED驱动是字符型驱动中最基础的,本次我们就来学习一下linux的LED灯驱动开发步骤,同时源码放出来供大家参考。

本次驱动开发适用于全志,瑞芯微的开发板,其他开发板应该也同样适用,毕竟对于GPIO口的操作就那几个寄存器。我手上刚好有一块orangepi_3_lts板子(基于全志H6),所以我是基于这块板子来写LED灯驱动程序的,对于orangepi_3_lts这块板子,想要运行自己的驱动程序需要先加载内核头文件,具体步骤就不再赘述了,忘记的同学可以查看我的上一篇关于linux字符型驱动的文章,文章地址:Orangepi3_lts字符驱动编写框架及具体步骤_香橙派3b驱动编写-CSDN博客

同时本次LED灯驱动源码(包括驱动源码,Makefile,上层App测试程序)地址:香橙派LED灯内核驱动源码,包括驱动文件,makefile和上层测试app资源-CSDN文库

好,步入正题,我们先把操作步骤说清楚,至于源码是怎么写的,我们后面再说。假设我们现在已经编写好的驱动源码,Makefile和上层App测试程序,驱动源码编译成ko文件需要需要将源码放到开发板里,在开发板里编译,在虚拟机里编译会出错,香橙派会存在这么一个问题,不知道有没有大佬有解决方案。上层测试app可以在虚拟机里使用交叉编译器编译成可执行文件,编译命令如下:

/home/chuan-plus/my_orangepi3_lts/toolchain/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc ledApp.c -o ledApp

编译之后将所需要的文件全部发送到开发板运行的系统上,注意,本次文件传输是通过网络进行传输的,需要开发板联网,由于orangepi_3_lts是板载wifi的,可以无线上网,不需要接网线(这也是我选择orangepi_3_lts的一个重要原因),发送命令如下:

scp -r 02_led root@192.168.XXX.XXX:/home/orangepi/mydriver

发送到开发板之后,通过如下命令查看本次使用的设备号有没有被占用。

cat /proc/devices

之后进入02_led/目录,使用如下命令编译驱动模块

make ARCH=arm64

编译之后会生成.ko文件,通过如下命令加载驱动

insmod led.ko

加载完驱动之后同样可以使用上面的命令查看该驱动对应的设备号等,之后使用如下命令创建设备节点

mknod /dev/led c 200 0

最后就是运行我们编写的测试App控制灯的亮灭了,命令如下:

./ledApp /dev/led 1
./ledApp /dev/led 0

至此加载以及测试流程完毕,下面简单介绍驱动程序如何写:

驱动主要流程就是写寄存器,包括IO口做什么引脚用,引脚驱动水平,输入输出模式以及读写高低电平四个寄存器,在手册上可以找到,通过源码具有较为详细的注释,方便学习。

最后贴一张测试成功的点灯图片:


http://www.ppmy.cn/devtools/122203.html

相关文章

Spring Boot 快速入门教程

1. Spring Boot 简介 Spring Boot 是一个基于 Spring 框架的项目,它简化了基于 Spring 的 Java 应用程序的创建和部署。Spring Boot 通过提供一系列的“Starters”来简化 Maven 配置,同时使用约定大于配置的原则,让开发者能够以最少的配置启…

冯诺依曼体系|操作系统

目录 一、硬件:冯诺依曼体系 1.冯诺依曼体系结构 2.冯诺依曼体系结构组成 3.内存的重要性 (1)提升运行速度 (2)提升运行效率 二、软件:操作系统 1.什么是操作系统 (1)内部理…

Elasticsearch基础_5.ES聚合功能

文章目录 一、数据聚合1.1、桶聚合1.1.1、单维度桶聚合1.1.2、聚合结果排序1.1.3、限定聚合范围 1.2、Metric聚合 二、聚合总结 本文只记录ES聚合基本用法,后续有更复杂的需求可以查看相关书籍,如《Elasticsearch搜索引擎构建入门与实战》 一、数据聚合…

GO语言深度探索:并发编程与高性能网络服务器实践

GO语言深度探索:并发编程与高性能网络服务器实践 在当今快速发展的软件开发领域,Go语言(又称Golang)以其简洁的语法、强大的并发处理能力以及高效的编译执行速度,迅速成为构建高性能、高并发系统的首选语言之一。本文…

【预备理论知识——1】深度学习:概率论概述

简单地说,机器学习就是做出预测。 概率论 掷骰子 假设我们掷骰子,想知道看到1的几率有多大,而不是看到另一个数字。 如果骰子是公平的,那么所有六个结果{1,…, 6}都有相同的可能发生, 因此我们可以说 1 发生的概率为1…

【漏洞复现】VEXUS多语言货币交易所存在未授权访问漏洞

漏洞描述 java后端,非常完整的一套交易所,UI前端做的也很漂亮,新增了交易跟单功能,前端pc+wap都是uniapp纯源码,前端源码node_modules环境已经安装好了,拿去直接编译就可以. 后端 前端 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共…

基于Hive和Hadoop的电信流量分析系统

本项目是一个基于大数据技术的电信流量分析系统,旨在为用户提供全面的通信数据和深入的流量使用分析。系统采用 Hadoop 平台进行大规模数据存储和处理,利用 MapReduce 进行数据分析和处理,通过 Sqoop 实现数据的导入导出,以 Spark…

GoogleNet网络介绍及代码撰写详解(总结2)

可以从本人以前的文章中可以看出作者以前从事的是嵌入式控制方面相关的工作,是一个机器视觉小白,之所以开始入门机器视觉的学习只要是一个idea,想把机器视觉与控制相融合未来做一点小东西。废话不多说开始正题。(如有侵权立即删稿…