ioremap/mmap的几个测试结论

2023-05-16

环境:pc机,ubuntu 14.04  64位,物理机

            arm板 omap3530 , 1G内存, 内核linux-2.6.32

1. mmap在pc机上测试映射大小,可以将文件映射大小4G,并且这4G可以使用数据全部覆盖,即映射的4G空间可以全部访问他的物理地址

#include <stdio.h>

#include <stdlib.h>

#include <sys/stat.h>

#include <sys/types.h>

#include <fcntl.h>

...

int mian (int argc, char* argv[]) {

int fd = open ("a.txt", O_RDWR);

if (fd < 0) {

perror ("open");

return -1;

}

void* pn = mmap (NULL, 0xffffffff, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);

if (NULL == pn) {

perror ("mmap");

return -1;

}

unsigned int i = 0;

for (i = 0; i < 0xffffffff; ++i) {

*((char*)pn + i) = 'c'; // 向映射的区域写c

if (i % 0x100000) {

printf ("*((char*) + 0x%x) = %c \n", i, *((char*) + i)); // 每写1M的c打印一次,为了提高测试程序的运行效率

}

}

close (fd);

return 0;

}

使用gcc编译,其映射大小可以根据自己测试的实际大小做修改,然后编译,在pc机上进行运行测试


注意: 在编译过程中,如果出现未定义的宏,或者未声明的函数,那就是头文件没有包含全,可以使用man 对应的函数进行添加


2. mmap在arm的linux上最大可以将文件映射大小1.5G的虚拟内存,即这1.5G可以被数据全部覆盖/访问,如果映射2G,则编译没错,运行就会出错

使用开发板对应的交叉编译器进行编译,然后运行测试,其映射大小可以根据自己想要测试的大小修改,编译运行,就可以测试出你的映射是否成功

3. ioremap在内核申请,映射内存如果是1G,可以编译通过,但是insmod 模块后,只要运行到内存映射这条语句,立马内核崩溃,死机,各种各样的error

                                                                        512M,可以编译通过,insmod模块,数据在0~256M可以正常被覆盖,访问,但是一旦超过256M就会出现上边的错误

                                                                        256M及以下,程序均可正确编译,正确运行,不会出现然和错误。


最近做了一个大数据从内核态传到用户态,用到了这个问题,ioremap的大小多少对程序有点限制,想即时解决。。。


mmap/ioremap 映射的大小与物理内存的大小有关么,请哪位大侠可以指点一下,非常感谢!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ioremap/mmap的几个测试结论 的相关文章

随机推荐

  • 分组加密, 算法模式(ECB CBC CFB OFB)

    如果觉得写得不错 xff0c 烦请微信搜索公众号 34 郑州行疆户外 34 了解程序员的户外业余喜好 块加密 块加密 xff0c 英文Block Cyper xff0c 又称分组加密 xff0c 是一种常见的对称加密 xff0c 具有代表性
  • Linux UIO机制--用户空间I / O操作方法

    目录 前言 关于UIO UIO 的工作原理 前言 于许多类型的设备 xff0c 创建Linux内核驱动程序是过分的 真正需要的只是某种方式来处理中断并提供对设备存储空间的访问 控制设备的逻辑不必一定要在内核之内 xff0c 因为设备不需要利
  • Linux UIO驱动实例介绍

    接上一篇介绍UIO机制 https blog csdn net hpu11 article details 109395820 uio驱动详解 为了用最简单的例子说明问题 xff0c 我们在我们uio驱动的内核部分只映射了一块1024字节的
  • Mosquitto服务安装与使用---入门操作介绍

    关于Mosquitto配置的资料网上还是有几篇的 xff0c 但是看来看去 xff0c 基本上都是基于Linux 基于Window的凤毛麟角 xff0c 看上去貌似配置的东西相差不大 xff0c 实操过程中真的烦透了 xff0c 配置就是不
  • Windows 11 系统下载,正式版尚未发布

    下载链接方式 xff1a 关注 郑州行疆户外 程序员自己的订阅号 xff0c 回复 win11 xff0c 获取win11系统下载链接 一 发布 今年5月的Build大会 xff0c 微软便正式明确新一代操作系统为Windows 11 xf
  • Windows 11 系统下载安装 教程

    关 注 郑州行疆户外 订阅号 xff0c 回复 win11 xff0c 获取win11系统下载链接 xff0c 安装教程 说明 Windows11系统安装教程 xff0c 这里使用VM虚拟机演示具体安装教程 xff0c 如果是新手 xff0
  • Windows 11 TPM2.0问题及解决方法

    关注 郑州行疆户外 订阅号 回复 win11 xff0c 下载 windows11系统 回复 问题 xff0c 查看 windows11安装过程中遇到的问题及其解决方法 随着2021年6月24日 xff0c 微软正式发布会上确定windon
  • linux的dma驱动

    硬件平台 xff1a TI的3530 内核 xff1a linux 2 6 36 功能 xff1a 将fpga的数据从内存的一个地方复制到内存另一个地方 初学dma感到很是吃力 xff0c 编写的内核驱动代码仔细看了一个星期 xff0c 才
  • linux内核的并发与竞态

    并发与竞态是指多个任务单元同时访问同一个资源 xff0c 就会出现并发 xff0c 竞态的现象 其中多个任务单元包括中断 xff0c 进程 线程 xff0c 甚至多个多处理器 xff1b 同一资源既包含硬件资源 xff0c 也包括软件数据
  • UDP通信

    头文件 xff1a 1 pragma once 2 3 include lt stdio h gt 4 include lt unistd h gt 5 include lt string h gt 6 include lt stdlib
  • 交叉编译找不到stdio.h头文件,make menuconfig问题解决办法

    今天测试交叉编译器总出现问题 xff0c fatal error stdio h No such file or directory 后来根据指导使用编译命令 xff1a arm linux gcc src c I 头文件路径 能编译通过
  • 原子上下文,进程上下文,中断上下文的详细解析

    内核空间和用户空间是现代操作系统的两种工作模式 xff0c 内核模块运行在内核空间 xff0c 而用户态应用程序运行在用户空间 它们代表不同的级别 xff0c 而对系统资源具有不同的访问权限 内核模块运行在最高级别 xff08 内核态 xf
  • server,gtk,tslib

    一 首先先说下framebuffer xserver tslib gtk和桌面这五者之间的联系 xff0c 1 framebuffer 即linux系统的一块内存区域 xff0c 往这块区域写东西屏幕就会有所显示 对应的设备文件是dev f
  • 修改启动logo,禁止光标

    linux内核下使用的图片文件类型是pnm和PPm格式的 xff0c 所以在开始介绍修改linux内核启动LOGO之前 xff0c 1 先需要介绍一下怎么样设计自己开始logo的ppm图片 xff0c 首先选择一张png格式的图片 xff0
  • 移植gtk,这个配置有点早,可以了解一下他的工作流程

    最近一直GTK xff0c 感觉好晕 整整耗了我近三天才勉强在网络资料和他人帮助情况下完成 所以记录一下 xff0c 不然我记性太差 xff0c 很可能下班之前就忘了 xff01 以后也好有个参考 首先注意一个问题 xff1a GTK在编译
  • error: ISO C90 forbids mixed declarations and code [-Werror=declaration-after-statement]

    这个错误多为编写linux驱动程序时出现的错误 xff0c 正常情况下是以警告出现的 xff0c 一般有两种情况 xff1a 1 在函数体内 xff0c 定义变量代码前边出现非定义的变量 此变量在其他地方已经定义了 xff0c 编译时就会出
  • 用户空间的虚拟地址如何转换得到实际的物理地址

    思路 xff1a 进程号是一个进程在用户空间的唯一标示 xff0c 所以 xff0c 根据pid可以从内核中得到一个进程的所有信息 xff0c 另外就是知道虚拟地址就可以通过内核物理地址映射到虚拟地址的逆运算就可以还原他的实际物理地址 以上
  • ubuntu系统下的minicom串口/usb转串口配置

    1 安装minicom串口软件 sudo apt get install minicom 2 配置串口 minicom默认配置是tty8 如果你直接使用的就是串口 xff0c 那么安装好之后就可以直接使用了 如果你是用usb转串口 xff0
  • Install ncurses (ncurses-devel) and try again.

    主要就是终端图形配置时最容易出现的问题 xff0c 比如最常见的make menuconfig xff0c 解决方法 xff1a sudo apt get install ncurses devel 屏幕弹出 xff1a 找不到这个软件 x
  • ioremap/mmap的几个测试结论

    环境 xff1a pc机 xff0c ubuntu 14 04 64位 xff0c 物理机 arm板 omap3530 xff0c 1G内存 xff0c 内核linux 2 6 32 1 mmap在pc机上测试映射大小 xff0c 可以将文