获取系统不识别的内存方法:mmap
来源:互联网 发布:淘宝店叫什么名字好 编辑:程序博客网 时间:2024/04/29 20:53
获取系统不使用的内存方法:mmap
要求:
修改/boot/grub/menu.list
将 kernel /vmlinuz-2.6.15-1.2054_FC5 ro root=/dev/VolGroup00/LogVol00 rhgb
quiet 改为
kernel /vmlinuz-2.6.15-1.2054_FC5 ro root=/dev/VolGroup00/LogVol00 rhgb
quiet mem=400M
可通过 cat /proc/meminfo看出已经改了
将 kernel /vmlinuz-2.6.15-1.2054_FC5 ro root=/dev/VolGroup00/LogVol00 rhgb
quiet 改为
kernel /vmlinuz-2.6.15-1.2054_FC5 ro root=/dev/VolGroup00/LogVol00 rhgb
quiet mem=400M
可通过 cat /proc/meminfo看出已经改了
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/config.h>
//#include <linux/malloc.h> /* kmalloc() */
#include <linux/slab.h>
#include <linux/fs.h> /**//* everything... */
#include <linux/errno.h> /**//* error codes */
#include <linux/types.h> /**//* size_t */
#include <linux/proc_fs.h>
#include <linux/fcntl.h> /**//* O_ACCMODE */
#include <asm/system.h> /**//* cli(), *_flags */
#include <asm/io.h>
#include <linux/types.h>
#include <linux/cdev.h>
#include <linux/mm.h>/**//*vma*/
MODULE_LICENSE("Dual BSD/GPL");
#define DEVNAME "DevDirectIO"
dev_t dev = 0;
void directIO_vm_open(struct vm_area_struct *vm)
...{
printk("vm opened ");
}
void directIO_vm_close(struct vm_area_struct *vm)
...{
}
static struct vm_operations_struct directIO_remap_vm_ops = ...{
.open = directIO_vm_open,
.close = directIO_vm_close,
};
int directIO_open(struct inode *inode, struct file *filp)
...{
printk("DirectIO: open() ");
return 0; /**//* success */
}
int directIO_release(struct inode *inode, struct file *filp)
...{
// MOD_DEC_USE_COUNT;
return 0;
}
ssize_t directIO_read(struct file *filp, char *buf, size_t count,
loff_t *f_pos)
...{
ssize_t ret = 0;
return ret;
}
ssize_t directIO_write(struct file *filp, const char *buf, size_t count,
loff_t *f_pos)
...{
// ssize_t ret = -ENOMEM; /* value used in "goto out" statements */
return count;
}
int directIO_mmap(struct file* filep, struct vm_area_struct* vm)
...{
// unsigned long lenth = vm->
printk("start:%lu length:%lu off:%lu ", vm->vm_start,vm->vm_end - vm->vm_start,vm->vm_pgoff);
/**//*if(remap_pfn_range(vm, vm->vm_start,vm->vm_pgoff,vm->vm_end -
vm->vm_start,vm->vm_page_prot)){
return -EAGAIN;
}*/
unsigned long ulStart = (VMALLOC_START - PAGE_OFFSET - VMALLOC_OFFSET) >> 12;
/**//* VMALLOC_START:系统虚拟内存总大小
PAGE_OFFSET:8M空隙
VMALLOC_OFFSET:虚拟内存(高端)起始点,linux2.6的为3G
*/
if(remap_pfn_range(vm, vm->vm_start,ulStart + 1,vm->vm_end -
vm->vm_start,vm->vm_page_prot))...{
return -EAGAIN;
}
vm->vm_ops = &directIO_remap_vm_ops;
directIO_vm_open(vm);
return 0;
}
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/config.h>
//#include <linux/malloc.h> /* kmalloc() */
#include <linux/slab.h>
#include <linux/fs.h> /**//* everything... */
#include <linux/errno.h> /**//* error codes */
#include <linux/types.h> /**//* size_t */
#include <linux/proc_fs.h>
#include <linux/fcntl.h> /**//* O_ACCMODE */
#include <asm/system.h> /**//* cli(), *_flags */
#include <asm/io.h>
#include <linux/types.h>
#include <linux/cdev.h>
#include <linux/mm.h>/**//*vma*/
MODULE_LICENSE("Dual BSD/GPL");
#define DEVNAME "DevDirectIO"
dev_t dev = 0;
void directIO_vm_open(struct vm_area_struct *vm)
...{
printk("vm opened ");
}
void directIO_vm_close(struct vm_area_struct *vm)
...{
}
static struct vm_operations_struct directIO_remap_vm_ops = ...{
.open = directIO_vm_open,
.close = directIO_vm_close,
};
int directIO_open(struct inode *inode, struct file *filp)
...{
printk("DirectIO: open() ");
return 0; /**//* success */
}
int directIO_release(struct inode *inode, struct file *filp)
...{
// MOD_DEC_USE_COUNT;
return 0;
}
ssize_t directIO_read(struct file *filp, char *buf, size_t count,
loff_t *f_pos)
...{
ssize_t ret = 0;
return ret;
}
ssize_t directIO_write(struct file *filp, const char *buf, size_t count,
loff_t *f_pos)
...{
// ssize_t ret = -ENOMEM; /* value used in "goto out" statements */
return count;
}
int directIO_mmap(struct file* filep, struct vm_area_struct* vm)
...{
// unsigned long lenth = vm->
printk("start:%lu length:%lu off:%lu ", vm->vm_start,vm->vm_end - vm->vm_start,vm->vm_pgoff);
/**//*if(remap_pfn_range(vm, vm->vm_start,vm->vm_pgoff,vm->vm_end -
vm->vm_start,vm->vm_page_prot)){
return -EAGAIN;
}*/
unsigned long ulStart = (VMALLOC_START - PAGE_OFFSET - VMALLOC_OFFSET) >> 12;
/**//* VMALLOC_START:系统虚拟内存总大小
PAGE_OFFSET:8M空隙
VMALLOC_OFFSET:虚拟内存(高端)起始点,linux2.6的为3G
*/
if(remap_pfn_range(vm, vm->vm_start,ulStart + 1,vm->vm_end -
vm->vm_start,vm->vm_page_prot))...{
return -EAGAIN;
}
vm->vm_ops = &directIO_remap_vm_ops;
directIO_vm_open(vm);
return 0;
}
- 获取系统不识别的内存方法:mmap
- 内存分配的原理__进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)
- 内存分配的原理__进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)
- 内存分配的原理__进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)
- 内存分配的原理__进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)。
- 内存分配的原理__进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)
- 内存分配的原理__进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)
- 内存分配的原理__进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)。
- 内存映射(mmap系统调用)
- linux中使用内存映射(mmap)操作文件的方法
- 获取系统的内存
- 进程的内存分配函数之brk和mmap(不考虑共享内存)的应用
- 进程分配内存的两种方式--brk() 和mmap()(不设计共享内存)
- 2种获取android系统可用内存方法的不同?
- 获取DX9设备占用系统内存和显存的方法
- 移动硬盘不被系统识别的处理
- Linux内存管理之mmap详解 一. mmap系统调用 1. mmap系统调用 mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,
- Linux内存管理 mmap系统调用
- 转载:doxygen总结转载:
- servlet技术&web应用程序的开发
- servlet生命周期的介绍&ServletContext接口
- 数据库访问
- 感受IT界
- 获取系统不识别的内存方法:mmap
- Hibernate包作用详解
- 禁止网页内容复制
- jmail发邮件的代码
- 请问生产成本收集器与标准成本评估有什么关联?
- .Grove—— .Net下的ORM框架
- 哲理小故事300篇(1—100)
- 部署流程到ActiveBPEL的准备工作
- Delphi拥抱PHP,下一步是Ruby?