Linux驱动开发练习案例

news2025/4/8 23:12:57

1 开发目标

1.1 架构图

操作系统:基于Linux5.10.10源码和STM32MP157开发板,完成tf-a(FSBL)、u-boot(SSBL)、uImage、dtbs的裁剪;

驱动层:为每个外设配置DTS并且单独封装外设驱动模块。其中电压ADC测试,采用linux内核自带的stm32mp-xx驱动。

应用层:在linux环境下,通过xxx、xxx、xxx使用c语言开发一款WebServer,对内访问驱动获取数据或遥控硬件,向外部用户提供restful api访问接口;

1.2 驱动层功能

序号驱动名称挂载设备技术点备注
1wd_drv/dev/wd_drvi2c总线模型同一总线不同地址
2light_drv/dev/light_drvi2c总线模型
3led_drv/dev/led_drvplatform模型
4dd_drv/dev/dd_drvspi总线模型
5key_drv/dev/key_drvio信号驱动

阻塞式IO获取中断事件;

根据不同按钮事件开关不同的led灯

6电压测量

/sys/bus/iio/devices/iio:device0

/in_voltage1_raw

adc数据采集

1.3 应用层功能

序号名称apiapi描述
1led1控制xx.xx.xx.xx:8080/api/led1

{"value":true}  value的值控制灯的亮/灭

2led2控制xx.xx.xx.xx:8080/api/led2{"value":false}
3数显管控制  xx.xx.xx.xx:8080/api/dd_show

{"value":"0-温度"}  显示温度,2位小数

{"value":"1-湿度"}  显示湿度,2位小数

{"value":"2-光照"}  显示光照,整数

{"value":"3-电压值"}  显示电压值,整数,单位mV

4获取测量值xx.xx.xx.xx:8080/api/state

返回值:

{

    "voltage": 95.9244,  //电压值,单位mV

    "light": 83,         //光照强度

    "sd": 54.8788,        //湿度

    "wd": 24.7079        //温度

}

2 效果展示(部分)

2.1 webserver的界面效果

PS:并非通过html/css写的,而是通过mongoose官网编辑器生成: Mongoose官网

2.2 驱动模块安装列表

2.3 控制效果展示

(1)在web上,通过点击LED1或LED2的Toggle组件,可以实时控制LED亮灭

(2)在web上,通过下拉框,可以选择当前数显管显示什么内容(例如:温度和电压)

2.4 postman测试restful-api接口(部分)

3  源码

源码地址

iot_drivers:  驱动源码(见git)

webserver:  webserver源码(见git)

linux设备树配置(部分):

/ {
	myled{  //led设备树
		compatible = "zr,myled";
		led-gpios = <&gpioe 10 0>,<&gpiof 10 0>,<&gpioe 8 0>;
	};

    mykey{  //按键设备树
		interrupt-parent = <&gpiof>;
		interrupts=<9 0>,<7 0>,<8 0>;
	};

};

//基于I2C总线的 温度度传感器树 和 光照传感器设备树
&i2c1{
	pinctrl-names = "default", "sleep";//指定管脚复用的两种不同模式
    pinctrl-0 = <&i2c1_pins_b>;//设置默认模式下的管脚复用
    pinctrl-1 = <&i2c1_sleep_pins_b>;
    i2c-scl-rising-time-ns = <100>;//设置时钟线上升沿的时间
    i2c-scl-falling-time-ns = <7>;
    status = "okay";//状态设置为OKAY
    /delete-property/dmas;  //删除无用的属性
    /delete-property/dma-names;
   	mywd@40{
    	compatible="zr,mywd";
    	reg=<0X40>;
   };

	mylight@1e{
		compatible="zr,mylight";
		reg=<0x1e>;
	};
};

//基于spi总线的 数显管设备树
&spi4{
    pinctrl-names="default","sleep";
    pinctrl-0=<&spi4_pins_b>;
    pinctrl-1=<&spi4_sleep_pins_b>;
    //添加对片选线管脚的描述
    cs-gpios=<&gpioe 11 0>;
    status="okay";
    mydd@0{
        compatible="zr,mydd";
        spi-max-frequency = <10000000>;//设置当前spi工作的最大频率为10M
        reg=<0>;    
    };
};

//基于iio的电压采集设备树
&adc {
	vdd-supply = <&vdd>;
	vdda-supply = <&vdd>;
	vref-supply = <&vdd>;
	status = "okay";
	adc1: adc@0 {
		st,adc-channels = <0 1>;
		st,min-sample-time-nsecs = <10000>;
		status = "okay";
	};
};

4、待探索问题

(1)基于webserver的websocket的实现

(2)pwm、dma、定时器的输入捕获中断驱动的编写

(3)ADC驱动手动编写

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2329458.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Apache httpclient okhttp(1)

学习链接 Apache httpclient & okhttp&#xff08;1&#xff09; Apache httpclient & okhttp&#xff08;2&#xff09; httpcomponents-client github apache httpclient文档 apache httpclient文档详细使用 log4j日志官方文档 【Java基础】- HttpURLConnection…

微信小程序—路由

关于 app.json 中的配置 app.json 主要是对整个小程序进行一个全局的配置。 pages&#xff1a;在这个配置项目中&#xff0c;就可以配置小程序里面的页面&#xff0c;小程序默认显示 pages 数组中的第一个页面windows&#xff1a;主要配置和导航栏相关的 当然&#xff0c;在…

人工智能驱动的数据仓库优化:现状、挑战与未来趋势

1. 引言&#xff1a;数据仓库的演进与人工智能驱动优化的兴起 现代数据仓库的复杂性和规模正以前所未有的速度增长&#xff0c;这主要是由于数据量、种类和产生速度的急剧增加所致。传统的数据仓库技术在应对这些现代数据需求方面显得力不从心&#xff0c;这催生了对更先进解决…

LVS高可用负载均衡

一、项目图 二、主机规划 主机系统安装应用网络IPclientredhat 9.5无NAT192.168.72.115/24lvs-masterredhat 9.5ipvsadm&#xff0c;keepalivedNAT192.168.72.116/24 VIP 192.168.72.100/32lvs-backupredhat 9.5ipvsadm&#xff0c;keepalivedNAT192.168.72.117/24 VIP 192.168…

脑影像分析软件推荐 | JuSpace

目录 1. 软件界面 2.工具包功能简介 3.软件安装注意事项 参考文献&#xff1a; Dukart J, Holiga S, Rullmann M, Lanzenberger R, Hawkins PCT, Mehta MA, Hesse S, Barthel H, Sabri O, Jech R, Eickhoff SB. JuSpace: A tool for spatial correlation analyses of magne…

逛好公园的好处

逛公园和软件开发看似是两个不同的活动&#xff0c;但它们之间存在一些有趣的关联和相互促进的关系&#xff1a; 激发创造力&#xff1a;公园中的自然景观、多样的人群以及各种活动能为开发者带来新的灵感和创意。软件开发过程中&#xff0c;从公园中获得的创意可以帮助开发者设…

【网络安全】 防火墙技术

防火墙是网络安全防御的重要组成部分&#xff0c;它的主要任务是阻止或限制不安全的网络通信。在这篇文章中&#xff0c;我们将详细介绍防火墙的工作原理&#xff0c;类型以及如何配置和使用防火墙。我们将尽可能使用简单的语言和实例&#xff0c;以便于初学者理解。 一、什么…

文档的预解析

1. 预解析的核心目标 浏览器在正式解析&#xff08;Parsing&#xff09;HTML 前&#xff0c;会启动一个轻量级的 预解析器&#xff08;Pre-Parser&#xff09;&#xff0c;快速扫描文档内容&#xff0c;实现&#xff1a; 提前发现并加载关键资源&#xff08;如 CSS、JavaScrip…

记一次表格数据排序优化(一)--排序30000条数据有多卡

目录 需求 第一次尝试 运行环境 思路 存储 排序 触发排序操作 如何实现高效的排序 关键1 关键2 关键3 磨刀不误砍柴工 关键4 代码 效果 卡顿原因分析 原因1 原因2 第二次尝试 需求 1 我的qt程序通过表格显示30000条数据。数据来自udp&#xff0c;udp每隔10秒…

图形渲染中的定点数和浮点数

三种API的NDC区别 NDC全称&#xff0c;Normalized Device Coordinates Metal、Vulkan、OpenGL的区别如下&#xff1a; featureOpenGL NDCMetal NDCVulkan NDC坐标系右手左手右手z值范围[-1,1][0,1][0,1]xy视口范围[-1,1][-1,1][-1,1] GPU渲染的定点数和浮点数 定点数类型&a…

【深度学习】CNN简述

文章目录 一、卷积神经网络&#xff08;CNN&#xff09;二、CNN结构特性1. CNN 典型结构2. 局部连接3. 权重共享4.空间或时间上的次采样 三、理解层面 一、卷积神经网络&#xff08;CNN&#xff09; 卷积神经网络(Convolutional Neural Network&#xff0c;CNN)是一种用于处理…

强化学习课程:stanford_cs234 学习笔记(3)introduction to RL

文章目录 前言7 markov 实践7.1 markov 过程再叙7.2 markov 奖励过程 MRP&#xff08;markov reward process&#xff09;7.3 markov 价值函数与贝尔曼方程7.4 markov 决策过程MDP&#xff08;markov decision process&#xff09;的 状态价值函数7.4.1 状态价值函数7.4.2 状态…

紫檀博物馆一游与软件开发

今天去逛了中国紫檀博物馆&#xff0c;里边很多层展品&#xff0c;也有一些清代的古物&#xff0c;檀木&#xff0c;黄花梨木家具和各种摆件&#xff0c;馆主陈丽华女士也是发心复原、保留和弘扬中国的传统文化&#xff0c;和西游记唐僧扮演者迟成瑞先生一家。 每一件展品都精…

RocketMQ初认识

ProducerCustomerNameServer: Broker的注册服务发现中心BrokerServer:主要负责消息的存储、投递和查询以及服务高可用保证 RocketMQ的集群部署&#xff1a; 单个master的分支多个Master 模式&#xff1a;集群中有多个 Master 节点&#xff0c;彼此之间相互独立。生产者可以将消…

Chrome开发者工具实战:调试三剑客

在前端开发的世界里&#xff0c;Chrome开发者工具就是我们的瑞士军刀&#xff0c;它集成了各种强大的功能&#xff0c;帮助我们快速定位和解决代码中的问题。今天&#xff0c;就让我们一起来看看如何使用Chrome开发者工具中的“调试三剑客”&#xff1a;断点调试、调用栈跟踪和…

C++/Qt 模拟sensornetwork的工作

C/Qt 可视化模拟sensornetwork的工作 C/Qt 模拟sensornetwork的工作 C/Qt 可视化模拟sensornetwork的工作内容简介&#xff08;一&#xff09; 需求和规格说明&#xff08;1&#xff09;问题描述&#xff08;2&#xff09;设计目的&#xff08;3&#xff09;基本要求&#xff0…

ffmpeg音频分析

对一个16k 单声道音频&#xff0c;生成频谱图 ./ffmpeg -i input.wav -lavfi "showspectrumpics800x400:modecombined:scalelin:gain1.5" spectrum.png

【多线程】CAS机制

目录 一. CAS的概念 二. CAS的原理 三.标准库中的CAS 四. CAS的应用 &#xff08;1&#xff09;原子类的使用 &#xff08;2&#xff09; 自旋锁的实现 五. CAS的ABA问题 一. CAS的概念 CAS&#xff08;Compare And Swap&#xff09;机制是一种无锁的并发控制技术&#…

音视频(四)android编译

前言 前面已经讲了在windows上应用了&#xff0c;这章主要讲述android上编译 1&#xff1a;环境 git 如果失败 直接跑到相应网站 手动下载 ubuntu22.* android ndk r21e download:https://developer.android.google.cn/ndk/downloads/index.html?hluk 为什么用这个&#xff0…

Chapter07_图像压缩编码

文章目录 图像压缩编码图像压缩编码基础图像压缩的基本概念信息相关信息冗余信源编码及其分类 图像编码模型信源编码器模型信源解码器模型 数字图像的信息熵信源符号码字平均长度信息熵信息量 变长编码费诺码霍夫曼编码 位平面编码格雷码 图像压缩编码 数字图像的压缩是指在满…