Linux驱动开发入门

简介: Linux驱动开发入门

前言

本篇文章将带大家学习如何去编写Linux的驱动程序。(文中一些资源将取自百问网)


一、单片机程序和Linux程序的比较

1.单片机和Linux驱动程序和应用程序概述

单片机程序和Linux程序都可以被分成应用程序和驱动程序,但是单片机的驱动程序和应用程序没有严格的界限,而在Linux中驱动程序和应用程序有严格的界限。

能力强的人将单片机程序分为应用程序和驱动程序,驱动程序就是去操作寄存器的。能力较弱的人会将它们都放在一起。

Linux程序中应用程序和驱动程序是必须分开的,这是强制要求的。


2. Linux强制被分为驱动程序和应用程序的原因

驱动程序主要是和硬件打交道的,如果有心思坏的人就可以通过代码去操作硬件将硬件损坏,所以在Linux中是绝对不允许直接操作硬件的。


3.MMU内存管理单元

单片机又叫做MCU,MCU不存在MMU所以可以直接访问到硬件资源。

而MPU中存在MMU,MMU管理资源访问,使得应用程序无法直接访问到硬件资源。

![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/cdb083196fd14e7d80db257331a29266.png


二、Linux如何访问到驱动程序

1.访问驱动程序

通过上面的分析Linux的应用程序是无法直接访问到驱动程序的,那Linux是如何访问驱动程序的呢,通过下面的图片我们可以得知APP程序需要提供标准的open,read,write函数去访问驱动程序。

d1ae4d8005cc47de9b74535b26bc71ab.png

有很多人误认为通过调用这些函数就可以直接进入驱动程序了,其实这是不正确的。当open,read,write被调用时会触发swi中断,当触发了swi中断后cpu会进入内核态,内核会提供sys_open,sys_read,sys_write等函数去找到对应的驱动程序函数,从而调用到驱动程序的这些函数。

daa451b800804baf827f67f2fe1fb9c7.png

2.怎么找到对应的驱动程序

在内核里面有非常多的驱动程序那我们怎么去找到我们想要的驱动程序呢?我们需要注册一个file_operations结构体,注册完这个结构体后会根据主设备号将其放入chrdev结构体中保存下来。


三、怎么写驱动

根据上面分析我们需要提供相关的drive_open,drive_read,drive_write这些函数供应用程序访问。

在Linux中有这些一个结构体我们只需要构造对应的结构体去实现相关的函数即可。具体内容下一篇文章讲解。

7f3cd97c12e448dfabb6cc6977f7db66.png

总结

通过上面这些内容相信大家对驱动的认识有了进一步的了解。

相关文章
|
1月前
|
存储 网络协议 Ubuntu
【Linux开发实战指南】基于UDP协议的即时聊天室:快速构建登陆、聊天与退出功能
UDP 是一种无连接的、不可靠的传输层协议,位于IP协议之上。它提供了最基本的数据传输服务,不保证数据包的顺序、可靠到达或无重复。与TCP(传输控制协议)相比,UDP具有较低的传输延迟,因为省去了建立连接和确认接收等过程,适用于对实时性要求较高、但能容忍一定数据丢失的场景,如在线视频、语音通话、DNS查询等。 链表 链表是一种动态数据结构,用于存储一系列元素(节点),每个节点包含数据字段和指向下一个节点的引用(指针)。链表分为单向链表、双向链表和循环链表等类型。与数组相比,链表在插入和删除操作上更为高效,因为它不需要移动元素,只需修改节点间的指针即可。但访问链表中的元素不如数组直接,通常需要从
113 2
|
7天前
|
编解码 安全 Linux
基于arm64架构国产操作系统|Linux下的RTMP|RTSP低延时直播播放器开发探究
这段内容讲述了国产操作系统背景下,大牛直播SDK针对国产操作系统与Linux平台发布的RTMP/RTSP直播播放SDK。此SDK支持arm64架构,基于X协议输出视频,采用PulseAudio和Alsa Lib处理音频,具备实时静音、快照、缓冲时间设定等功能,并支持H.265编码格式。此外,提供了示例代码展示如何实现多实例播放器的创建与管理,包括窗口布局调整、事件监听、视频分辨率变化和实时快照回调等关键功能。这一技术实现有助于提高直播服务的稳定性和响应速度,适应国产操作系统在各行业中的应用需求。
|
5天前
|
存储 Ubuntu Linux
Linux基础入门
Linux基础入门
11 1
|
1月前
|
Web App开发 缓存 Linux
FFmpeg开发笔记(三十六)Linux环境安装SRS实现视频直播推流
《FFmpeg开发实战》书中第10章提及轻量级流媒体服务器MediaMTX,适合测试RTSP/RTMP协议,但不适合生产环境。推荐使用SRS或ZLMediaKit,其中SRS是国产开源实时视频服务器,支持多种流媒体协议。本文简述在华为欧拉系统上编译安装SRS和FFmpeg的步骤,包括安装依赖、下载源码、配置、编译以及启动SRS服务。此外,还展示了如何通过FFmpeg进行RTMP推流,并使用VLC播放器测试拉流。更多FFmpeg开发内容可参考相关书籍。
49 2
FFmpeg开发笔记(三十六)Linux环境安装SRS实现视频直播推流
|
1月前
|
Linux
FFmpeg开发笔记(三十四)Linux环境给FFmpeg集成libsrt和librist
《FFmpeg开发实战》书中介绍了直播的RTSP和RTMP协议,以及新协议SRT和RIST。SRT是安全可靠传输协议,RIST是可靠的互联网流传输协议,两者于2017年发布。腾讯视频云采用SRT改善推流卡顿。以下是Linux环境下为FFmpeg集成libsrt和librist的步骤:下载安装源码,配置、编译和安装。要启用这些库,需重新配置FFmpeg,添加相关选项,然后编译和安装。成功后,通过`ffmpeg -version`检查版本信息以确认启用SRT和RIST支持。详细过程可参考书中相应章节。
49 1
FFmpeg开发笔记(三十四)Linux环境给FFmpeg集成libsrt和librist
|
5天前
|
Ubuntu Linux Shell
Linux 终端入门
Linux 终端入门
7 0
|
5天前
|
安全 网络协议 Linux
保护你的 Linux VPS:入门指南
保护你的 Linux VPS:入门指南
9 0
|
1月前
|
弹性计算 运维 自然语言处理
阿里云OS Copilot测评:重塑Linux运维与开发体验的智能革命
阿里云OS Copilot巧妙地将大语言模型的自然语言处理能力与操作系统团队的深厚经验相结合,支持自然语言问答、辅助命令执行等功能,为Linux用户带来了前所未有的智能运维与开发体验。
|
1月前
|
SQL 自然语言处理 网络协议
【Linux开发实战指南】基于TCP、进程数据结构与SQL数据库:构建在线云词典系统(含注册、登录、查询、历史记录管理功能及源码分享)
TCP(Transmission Control Protocol)连接是互联网上最常用的一种面向连接、可靠的、基于字节流的传输层通信协议。建立TCP连接需要经过著名的“三次握手”过程: 1. SYN(同步序列编号):客户端发送一个SYN包给服务器,并进入SYN_SEND状态,等待服务器确认。 2. SYN-ACK:服务器收到SYN包后,回应一个SYN-ACK(SYN+ACKnowledgment)包,告诉客户端其接收到了请求,并同意建立连接,此时服务器进入SYN_RECV状态。 3. ACK(确认字符):客户端收到服务器的SYN-ACK包后,发送一个ACK包给服务器,确认收到了服务器的确
158 1
|
29天前
|
Ubuntu Linux Docker
Java演进问题之Alpine Linux创建更小的Docker镜像如何解决
Java演进问题之Alpine Linux创建更小的Docker镜像如何解决