openwrt字符设备驱动开的概述

OpenWrt开发(4)-- 添加内核驱动模块 -- 读写寄存器 本文以建立一个能够读写寄存器数值的内核驱动模块来介绍如何给OpenWr添加内核驱动模块。 阅读详情
本此博文的主要目标在于:
对linux内核,驱动有初步的认识
文档上笔者给的建议是对linux内核不太了解的可以看看国嵌的linux视频,有很大的帮助(看来又有一个目标了啊)
1.应用程序、库、内核、驱动程序的关系,下面用一张图片来稍作说明:
1).应用程序使用库提供的open函数打开代表LED的设备文件
2).库根据open函数传入的参数执行SWI指令,该指令会引起CPU的异常,进入内核。
3).内核的一场处理函数根据这些参数找到相应的驱动程序,返回一个文件句柄给库,进而返回给应用程序
4).应用程序得到文件句柄以后,使用库提供的write或者ioct函数发出控制指令。
5).库根据write和ioct函数传入的参数执行“SWI”指令,这条指令会引起CPU异常,进入内核
6).内核的异常处理函数贵根据这些参数调用驱动程序的相关函数,点亮LED
库(比如 glibc)给应用程序提供的open read write ioctl mmap等接口的函数被称为系统调用,他们都是设置好相关的寄存器后,执行某条指令引发异常进入系统内核。除系统调用接口外,裤还提供其他函数,比如字符串处理函数(strcpy strcmp等)、输入/输出函数,数学库,还有应用程序的启动代码等

在异常处理函数函数中,内核会根据传入的参数执行各种动作,比如根据设备文件名找到对应的驱动程序,调用驱动程序的相关函数等。一般来说,当应用程序调用open,read,write,ioctl,mmap等函数以后,将会使用驱动程序的open,read,write,ioctl,mmap函数来执行相关的操作,比如初始化,读写等。实际上,内核和驱动程序之间并没有界限,因为驱动程序最终是要编进内核里的:这个是通过静态连接和动态的加载。

与应用程序不同,驱动程序从不主动运行,他是被动的;根据应用程序的要求初始化,根据应用程序的要求进行读写。驱动程序加载进内核时,只是告诉内核“我在这里,我能做这些工作”,只用于这些工作是何时开始的,取决于应用程序。当然,这不是绝对的,不如用户完全可以写一个系统时钟触发的驱动程序,让他自动点亮LED。

在LInux系统中,应用程序运行于“用户空间”,拥有MMU 的系统能够限制应用程序的权限(比如将他限制于某个内存块当中),这个可以避免应用程序的错误是整个系统崩溃。而驱动程序运行于“内核空间”,它是系统信任的一部分,驱动程序的错误有可能导致整个系统的崩溃


2.Linux驱动程序的分类

Linux的外设可以分为3类:字符设备,块设备和网络接口。

字符设备是能够像字节流(比如文件)一样被访问的设备,就是说对他的读写是以字节为单位的,比如串口在经行数据收发的时候就是一个字节一个字节进行的,我们可以在程序内部使用缓冲区来存放数据以提高效率,但是串口本身没有这个要求。字符设备的驱动程序中实现了open,close,read,write等系统调用,应用程序可以通过设备文件(比如/dev/ttySCA0等)来访问字符设备。

块设备上的数据是以快的形式存放的,比如NAND Flash上的数据就是以页为单位存放的。块设备驱动程序向用户层提供的接口与字符设备一样,应用程序也可以通过相应的设备文件(比如/dev/mtblock0,/dev/hda1等)来调用open,close,read,write等系统调用,与块设备传输任意数据。对用户而言,字符设备与块设备的访问方式没有差别。但是块设备驱动程序的特别之处如下。

1).操作硬件接口的实现方式不一样

块设备驱动程序先将用户发来的数据组织成块,再写入设备;或从设备中读出若干块的数据,再从中挑出用户需要的数据。

2).数据块上的数据可以有一定的格式。

通常在块设备中按照一定的格式存放数据,不同的文件系统给类型就是用来定义这些文件系统类型的。内核中,文件系统的层次位于块设备驱动程序上面,这意味着块设备驱动程序除了向用户层提供提供与字符设备一样的接口外,还要向内核其他部件提供一些接口,这些接口用户是看不到的,这些接口是使得可以在块设备上存放文件系统,挂载块设备。


3).网络接口同时具有字符设备,块设备的部分特点,无法将他归入这两类当中:如果说要他是字符设备,他的输入/输出却是有结构的,成块的(报文,包,帧);如果说他是块设备,他的“块”有不是固定大小的,大到数百甚至数千字节,小到几字节。

unix式的操作系统访问网络接口的方法是给他们分配一个唯一的名字(比如 eth0)但是这个名字在文件系统中(比如/dev 目录下)不存在对应的节点项。应用程序,内核和网络驱动程序件的通信完全不同于字符设备,块设备,库’内核提供了一套和数据包传输相关的函数,而不是open,read,和write。


3.简单的记录一下驱动程序的开发步骤:

Linux内核就是各种驱动组成的,内核源码中大约有85%是由各种驱动程序的代码







OpenWrt字符设备驱动开发:从核心框架到实战调试 字符设备驱动是Linux内核中三大设备驱动类型之一,它以字节流形式进行数据读写,是连接硬件与用户空间的关键桥梁。其核心原理基于“一切皆文件”的哲学,通过file_operations结构体定义设备能力,利用cdev结构体管理设备实例,并使用主次设备号进行系统标识。掌握字符设备驱动框架对于嵌入式开发至关重要,它使开发者能够为各类传感器、执行器或虚拟设备创建标准接口。在OpenWrt这一嵌入式Linux发行版中,驱动开发面临特定的编译、加载和调试挑战。本文通过一个完整的内存设备驱动示例,详细解析了从模块初始化、 阅读详情

相关推荐

OpenWrt字符设备驱动开发:从file_operations到硬件交互实战

在Linux内核驱动开发中,字符设备驱动是最基础且广泛应用的硬件交互方式,它通过file_operations结构体定义了一套标准的文件操作接口,使硬件能够以文件形式被访问。其核心原理在于将用户空间的系统调用(如read、write、ioctl)翻译为特定的硬件操作指令,通过设备号管理和cdev注册机制,在内核中建立设备与驱动的关联。这种设计模式的技术价值在于提供了统一、安全的硬件抽象层,使得开发者无需关心底层系统调用细节,只需专注于实现硬件控制逻辑。在嵌入式系统和物联网领域,字符设备驱动广泛应用于传感器数

weixin_30546189的博客 441

OpenWRT(五)驱动开发

一、OpenWRT中的驱动 Openwrt源码中,所有扩展的软件包到在package目录下,自己添加的应用放在该目录下。 所有扩展的内核驱动package/kernel目录下,自己添加的驱动放在该目录下。 二、添加驱动步骤 在package/kernel目录下添加一个helloworld文件夹 在helloworld添加一个Makefile文件。具体Makefile怎么写,我们先看两个ke

嵌入式软件开发交流 2万+

《OpenWrt开发笔记》第17章 驱动开发之字符设备驱动程序

17.1 配置编译驱动程序首先将 f403tech_drv (参见文末下载链接)文件夹传到 OpenWrt 源码的openwrt/trunk/package/kernel 目录下。然后进入 OpenWrt 源码的顶层目录,执行 makemenuconfig。 注意:至于f403tech_drv的内容,建议初学者按照步骤做就是了,不必追问细节,初学者应该知道openwrt驱动开发流程,代码的具体实现

不问归期的博客 2208

工业网关开发:Openwrt系统开发流程

本篇介绍了如何从官方开源网站,如何一步一步来搭建自己网关产品的嵌入式Linux系统,如何开发安装业务app以及定制后台web控制界面。

十六宿舍的博客 5633

《OpenWrt开发笔记》第16章 驱动开发之字符设备驱动程序框架

16.1 字符设备驱动程序框架简介我们在学习 C 语言的时候,知道每个应用程序的入口函数,即第一个被执行的函数是 main函数,那么,我们自己的驱动程序,哪个函数是入口函数呢? 在写驱动程序的时候,如果函数的名字可以任意取,常常为 xxxx_init(),当实现好这个 xxxx_init()函数以后,内核其实并不知道这个就是我们驱动的入口函数,因此我们要想办法告诉内核,我们的入口函数是哪个?我们通

不问归期的博客 2356

《OpenWrt开发笔记》第18章 驱动开发之字符设备应用程序

18.1 编写应用程序在前面的章节中, 我们成功的写出了我们自己的驱动程序, 并且向应用程序提供了 open、read、write 三个接口,那么接下来我们就来编写应用程序,调用这些接口。#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> int main(int argc, char

不问归期的博客 1427

openwrt开发--驱动程序IPK包开发(GPIO控制)

openwrt下的驱动开发范例,并且配合用户侧程序,实现了对GPIO的操作。

小人物的编程 1893

《OpenWrt开发笔记》第15章 驱动开发之字符设备驱动程序之概念介绍

15.1应用程序、库、内核、驱动程序的关系从上到下,一个软件系统可以分为:应用程序、库、操作系统(内核)、驱动程序。开发人员可以专注于自己熟悉的部分,对于相邻层,只需要了解它的接口,无需关注它的实现细节。 以点亮一个 LED 为例,这 4 层软件的协作关系如下,如图 1 所示 图1 1). 应用程序使用库提供的 open 函数打开代表 LED 的设备文件。 2). 库根据 open 函

不问归期的博客 2190

基于Openwrt系统架构,实现应用与驱动的实例。

基于Openwrt系统架构,实现应用与驱动的实例。

zhouwu_linux的专栏 1755

OpenWRT字符设备驱动开发实战指南

在Linux系统中,设备驱动是连接硬件与用户空间程序的核心桥梁。字符设备作为三大基础设备类型之一(另两类为块设备与网络设备),其特点是按字节流方式进行访问,不经过文件系统缓存机制,适用于如串口、GPIO、键盘、传感器等直接读写场景。字符设备驱动程序通常以模块形式存在于内核中,通过结构体绑定操作函数,如openreadwrite等,实现与用户空间的交互。其注册流程涉及设备号申请、cdev结构初始化与注册,以及设备类与设备节点的创建。

weixin_42402664的博客 708

2.openwrt 驱动开发源码(字符设备)

路由器开发openwrt系统驱动源码字符设备模板,PDF文档说明 路由器开发openwrt系统驱动源码字符设备模板,PDF文档说明

OpenWRT(七)字符设备驱动开发

一、字符设备驱动 我们之前学习过驱动程序的开发,接下来我们接着深入学习字符设备驱动程序的开发。字符设备驱动是比较简单的一种驱动。主要在于实现init、exit、open、read、write等函数。 二、字符设备驱动实例 1、在package/kernel/文件夹下新建一个chardrv文件夹 2、在chardrv文件夹下新建一个Makefile文件,内容如下: # # C

嵌入式软件开发交流 2万+

华为星闪SLE实战:手把手教你用HarmonyOS开发智能家居控制应用(附完整代码)

本文详细介绍了如何利用华为星闪SLE技术,结合HarmonyOS开发智能家居控制应用。通过对比传统无线技术,阐述了星闪SLE在低时延、高可靠性和高并发方面的优势,并提供了从环境搭建、设备发现、连接管理到核心控制代码的完整实战教程,帮助开发者快速上手这一无线短距通信技术。

bert9linguist的博客 506

8.openwrt char字符设备驱动原型

1.文件结构和在源码中的位置 字符设备的驱动一般位于 package/kernel 目录下面,文件结构如下: test@test-Inspiron-3670:~/work/openwrt1505_mt7628/package/kernel$ tree mydrv/ mydrv/ ├── Makefile └── src ├── Makefile └── mydrv.c 2.文件介...

liupeng08304的专栏 325

LPDDR4协议规范之 (四)命令和时序

LPDDR4协议规范之 (四)命令和时序命令真值表激活操作读写访问操作读前沿和后沿突发读取操作流程读操作时序写前沿和后沿突发写操作写入均衡(待更新) 命令真值表 激活操作 ACTIVATE命令由两个连续命令组成,Activate-1命令和Activate-2。通过在(Activate-1)时钟的第一个上升沿保持CS HIGH,CA0 HIGH和CA1 LOW来发出Activate-1命令,通过...

YJFeiii的博客 2万+

第二章:创建交互式地图

那么您应该已经有了一个安装了这些包的 conda 环境。否则,您需要创建一个新的 conda 环境并使用以下命令安装。

韩天放 4215

openwrt之字符设备驱动开发示例

第四章 字符设备驱动及应用程序模板测试 字符设备驱动软件包测试 1. 将模板 mydrv 放到 openwrt 源码特定目录 openwrt/package/kernel/下 2. 配置对该驱动的编译支持 $ cd openwrt $ make menuconfig # 选择 Kernel modules -&gt; Other modules -&gt; kmod...

北京-大白的博客 1180

音频链路分析

音频链路分析摘要 本文分析了蓝牙音频设备(BES2700)的音频传输链路,主要包括通话和音乐播放两种场景: 通话链路: 下行:蓝牙接收数据→解码→通过Codec输出到扬声器 上行:麦克风采集→Codec处理→蓝牙编码发送 音乐播放链路: 通过A2DP协议接收高质量音频数据 经过解码、EQ调节等音频处理后输出 系统采用多线程消息机制处理音频任务,通过mailbox传递控制消息,由回调函数处理具体音频数据流。不同应用场景使用不同的蓝牙协议栈(HFP/HSP用于通话,A2DP用于媒体)和编码方式(mSBC/SBC

云淡风轻 85

OpenWrt字符设备驱动开发:从cdev框架到GPIO实战

字符设备驱动是Linux内核中用于管理以字节流形式访问的硬件(如串口、GPIO设备)的基础机制。其核心原理是通过file_operations结构体定义open、read、write等系统调用的处理函数,实现用户空间与内核空间的安全数据交互(如使用copy_to_user)。这一技术价值在于为应用程序提供了统一的硬件抽象接口,是嵌入式系统(如路由器、物联网网关)中控制按键、传感器等外设的关键。在OpenWrt这一嵌入式Linux发行版中,开发字符设备驱动需遵循其特定的构建系统与环境,并常涉及GPIO子系统与

weixin_30698297的博客 515

微信小程序|基于小程序+云开发制作一个菜谱小程序

今天吃什么?这是一个让强迫症左右为难的问题,跟随此文基于小程序+云开发制作一个菜谱小程序,根据现有食材一键生成菜谱,省心又省力。

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 1万+

YOLO26改进策略【模型轻量化】| 替换骨干网络为 2024轻量化网络MoblieNetV4:移动生态系统的通用模型

本文记录的是基于MobileNet V4的YOLO26目标检测轻量化改进方法研究。主要用于轻量化应用部署,相关轻量化改进与其整体架构非常适配。通过整合、以及优化的,能够在在不降低性能指标的前提下,降低计算成本。本文配置了原论文中、、、和五种模型,以满足不同的需求。MobileNetV4: Universal Models for the Mobile Ecosystem是一系列适用于移动生态系统的通用高效模型。以下将详细介绍其轻量化设计的出发点、原理、结构和优势:的实现代码如下: 四、修改步骤 4.1 修

Limiiiing的博客 827

openwrt之字符设备驱动开发

第二章 字符设备驱动开发及相关概念 应用程序、库、内核、驱动程序的关系 以驱动LED为例: 应用程序使用库提供的 open 函数打开代表 LED 的设备文件。 库根据 open 函数传入的参数执行SWI指令,该指令会引起 CPU 异常,进入内核。 内核的异常处理函数根据这些参数找到相应的驱动程序,返回一个文件句柄给库, 进而返回给应用程序 应用程序得到文件句柄后,使用库提供的 ...

北京-大白的博客 597

10步掌握!跨国企业在MySQL中实现数据主权的秘诀 vs. 传统方法,你选对了吗?

首先,我们要明确“数据主权”这一概念。简单来说,它指的是国家对其境内产生的所有类型的数据拥有绝对控制权。这意味着即使数据被存储在国外服务器上,只要该数据来源于某国,那么该国政府就有权对其进行监管。对于跨国公司来说,这就要求它们必须严格遵循不同国家关于数据保护的规定,如欧盟的GDPR、美国的《云法案》以及中国的《网络安全法》等。

java专栏 714

OpenWrt字符设备驱动开发:从内核原理到实战实现

在嵌入式Linux系统开发中,设备驱动是连接硬件与操作系统的核心桥梁。其基本原理在于,驱动程序作为内核的一部分,运行在特权模式,能够直接管理和访问硬件资源,而用户空间程序则通过内核提供的统一接口(如文件操作)进行间接调用。这种架构确保了系统的安全性和稳定性,其技术价值在于为多样化的硬件提供了标准化的访问方式。在路由器、物联网终端等嵌入式应用场景中,开发者常需为特定外设(如GPIO、I2C传感器)编写驱动以实现定制功能。本文聚焦于OpenWrt平台,深入解析字符设备驱动的开发框架,涵盖主次设备号、file_o

weixin_30352191的博客 243

【nnUNetv2进阶】四、nnUNetv2 魔改网络-小试牛刀-加入注意力机制ChannelAttention

本文介绍了在nnunet中加入ChannelAttention的方法,按照本文教的教程,可以快速完成ChannelAttention的加入和自定义模型的跑通。

AI爱好者的博客,分享计算机领域相关知识 5800

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

openwrt之字符设备GPIO驱动

第五章 GPIO驱动 GPIO操作的几种方式 1. 在文件系统中使用寄存器REG工具直接操作 # reg Usage : reg r addr Usage : reg w addr value # 读 # reg r 0x10000000 # 写 # reg w 0x10000064 0x552 # reg w 0x10000064 0x550 ...

北京-大白的博客 2957

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

上一篇: 关于添加openwrt软件包的概述
下一篇: 备份一个Makefile文档,供以后参考
maclinuxye
博客等级 码龄11年 10粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值