当前位置: 首页 > news >正文

arm64架构的linux 配置vm_page_prot方式

在 ARM64 架构上,通过 `vm_page_prot` 属性可以修改 `UIO` 映射内存的访问权限及缓存策略,常见的有非缓存(Non-cached)、写合并(Write Combine)等。下面是 ARM64 常用的 `vm_page_prot` 设置及其对应的操作方式。

### 1. **非缓存模式 (`pgprot_noncached`)**

ARM64 系统通常使用 `pgprot_noncached` 来设置非缓存模式,适用于访问要求严格顺序且不使用缓存的设备内存,例如 MMIO 区域。

#### 用法

```c
vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
```

此设置确保所有访问都是直接进行,不经过 CPU 缓存,以避免数据不一致的问题。

### 2. **写合并模式 (`pgprot_writecombine`)**

对于一些需要快速写入、但不强制严格顺序的设备内存(如帧缓冲区),可以使用 `pgprot_writecombine` 设置写合并模式。在写合并模式下,写操作会被合并以提高性能,但数据写入顺序不保证严格一致。

#### 用法

```c
vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
```

写合并模式适合需要高效写入的数据区域,但在读写时要注意顺序一致性问题。

### 3. **默认缓存模式(`pgprot_cached`)**

在 ARM64 上,`pgprot_cached` 是内存的默认缓存模式,适合普通的内存映射,不适合 MMIO 等不要求缓存的设备。通常情况下,`UIO` 映射设备内存时不使用此模式,但有些驱动需要时也可以指定:

```c
vma->vm_page_prot = pgprot_cached(vma->vm_page_prot);
```

### 4. **完全禁用缓存和写缓冲**

在一些特殊情况下,可能需要完全禁用缓存和写缓冲,这可以通过 `pgprot_device` 来实现。这种模式下,所有的读写顺序和数据完整性都严格受控,适合敏感的硬件寄存器访问。

#### 用法

```c
vma->vm_page_prot = pgprot_device(vma->vm_page_prot);
```

### 示例:ARM64 `UIO` 驱动中配置 `vm_page_prot`

下面是一个在 `UIO` 驱动 `mmap` 函数中,根据设备需要设置 `vm_page_prot` 属性的示例:

```c
static int my_uio_mmap(struct uio_info *info, struct vm_area_struct *vma)
{
    // 设置非缓存模式,适用于 MMIO 区域
    vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);

    // 配置权限
    vma->vm_flags |= (VM_READ | VM_WRITE);

    // 映射物理地址
    if (remap_pfn_range(vma, vma->vm_start,
                        info->mem[0].addr >> PAGE_SHIFT,
                        vma->vm_end - vma->vm_start,
                        vma->vm_page_prot)) {
        return -EAGAIN;
    }

    return 0;
}
```

### 注意事项
- **根据设备需求选择合适的模式**:例如,对于顺序要求严格的设备寄存器,使用非缓存模式(`pgprot_noncached`)或设备模式(`pgprot_device`)。
- **确保页面对齐**:`remap_pfn_range` 中的物理地址和大小应按页面大小对齐,以避免 `bus error`。
- **调整权限和缓存模式**:根据具体需求配置 `vm_page_prot`,以满足设备内存的访问需求。

相关文章:

arm64架构的linux 配置vm_page_prot方式

在 ARM64 架构上,通过 vm_page_prot 属性可以修改 UIO 映射内存的访问权限及缓存策略,常见的有非缓存(Non-cached)、写合并(Write Combine)等。下面是 ARM64 常用的 vm_page_prot 设置及其对应的操作方式。…...

vue3 + naive ui card header 和 title 冲突 bug

背景描述 最近发现一个 naive ui 上的问题,之前好好的,某一次升级后就出现了一个 bug,Modal 使用 card 布局后,Header Solt 下面的内容不见了,变成了 title,因为这个 solt 里面是有操作 action 的&#xf…...

Ubuntu 22.04.5 LTS配置 bond

本次纯实验,不会讲解bond功能,配置bond mode 1 和 mode 4 如何配置 确定内核模块是否加载 实验使用root用户权限,非root用户使用sudo 调用root权限 rootubuntu22:~# lsmod | grep bonding rootubuntu22:~# modprobe bonding rootubuntu22:~# …...

100种算法【Python版】第58篇——滤波算法之卡尔曼滤波

本文目录 1 算法步骤2 算法示例2.1 示例描述2.2 python代码3 算法应用:二维运动目标跟踪问题滤波算法是用于从信号中提取有用信息、去除噪声或估计系统状态的技术。在时间序列分析、信号处理和控制系统中,滤波算法起着关键作用。 1 算法步骤 卡尔曼滤波(Kalman Filter)的…...

关于几种卷积

1*1卷积 分组卷积&深度可分离卷积 空洞卷积、膨胀卷积 转置卷积 https://zhuanlan.zhihu.com/p/80041030 https://yinguobing.com/separable-convolution/#fn2 11的卷积可以理解为对通道进行加权,对于一个通道来说,每个像素点加权是一样的&am…...

51单片机教程(五)- LED灯闪烁

1 项目分析 让输入/输出口的P1.0或P1.0~P1.7连接的LED灯闪烁。 2 技术准备 1、C语言知识点 1 运算符 1 算术运算符 #include <stdio.h>int main(){// 算术运算符int a 13;int b 6;printf("%d\n", ab); printf("%d\n", a-b); printf("%…...

VUE3中Element table表头动态展示合计信息(不是表尾合计)

一、背景 原型上需要对两个字段动态合计&#xff0c;输出摘要信息 原先想到是的Element的 :summary-method&#xff0c;发现不是动态&#xff0c;所以换监听来实现 二、vue代码 <el-table v-model"loading" :data"itemList"><el-table-column la…...

git重置的四种类型(Git Reset)

git区域概念 1.工作区:IDEA中红色显示文件为工作区中的文件 (还未使用git add命令加入暂存区) 2.暂存区:IDEA中绿色(本次还未提交的新增的文件显示为绿色)或者蓝色(本次修改的之前版本提交的文件但本次还未提交的文件显示为蓝色)显示的文件为暂存区中的文件&#xff08;使用了…...

【Java集合面试1】说说Java中的HashMap原理?

Java中的HashMap是一种基于哈希表的Map接口实现&#xff0c;它存储的内容是键值对&#xff08;key-value&#xff09;映射。HashMap允许空键&#xff08;null&#xff09;和空值&#xff08;null&#xff09;&#xff0c;并且它的键值对没有顺序。以下是HashMap的一些关键工作原…...

万字长文解读机器学习——决策树

&#x1f33a;历史文章列表&#x1f33a; 机器学习——损失函数、代价函数、KL散度机器学习——特征工程、正则化、强化学习机器学习——常见算法汇总机器学习——感知机、MLP、SVM机器学习——KNN机器学习——贝叶斯机器学习——决策树机器学习——随机森林、Bagging、Boostin…...

内网环境,基于k8s docer 自动发包

背景&#xff1a;生产环境是内网&#xff0c;无法连接外部git环境&#xff0c;需要上传tar包打成镜像&#xff0c;然后发布。 简单写了个脚本&#xff0c;记录下方便复用。 将tar包和脚本拷贝到同一个目录下。 使用方式&#xff1a; tar 包名称格式&#xff1a;服务名-版本号…...

【HCIP园区网综合拓扑实验】配置步骤与详解(已施工完毕)

一、实验要求 实验拓扑图如上图所示 1、按照图示的VLAN及IP地址需求&#xff0c;完成相关配置 2、要求SW1为VLAN 2/3的主根及主网关 SW2为vlan 20/30的主根及主网关 SW1和SW2互为备份 3、可以使用super vlan&#xff08;本实验未使用&#xff09; 4、上层…...

Qt 编写插件plugin,支持接口定义信号

https://blog.csdn.net/u014213012/article/details/122434193?spm1001.2014.3001.5506 本教程基于该链接的内容进行升级&#xff0c;在编写插件的基础上&#xff0c;支持接口类定义信号。 环境&#xff1a;Qt5.12.12 MSVC2017 一、创建项目 新建一个子项目便于程序管理【…...

Qt中 QWidget 和 QMainWindow 区别

QWidget 用来构建简单窗口 QMainWindow 用来构建更复杂的窗口&#xff0c;QMainWindow 继承自QWidget&#xff0c;在QWidget 的基础上提供了菜单栏、工具栏、状态栏等功能 菜单栏&#xff08;QMenuBar&#xff09;工具栏&#xff08;QToolBar&#xff09;状态栏&#xff08;Q…...

Kafka集群中数据的存储是按照什么方式存储的?

1&#xff09;Topic 数据的存储机制 Topic是逻辑上的概念&#xff0c;而partition是物理上的概念&#xff0c;每个partition对应于一个log文件&#xff0c;该log文件中存储的就是Producer生产的数据。Producer生产的数据会被不断追加到该log文件末端&#xff0c;为防止log文件…...

中断的硬件框架

往期内容 本专栏往期内容&#xff0c;interrtupr子系统&#xff1a; 深入解析Linux内核中断管理&#xff1a;从IRQ描述符到irq domain的设计与实现Linux内核中IRQ Domain的结构、操作及映射机制详解中断描述符irq_desc成员详解Linux 内核中断描述符 (irq_desc) 的初始化与动态分…...

数据备份策略:企业防御的关键

数据备份是保护数据免受网络攻击的重要步骤。在从恶意软件或勒索软件攻击中恢复时&#xff0c;公司可以使用保存的备份将其恢复到之前的状态。但是&#xff0c;为了确保数据的完全安全&#xff0c;任何公司的备份策略都应该在其总体策略中包含多种解决方案。 根据关于创建、消…...

Baget 私有化nuget

Baget下载 1、下载运行 方法一&#xff1a;cmd运行 dotnet BaGet.dll --urls http://*:8002 http://localhost:8002 方法二&#xff1a;bat脚本运行Baget 创建Start.bat dotnet BaGet.dll --urls http://*:8002 运行Start.bat 方法三&#xff1a;部署成Window服务 NSSM部…...

前端函数的参数都有哪些?

在前端开发中&#xff0c;函数的分类可以根据不同的标准进行。以下是一些常见的函数分类方式&#xff0c;并附有相应的例子&#xff1a; 按传递方式分类&#xff1a; 按值传递&#xff1a;JavaScript 中的基本类型&#xff08;如数字、字符串、布尔值&#xff09;都是按值传递的…...

【CSS】什么是BFC?

块级格式化上下文&#xff08;Block Formatting Context&#xff0c;简称BFC&#xff09;是CSS布局中的一种重要概念&#xff0c;它决定了块级盒子如何在其容器内排列&#xff0c;以及浮动元素对其周围元素的影响。理解BFC可以帮助解决许多常见的网页布局问题&#xff0c;比如清…...

HCIP小型园区网拓扑实验

1.拓扑以及需求 2.需求分析 需要的核心技术 1、虚拟局域网&#xff08;VLAN&#xff09; 2、链路聚合&#xff08;E-trunk&#xff09; 3、多生成树协议&#xff08;MSTP&#xff09; 4、VLANIF三层逻辑接口 5、虚拟路由冗余协议&#xff08;VRRP&#xff09; 6、动态主…...

GRR测量系统的重复性和再现性

GRR&#xff08;GaugeRepeatabilityandReproducibility&#xff09;即测量系统的重复性和再现性&#xff0c;是用于评估测量系统性能的一个重要指标。以下是对GRR的详细解释&#xff1a; 一、定义 • 重复性&#xff08;Repeatability&#xff09;&#xff1a;在相同条件下&…...

133.鸿蒙基础01

鸿蒙基础 1.自定义构建函数1. 构建函数-[Builder ](/Builder )2. 构建函数-传参传递(单向)3. 构建函数-传递参数(双向)4. 构建函数-传递参数练习5. 构建函数-[BuilderParam ](/BuilderParam ) 传递UI 2.组件状态共享1. 状态共享-父子单向2. 状态共享-父子双向3. 状态共享-后代组…...

科技查新小知识

首先科技查新是什么&#xff1f; 科技查新是文献检索和情报调研相结合的情报研究工作&#xff0c;它以文献为基础&#xff0c;以文献检索和情报调研为手段&#xff0c;以检出结果为依据&#xff0c;通过综合分析&#xff0c;对查新项目的新颖性进行情报学审查&#xff0c;写出有…...

docker安装portainer

1、拉取镜像 docker pull portainer/portainer-ce:latest2、执行 docker run -d --restartalways --name portainer -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v /data/portainer/data:/data -v /data/portainer/public:/public portainer/portain…...

【Word2Vec】传统词嵌入矩阵训练方法

目录 1. Word2Vec 简介2. Word2Vec 的训练方法2.1 Skip-Gram模型2.2 CBOW&#xff08;Continuous Bag of Words&#xff09;模型 3. Word2Vec 中的词嵌入表示4. 训练过程中是否使用独热编码&#xff1f; 1. Word2Vec 简介 Word2Vec 是一种词嵌入模型&#xff0c;主要通过无监督…...

电脑不显示wifi列表怎么办?电脑不显示WiF列表的解决办法

有用户会遇到电脑总是不显示wifi列表的问题&#xff0c;但是不知道要怎么解决。随着无线网络的普及和使用&#xff0c;电脑无法显示WiFi列表的问题有时会让人感到困扰。电脑不显示WiFi列表是很常见的问题&#xff0c;但这并不意味着你无法连接到网络。不用担心&#xff0c;这个…...

详解 Dockerfile:从入门到实践

Docker 是一个开源的应用容器引擎&#xff0c;它允许开发者将应用及其依赖包打包到一个可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器或 Windows 机器上&#xff0c;也可以实现虚拟化。Dockerfile 是一个文本文件&#xff0c;其中包含了一系列命令&#xff0c;用…...

随机变量的概率分布

第 5 章——概率分布 5.2 随机变量的概率分布 【例5-1】 计算期望值、方差、标准差 【代码框5-1】 计算期望值、方差、标准差 import pandas as pd import numpy as np example5_1 = pd.read_csv(./pydata/example/chap05/example5_1.csv)# 计算期望值 mymean = sum...

Kafka生产者如何提高吞吐量?

批量发送&#xff1a;生产者可以配置 batch.size 参数&#xff0c;将多个消息打包成一个批次发送。这样可以减少网络通信的次数&#xff0c;提高吞吐量。inger.ms&#xff1a;设置 linger.ms 参数&#xff0c;可以让生产者在发送消息前等待一段时间&#xff0c;以便收集更多的消…...

沧州地区做网站/外贸业务推广

一、字符串1.字符串的出现计算机发明初期&#xff0c;计算机主要用于做一些科学和工程的计算&#xff1b;而且刚开始计算机都是用来处理数值型的数据&#xff0c;后来引入了字符串的概念&#xff0c;计算机才开始进行非数值型数据的处理(其原理仍然是通过数值来模拟非数值&…...

群晖 wordpress端口/seo快速排名案例

1、查询数据库版本&#xff1a; 查询数据库大版本号&#xff1a; Select * from v$version; 查询小版本号&#xff1a; Select id_code; 2、表空间相关信息查询 查询数据文件和联机日志文件信息 select b.tablespace_name, b.file_name, b.bytes/1024/1024 size_m from dba…...

dnf网站上怎么做商人/上海今天最新新闻10条

一、关键字执行顺序1、查询中用到的关键词主要包含六个&#xff0c;并且他们的顺序依次为 &#xff1a;select--from--where--group by--having--order by 其中select和from是必须的&#xff0c;其他关键词是可选的。这六个关键词的执行顺序&#xff0c;与sql语句的书写顺序并不…...

网站里怎样做物流跟踪功能/长沙优化科技有限公司

2019独角兽企业重金招聘Python工程师标准>>> 转自:http://blog.csdn.net/java_min/article/details/5943077 EL表达式的使用前提是&#xff0c;容器必须在2.4及以上版本。 EL表达式中有隐式对象&#xff0c;pageScope,requestScope,sessionScope,applicationScope …...

dedecms可以做什么网站/搜外友链

0. 目录 1. 插件介绍 2. 安装方式 3.使用方法 1. 插件介绍 JRebel插件 使用IDEA开发时修改了html或js或java代码都需要编译启动浪费了很多时间&#xff0c;所以可以借助热部署插件实现自动编码&#xff0c;每次修改完代码保存后就可以刷新页面看效果很方便&#xff0c;无需…...

建设网站元素搜索引擎/网站优化方案设计

c语言 函数的参数传递示例C语言中的rename()函数 (rename() function in C) The rename() function is defined in the <stdio.h> header file. 在<stdio.h>头文件中定义了rename()函数 。 Prototype: 原型&#xff1a; int rename(const char* old-filename, co…...