新闻详情

新闻详情

首页 / 资讯中心 / 详情

鸿蒙高级——内存专用之linux-reserve-memory 方案小结(二)

发布时间:2026/9/30 6:38:28来源:尧图网络
鸿蒙高级——内存专用之linux-reserve-memory 方案小结(二)
文章大纲引言一、普通进程访问使用预留内存1、先mmap映射到用户空间后再访问2、使用 /dev/mem 直接访问物理内存2.1、启用 /dev/mem2.2、映射物理地址2.3、用户空间通过dev/mem访问3、通过 UIO(Userspace I/O)框架3.1、UIO 的主要功能3.1.1、内存映射3.1.2、中断处理3.2、设备发现3.3、UIO 的使用步骤3.4、UIO安全增强建议3.4.1、最小化权限:用户程序以非 root 权限运行,结合 setcap 授予必要能力:3.4.2、SELinux/AppArmor:限制 UIO 设备文件的访问策略。3.4.3、内存保护:通过 mprotect 限制用户空间内存区域的读写权限3.5、查看 UIO 设备信息3.6、监控中断4、通过内核驱动程序映射4.1、编写内核驱动4.2、用户空间访问二、内核空间访问(驱动/内核模块)的例子1、映射物理内存到内核虚拟地址2、直接物理地址访问(DMA场景)3、使用 CMA(Contiguous Memory Allocator)三、内存管理策略1、分配方式2、内存保护四、用户进程 vs 内核进程访问预留内存1、访问方式1.1、普通进程1.2、内核进程2、权限控制2.1、普通进程2.2、内核进程3、内存管理3.1、普通进程3.2、内核进程4、安全性4.1、普通进程4.2、内核进程5、使用场景5.1、普通进程5.2、内核进程小结引言一、普通进程访问使用预留内存1、先mmap映射到用户空间后再访问如果内存区域需要在用户空间访问,可以通过 mmap 将其映射到用户空间。// 在内核驱动中实现 mmap 方法staticintmy_mmap(structfile*filp,structvm_area_struct*vma){unsignedlongpfn=phys_addrPAGE_SHIFT;returnremap_pfn_range(vma,vma-vm_start,pfn,size,vma-vm_page_prot);}// 在用户空间调用 mmapvoid*vaddr=mmap(NULL,size,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);在Linux系统中,普通应用程序(用户空间进程)不能直接访问保留内存,因为保留内存通常由内核或专用硬件管理且用户空间与内核空间存在隔离,所以需要先映射然后再访问。2、使用 /dev/mem 直接访问物理内存Linux 提供了 /dev/mem 设备文件,允许有权限的进程直接读写物理内存,但是有风险,使用步骤如下:2.1、启用 /dev/mem内核配置:确保 CONFIG_STRICT_DEVMEM 未启用(或通过 CAP_SYS_RAWIO 权限绕过限制)。内核需启用 CONFIG_DEVMEM 和 CONFIG_STRICT_DEVMEM(默认启用,但可能限制访问)。需要 root 权限或 CAP_SYS_RAWIO 能力。权限控制:限制 /dev/mem 的访问权限(chmod 600 /dev/mem)。直接访问物理内存可能引发缓存一致性问题(需使用 O_SYNC 标志)。2.2、映射物理地址intfd=open("/dev/mem",O_RDWR|O_SYNC);void*addr=mmap(NULL,size,PROT_READ|PROT_WRITE,MAP_SHARED,fd,phys_addr);例# 查看物理内存布局(确认保留地址) sudo cat/proc/iomem # 使用 dd 读取物理内存(示例地址0x10000000) sudo ddif=/dev/mem bs=1count=4skip=$((0x10000000))2/dev/null|hexdump-C不过也存在一些风险隐患:系统稳定性:误操作可能导致内核崩溃。安全漏洞:恶意程序可能通过 /dev/mem 窃取敏感数据。内核配置限制:CONFIG_STRICT_DEVMEM 默认阻止访问关键内存区域。2.3、用户空间通过dev/mem访问#includesys/mman.h#includefcntl.h#defineRESERVED_PHYS_ADDR0x80000000#defineRESERVED_SIZE0x10000000intmain(){intfd=open("/dev/mem",O_RDWR|O_SYNC);if(fd
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

foobar2000 皮肤 foobox:3 步装完即用,10 分钟把播放器界面改好看 2026/9/30 7:34:43

foobar2000 皮肤 foobox:3 步装完即用,10 分钟把播放器界面改好看

foobar2000 皮肤 foobox:3 步装完即用,10 分钟把播放器界面改好看 【免费下载链接】foobox-cn DUI 配置 for foobar2000 项目地址: https://gitcode.com/GitHub_Trending/fo/foobox-cn foobox 是 foobar2000 的即装即用皮肤包,主题、面…

阅读更多 →
UVa1410/LA4027 Expensive Drink 2026/9/30 7:34:42

UVa1410/LA4027 Expensive Drink

UVa1410/LA4027 Expensive Drink题目链接题意分析AC 代码题目链接 本题是2007年icpc亚洲区域赛北京赛区的E题 题意 你家那个调皮的小妹妹把水、牛奶、红酒混在一起,还加了点糖,打算给你喝。为了不让自己看上去太不讲理,她说如果你能猜到调制…

阅读更多 →
深度学习大模型全链路实战:从环境搭建到ONNX部署的避坑指南 2026/9/30 7:34:29

深度学习大模型全链路实战:从环境搭建到ONNX部署的避坑指南

简介:这份资源是一套面向深度学习研发人员、数据科学家及技术爱好者的全链路实战指南,聚焦大模型从构建到部署的完整流程,帮助具备一定理论基础的学习者打通环境搭建、数据处理、模型选择与训练、评估优化到最终部署的关键环节。资源包内含1个…

阅读更多 →
DDNS攻击手法与防御体系全面解析:从DNS重绑定到域名劫持 2026/9/30 7:34:29

DDNS攻击手法与防御体系全面解析:从DNS重绑定到域名劫持

1. DDNS攻击目标画像:为什么攻击者死盯动态域名1.1 DDNS到底是怎么工作的:三分钟搞懂核心机制DDNS的设计初衷很朴素:你家里或小公司的公网出口IP是动态的,宽带运营商隔一段时间就重新分配一次地址,但你的NAS、摄像头、…

阅读更多 →
算法训练营Day10栈与队列:四道核心题与工程应用全景解析 2026/9/30 7:34:29

算法训练营Day10栈与队列:四道核心题与工程应用全景解析

算法训练营刷到 day10,栈和队列专题正式开始了。整个代码随想录训练营走到这里,其实是一个很微妙的分水岭:前面几天的数组、链表、哈希表,多少还能靠直觉硬写;到了栈和队列,突然就要求你学会“抽象”——不…

阅读更多 →
麒麟V10系统救援模式实战:从GRUB参数到chroot修复 2026/9/30 7:34:29

麒麟V10系统救援模式实战:从GRUB参数到chroot修复

机器点不亮、密码忘了、升级后卡 logo,这些场景我第一次碰到时也慌过。说实话,在麒麟 V10-SP1 2503 桌面系统上,真正解决问题的关键不是桌面端,而是能不能顺利进到救援模式。这篇文章我就把进入救援模式这件事掰开揉碎讲一遍&…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉