Linux2.6内核mmap的问题! 请高手指教!
用户空间代码
char * p;
int i;
int fd;
int len = 512;
fd = open("/dev/tdev",O_RDWR);
p = (char *)mmap(0, len, PROT_READ, MAP_PRIVATE, fd, 0);
printf("buffer address 0x%x \n",p);
printf("buffer data <%s> \n",p);
内核空间代码:
unsigned char *buffer;
static void *rvmalloc(unsigned long size)
{
void *mem;
unsigned long adr;
size = PAGE_ALIGN(size);
mem = vmalloc_32(size);
if (!mem)
return NULL;
memset(mem, 0, size); /* Clear the ram out, no junk to the user */
adr = (unsigned long) mem;
while (size > 0) {
SetPageReserved(vmalloc_to_page((void *)adr));
adr += PAGE_SIZE;
size -= PAGE_SIZE;
}
return mem;
}
void init()
{
buffer = rvmalloc(640);
}
static int adspdev_mmap(struct file *file, struct vm_area_struct *vma)
{
unsigned long start = vma->vm_start;
unsigned long size = vma->vm_end - vma->vm_start;
unsigned long offset = vma->vm_pgoff << PAGE_SHIFT;
unsigned long page, pos;
if (size > 640)
return -EINVAL;
pos = (unsigned long)(buffer);
while (size > 0)
{
page = vmalloc_to_pfn((void *)pos);
if (remap_pfn_range(vma, start, page, PAGE_SIZE, PAGE_SHARED))
{
return -EAGAIN;
}
start += PAGE_SIZE;
pos += PAGE_SIZE;
if (size > PAGE_SIZE)
size -= PAGE_SIZE;
else
size = 0;
}
vma->vm_flags &= ~VM_IO; /* not I/O memory */
vma->vm_flags |= VM_RESERVED; /* avoid to swap out this VMA */
return 0;
}
此外:
Linux 2.6内核是不是没有remap_page_range了?
相关推荐
【血管检测】基于matlab机器视觉手掌和手背图像提取血管特征【含Matlab仿真 8993期】.zip
CSDN Matlab武动乾坤上传的资料均有对应的仿真结果图,仿真结果图均是完整代码运行得出,完整代码亲测可用,适合小白; 1、完整的代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
【血管检测】机器视觉手掌和手背图像提取血管特征【含Matlab源码 8993期】.zip
CSDN Matlab武动乾坤上传的资料均有对应的仿真结果图,仿真结果图均是完整代码运行得出,完整代码亲测可用,适合小白; 1、完整的代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
50、漫游配置文件的全面解析与管理
本文全面解析了漫游配置文件的工作原理、测试方法及在混合操作系统环境中的应用,详细介绍了从本地配置文件迁移到漫游配置文件的流程,并分析了不同类型计算机中哪些文件夹会漫游。文章深入探讨了多种组策略设置对漫游配置文件行为的影响及其适用场景,提供了常见问题的解决方案和优化建议。最后展望了漫游配置文件与云计算、人工智能等新技术结合的未来发展方向,帮助管理员更好地管理和优化用户配置文件体验。
51、深入解析本地、漫游和强制用户配置文件
本文深入解析了Windows环境下的本地、漫游和强制用户配置文件的工作原理与配置方法。重点介绍了如何通过组策略管理漫游配置文件、设置配置文件大小限制与目录排除,以及为不同Windows版本创建强制和超级强制配置文件的详细步骤。同时探讨了各类配置文件的应用场景、最佳实践、常见问题及解决方案,并提供了流程图和表格辅助理解。旨在帮助企业IT管理员高效、安全地管理用户配置文件,提升系统一致性和用户体验。
SAR ADC和sigma delta ADC的区别
0、ADC基本概念 ADC,即analog to digital converter,模拟到数字的转换器,简称模数转换器。 为什么需要ADC?因为现实的世界中,电信号是连续的,例如心电信号,或者声音信号,这些连续的信号被称为“模拟信号”。 图1:心电信号 图2:声音信号 然而这种连续的信号是无法被计算机处理的,计算机只认识0和1组成的“数字信号“。ADC就充当了这样一个桥梁,将“模拟信号”转换为计算机能识别的“数字信号”。举个例子,当前的心电电压为1.2V(实际没有这么高),ADC可能会得


