打开/dev/mem设备,mmap后读写寄存器报Segmentation fault

内核调试之devmem直接读写寄存器 在Linux系统,如果我们想要访问某个寄存器,就需要写一个驱动程序,在驱动中映射寄存器地址,转为虚拟地址后就可以访问。但有时候,我们只是单纯想知道某个寄存器的值,不想这么麻烦,怎么办呢?Linux早就想到这一点了,于是提供了一个工具devmem,通过devmem就可以直接读写寄存器,devmem是一个命令,在shell中输入devmem命令就可以非常方便的读写寄存器。devmem是一个很常用的工具,主要给驱动开发人员在Linux应用层调试使用。 阅读详情

通常读写某个寄存器的操作如下:

fd = open("/dev/mem", O_RDWR|O_SYNC);
if (fd == -1)
{
    printf("open err!\n");
    return (-1);
}
map_base = mmap(NULL, mem_length, PROT_READ|PROT_WRITE, MAP_SHARED, fd, base_addr);    

          但是有时会却会遇到报错:Segmentation fault

        该错误其实是mmap地址错误的问题导致的,因为内存在使用时分配的最小单位都是以page来分配的,因此在做mmap时,地址必须以page大小来字节对其。

         系统的page大小可以通过linux命令getconf命令来获取:getconf PAGE_SIZE,在C函数中也可以通过函数getpagesize()获取大小;通常大小都为4096。

        因此,假设需要访问地址0xF2440100,则base_addr需要设定的值该为0xF2440100 & 4095

fd = open("/dev/mem", O_RDWR|O_SYNC);
if (fd == -1)
{
    printf("open err!\n");
    return (-1);
}
page_size = getpagesize();
base_addr = phy_addr & (~(page_size -1));
mem_length = page_size*n;
map_base = mmap(NULL, mem_length, PROT_READ|PROT_WRITE, MAP_SHARED, fd, base_addr);  
virt_addr = (unsigned long )map_base + (phy_addr - base_addr);  

 

AUP ZU3 PetaLinux下AXI GPIO全流程实战:从Vivado到用户空间C程序 GPIO(通用输入输出)是嵌入式系统与外部设备交互的基础接口,其核心原理是通过读写特定寄存器来控制引脚的电平状态与方向。在基于FPGA+ARM的异构SoC(如Xilinx Zynq UltraScale+)中,GPIO的实现更具灵活性,既可通过PS侧硬核控制器访问,也可通过PL侧利用AXI总线自定义IP核实现,后者尤其适用于引脚数量与电气特性有定制需求的场景。这种技术方案的价值在于,它允许开发者突破固定硬件的限制,在可编程逻辑中高效、灵活地扩展外设接口,从而满足工业控制、通信接口、原型验证等多样化的嵌入式应 阅读详情

相关推荐

Windows/Linux双平台Shellcode生成与加载实战指南

Shellcode作为一段可独立执行的机器码,是漏洞利用与安全测试中的核心技术组件。其原理在于绕过高级语言运行时依赖,直接与操作系统内核交互,实现精准控制。掌握Shellcode生成与加载技术,对于理解内存攻击、构建自定义安全工具链具有重要价值,广泛应用于渗透测试、漏洞研究及逆向工程等领域。本文聚焦于使用Metasploit Framework的msfvenom工具,详细解析跨平台Shellcode生成、编码与格式转换,并深入探讨通过C语言加载器在内存中分配可执行区域、复制并跳转执行Shellcode的完整

weixin_34195364的博客 324

Linux内存显示错误,使用mmap读取内存的内容,出现“Segmentation fault”错误,请

使用mmap读取内存的内容,出现“Segmentationfault”错误,请帮看看原因。这个程序的目的是用于功能调试的,正在读取一块网卡使用的dma内存空间,想看看里面的数据内容。当我读取0x1b436c000这个地址时,运行出现“Segmentationfault”错误。这个地址是网卡正在使用的地址。当读取0x1c0004000这个地址时,就可以正常运行。这个地址是我在系统启动时保留下来...

weixin_33941859的博客 1272

Jetson TK1实战指南:L4T刷机、CUDA 6.5与GPIO裸机开发

Jetson TK1作为嵌入式AI的早期GPU计算平台,是理解边缘设备底层运行机制的关键入口。它基于ARM架构与Tegra K1 SoC,搭载GK20A GPU(Compute Capability 3.2),原生支持CUDA 6.5和cuDNN v4,为学习GPU通用计算、Bootloader启动流程及硬件寄存器级控制提供了不可替代的实践载体。其技术价值不仅在于历史意义,更在于暴露现代AI框架所封装的‘脏活’——如eMMC分区校验、ARM交叉编译链配置、U-Boot定制、GPIO内存映射等核心能力。在工业

385

mmap导致linux内核崩溃,如何在不崩溃Linux内核的情况下访问mmaped / dev / mem?

我想我已经发现了这个问题 – 这是在x86上使用/ dev / mem内存映射保护。Pl参考这篇LWN文章:“x86:用configuration选项介绍/ dev / mem限制” http://lwn.net/Articles/267427/CONFIG_NONPROMISC_DEVMEM现在(我在最近的3.2.21内核上testing过),configuration选项好像叫做CONFIG_...

weixin_33570610的博客 618

嵌入式开发中的地址映射:逻辑地址、虚拟地址与物理地址详解

在计算机体系结构中,地址映射是连接软件与硬件的核心桥梁。其基本原理是通过内存管理单元(MMU)和页表,将程序使用的逻辑地址或虚拟地址转换为内存芯片上的物理地址。这一机制的技术价值在于实现内存隔离、简化编程模型、支持共享内存和延迟分配,从而提升系统安全性和资源利用率。在嵌入式系统开发中,地址映射的应用场景广泛,从裸机编程中的线性映射,到RTOS中的静态映射,再到嵌入式Linux中的动态映射,都离不开对地址转换的深刻理解。特别是在处理ARM Mali GPU的clCreateBuffer API或Xilinx

weixin_34205826的博客 316

Linux内核本质:操作系统的心脏与硬件资源总控中心

内核是操作系统最核心的特权级程序,运行于CPU Ring 0,为上层应用提供进程管理、内存虚拟化、文件系统抽象和设备驱动四大支柱能力。其设计基于特权级隔离(如系统调用)、硬件抽象层(HAL)和安全仲裁机制,确保多任务并发下的稳定性与安全性。理解内核即理解为什么程序不能直接操作物理内存、为何进程崩溃不致系统瘫痪、以及‘kernel panic’和‘unable to find the kernel source tree’等典型问题的技术根源。它既是硬件资源的中央银行,也是软件生态得以统一运行的底层契约。

culuo8053的博客 530

Linux mmap() ENOMEM error causing Segmentation Fault,使用mongodb注意

from: http://www.enchantedage.com/node/235 mongodb 使用了mmap来映射管理文件,使用mongodb的要注意 I have a system that creates files on disk, then uses mmap and madvise and mflush to asynchronously do I/O to

longxibendi的专栏 3031

VENOM漏洞深度解析:QEMU virtio-blk边界越界与虚拟化逃逸防御

虚拟机监控器(VMM)通过设备模拟实现I/O抽象,是虚拟化安全的关键枢纽;其核心原理在于用户态模拟器(如QEMU)与内核态Hypervisor(如KVM)的职责分离——KVM仅处理CPU/内存虚拟化,而QEMU负责全设备模拟,这也使其成为攻击面集中区。当virtio-blk等模拟组件缺失输入校验时,极易引发内存越界写,进而导致宿主机逃逸。该类漏洞技术价值极高,因其不依赖内核提权,可绕过传统隔离机制,在云平台、WSL2、嵌入式QEMU等广泛场景中持续生效。本文聚焦CVE-2015-3456(VENOM)这一典

www.itmmd.com 446

open("/dev/mem ",O_RDWR | O_SYNC)

【摘要】/dev/mem是物理内存的全映像,可以用来访问物理内存,一般用法是open(“/dev/mem”,O_RDWR|O_SYNC),然后mmap,接着就可以用mmap的地址来访问物理内存,这实际上就是实现用户空间驱动的一种方法。http://blog.csdn.net/wlp600/article/details/6893636# 1、用户空间驱动优点有几个论据倾向于用户空间编程,有时编写一个

xxgxgx的专栏 1614

Android不是操作系统:十年工程师拆解其电源管理与HAL设计真相

Android常被误认为传统操作系统,实则是面向移动终端的软硬件集成方案。其核心不在于通用内核抽象,而在于电源管理、HAL抽象、内存隔离等工程权衡——这些机制绕过Linux标准PM QoS与POSIX规范,以‘够用主义’换取快速落地。技术价值体现在极低的厂商准入门槛和生态爆发力,但代价是子系统耦合严重、适配成本高企。典型应用场景包括定制ROM开发、低功耗IoT设备移植、车载/VR系统优化等。本文聚焦Android底层真实约束,揭示WakeLock泄漏、LMK静态阈值、HAL硬件绑定等关键问题的技术根源。

dejz8829的专栏 523

CPU原生运行Gemma-4-E2B:INT4量化与AVX-512优化实战指南

大语言模型(LLM)推理正从GPU云端向边缘终端下沉,CPU原生推理成为隐私敏感、离线可用、国产化适配的关键路径。其核心原理在于通过模型量化(如INT4)、指令集加速(AVX-512)、内存带宽协同与缓存友好架构设计,在无GPU、无网络依赖条件下实现低延迟交互。技术价值体现在数据本地化、部署轻量性与硬件兼容性上,广泛应用于政务终端、工业网关、法律文书筛查及本地知识库问答等场景。本文聚焦Gemma-4-E2B这一2.1B参数量级模型,深入解析其在x86_64 CPU上的INT4量化策略与AVX-512优化实践

weixin_33924770的博客 558

深入解析Linux进程地址空间:从虚拟内存到物理映射的底层原理

内存管理是现代操作系统的核心基础,它通过虚拟内存技术为每个进程提供一个独立且连续的地址空间视图。其核心原理在于页表机制,它将进程使用的虚拟地址动态映射到物理内存地址,同时实现内存保护和隔离。这一机制的技术价值在于确保了进程安全、提高了内存利用率,并支持共享内存等高级特性。在Linux系统中,进程地址空间的应用场景广泛,从程序加载、动态链接到堆栈管理都依赖于此。通过分析段错误(Segmentation fault)等常见问题,可以深入理解虚拟地址空间与物理内存的映射关系,以及操作系统如何通过缺页异常和写时复制

weixin_33860553的博客 620

无需GPU的本地AI助手:Fara-7B CPU部署实战指南

大模型推理正从GPU依赖走向CPU普惠化,核心在于轻量化架构、高效量化(如GGUF格式)与指令集深度优化(AVX2/AVX-512)。这类技术使7B级中文对话模型可在主流x86服务器甚至老旧硬件上稳定运行,兼顾低延迟、低内存占用与数据本地化安全。其技术价值体现在工程确定性——绕过CUDA生态束缚,规避PyTorch CPU模式兼容性陷阱,实现开箱即用的私有化AI服务。典型应用场景包括政务文书解析、律所合同审查、医疗知识问答及教育文本处理等对数据主权与响应实时性要求严苛的领域。本文聚焦Fara-7B这一专为I

weixin_34252686的博客 371

Linux 驱动研究 —— V4L2 内核层总结(下)

本篇文章介绍了V4L2驱动的VB2框架,VB2 框架的 Stream 机制作为连接上层应用与底层硬件的总开关,通过 VIDIOC_STREAMON 校验队列并触发驱动的 start_streaming 回调来正式启动硬件传输,而 VIDIOC_STREAMOFF 则通过 stop_streaming 关闭硬件并重置缓冲区状态,从而实现缓冲区从软件等待域到硬件激活域的高效流转。

kdxiaojie的博客 407

共聚焦显微镜的光源、工作原理与选型

共聚焦显微镜作为科研与工业领域中重要的微观成像工具,凭借光源的精准适配性、光学切片技术的三维成像能力,以及对不同工业场景的定制化适配潜力,为半导体检测、工业部件分析、智能制造升级提供了关键技术支撑。深入理解其光源特性、工作原理与选型逻辑,能帮助工程师与技术人员精准匹配设备与生产需求,既保障微观检测的精度与效率,又为产业优化、技术创新筑牢微观观测的基础。

PhotonixBay的博客 1529

ICCompiler II实战:从NDM生成到APR流程的完整避坑指南

本文是一份针对ICCompiler II(ICC II)后端物理实现流程的实战避坑指南。文章详细解析了从NDM库生成、设计初始化、布局规划到时钟树综合与布线的完整APR流程,重点分享了各环节的常见陷阱、精细化配置命令与调试经验,旨在帮助工程师高效达成PPA目标,确保设计一次成功。

p4q5r6s7t的博客 527

Qemu沙箱逃逸漏洞分析:从MMIO越界到虚拟化隔离突破

内存安全是软件安全的基石,其核心原理在于对程序内存访问的严格边界控制。当程序(如Qemu设备模拟代码)未能正确验证输入数据的边界时,便可能产生缓冲区溢出等内存破坏漏洞,直接威胁系统安全。这类漏洞的技术价值在于,它们往往能绕过高级别的隔离机制,例如虚拟化层(Hypervisor)为虚拟机(Guest)构建的沙箱环境。在云计算和虚拟化场景中,攻击者可能利用此类漏洞,从一台虚拟机内部突破隔离,进而影响宿主机或其他租户,即实现“沙箱逃逸”。本文以一次真实的内部攻防演练为背景,深入剖析一个由**内存越界**漏洞引发的

cunfuteng7334的博客 399

10X Genomics单细胞数据分析实战:从FASTQ到UMAP可视化的完整流程

本文详细介绍了10X Genomics单细胞数据分析的完整流程,从FASTQ原始数据处理到UMAP可视化。通过Seurat工具包实现数据质量控制、标准化、降维聚类和细胞注释,特别适合生物信息学新手学习。文章包含可复现的代码示例和常见问题解决方案,帮助研究者快速掌握单细胞测序数据分析的核心技术。

weixin_30952535的博客 529

Under the hood:穿透系统表层的三层可观测性实践

在现代软件与硬件深度融合的系统中,'可观测性'已超越日志监控,成为定位根因的核心能力。其本质是理解系统从用户交互、协议通信到物理执行的全链路行为——这正是'under the hood'所强调的技术思维:拒绝黑箱,坚持可验证。通过网络流量捕获、系统调用追踪、硬件传感器读取等手段,工程师能将模糊的性能问题转化为温度、电压、时序、缓冲区等可测量的物理事实。这种穿透式分析不仅适用于Linux服务器排障,也广泛支撑云原生运维、嵌入式调试与IoT设备优化。本文聚焦真实场景下的五种标准化'掀盖姿势',帮助开发者建立以证

cigang4063的博客 495

自动驾驶入门到进阶完整指南:感知、预测、规划、端到端、仿真测评与场景挖掘全解析

对小白来说,不建议一开始直接冲端到端大模型。先学数据和坐标系:否则所有结果都看不懂。再学 LiDAR 3D 检测:最容易建立空间感。再学 BEV/多相机感知:这是当前主流。再学轨迹预测:理解交互和多模态。再学规划控制:理解车为什么这样开。再学仿真和闭环评测:理解 open-loop 和 closed-loop 差异。最后学端到端/VLM/VLA:这时候你才知道它到底替代了哪些模块。贯穿始终学习场景挖掘和安全测评:这是工业界最核心的能力之一。

u013250861的博客 382

OpenCV实例(一)人脸检测

计算机视觉使很多任务成为现实,其中两项任务就是人脸检测(在图像中定位人脸)和人脸识别(将人脸识别为特定的人)。OpenCV实现了一些人脸检测和识别的算法。从安全到娱乐,这些技术在现实环境中都有应用。介绍OpenCV的一些人脸检测和识别功能,并定义特定类型的可跟踪物体的数据文件。具体来说,将研究Haar级联分类器,通过分析相邻图像区域之间的对比度,确定给定图像或子图像是否与已知类型匹配。

小幽余生不加糖 4996

Linux系统“/dev/mem”设备使用详解(Hi3520D)

“/dev/mem”是linux系统中内核所有物理地址空间全映像的一个虚拟字符设备,与mmap结合使用,用户态可以直接访问内核态物理地址空间。

只要思想不滑坡,想法总比问题多。 2万+

Python计算时间差的方法

使用datetime模块是Python内置的方法,使用timedelta对象可以更精确地计算时间差,而使用dateutil库则提供了更为灵活和方便的操作方式。我们可以使用datetime模块中的datetime类来表示一个具体的日期和时间,并进行相应的运算。在Python中,我们经常需要计算日期和时间之间的差异,例如计算两个日期之间的天数、小时数、分钟数等。Python提供了多种方法来计算时间差,下面我们将介绍其中的几种常用方法,并附上相应的源代码。在上面的代码中,我们使用了dateutil库中的。

学习使你进步。 2081

mmap函数的详细讲解

addr如果addr为NULL,内核会自动选择一个起始地址作为映射的起点。如果addr不为NULL,则内核会尝试将映射放置在指定的起始地址处。如果指定的地址无效或与已有映射冲突,则mmap()调用会失败。通常情况下,最常用的做法是将addr设置为NULL,由内核选择一个适当的地址。lengthlength参数指定要映射的长度,可以是文件的长度或者是页的整数倍。对于文件映射,length一般为文件大小。对齐到页面大小可以获得最佳性能,因为页面是内存管理的最小单位。protprot。

weixin_74128452的博客 5471

归结法证明真题分析

本文主要探讨了逻辑证明题的三种核心形式及其解题策略。第一类为A1∧A2∧A3→B的证明,常采用线性、单元、支持策略法等归结法,典型案例包括使用归纳法证明特定逻辑公式,并列举了历年真题。第二类为集合交集证明,典型案例为证明任意集合S和T的交集S∩T是S的子集,需将交集和包含关系用逻辑式表达。第三类为常规归结法证明,真题示例为使用归结法证明特定逻辑蕴含关系。掌握前两类证明方法后,第三类问题自然迎刃而解。

super_mochi1 276

ros入门(八)---TF坐标转换

TF(TransForm),就是坐标转换,包括了位置和姿态两个方面的变换。

weixin_51157015的博客 3381
上一篇: SATA 硬盘/SSD温度读取
下一篇: emmc 分区管理
_阿桂_
博客等级 码龄18年 122粉丝 18原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值