如何在linux内核中保留一块内存不被系统分配
2013-08-29 17:14
232 查看
要想在内核中保留一个块内存,不被系统分配,而是只由自己使用,可以使用以下函数
reserve_bootmem(addr,size,flag)
这个函数的三个参数,addr是你要保留的地址,size就是要保留的大小,flag是标志位,要来确定是否检查你要保留的空间是否已经被保留了,它可以设置为两个值,BOOTMEM_DEFAULT和BOOTMEM_EXCLUSIVE,前者就是总是会返回0(也就是保留成功),而后者则会检查你所要保留的空间是否已经被保留了,若已经被保留了,则它返回失败(负数)
那么这个函数一般放在哪里使用过了,我们建议放到内核init/main.c中,在页表的建立之前进行保留,比如我们下面的代码,放在main中的start_kernel函数中,我们的内核是2.6.32
asmlinkage void __init start_kernel(void)
{
……
……
trap_init();
if(reserve_bootmem(0x41000000,0x100000,BOOTMEM_EXCLUSIVE) != 0){
printk("reserve fail----\n");
}
printk("we reserve boot meme of 0x41000000 for gps---------------------------------\n");
mm_init();
……
……
}
这样就保留了一个起始地址为0x41000000,大小为1M的空间
转自:http://hi.baidu.com/xdyang1986/item/4a496235fc0c694b3075a1c9
reserve_bootmem(addr,size,flag)
这个函数的三个参数,addr是你要保留的地址,size就是要保留的大小,flag是标志位,要来确定是否检查你要保留的空间是否已经被保留了,它可以设置为两个值,BOOTMEM_DEFAULT和BOOTMEM_EXCLUSIVE,前者就是总是会返回0(也就是保留成功),而后者则会检查你所要保留的空间是否已经被保留了,若已经被保留了,则它返回失败(负数)
那么这个函数一般放在哪里使用过了,我们建议放到内核init/main.c中,在页表的建立之前进行保留,比如我们下面的代码,放在main中的start_kernel函数中,我们的内核是2.6.32
asmlinkage void __init start_kernel(void)
{
……
……
trap_init();
if(reserve_bootmem(0x41000000,0x100000,BOOTMEM_EXCLUSIVE) != 0){
printk("reserve fail----\n");
}
printk("we reserve boot meme of 0x41000000 for gps---------------------------------\n");
mm_init();
……
……
}
这样就保留了一个起始地址为0x41000000,大小为1M的空间
转自:http://hi.baidu.com/xdyang1986/item/4a496235fc0c694b3075a1c9
相关文章推荐
- 最好的方式是用VirtualAlloc分配虚拟内存,它既不是在堆也不是在栈,而是直接在进程的地址空间中保留一块内存
- 内存分配的原理__进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)
- 动态内存分配如何工作?
- linux系统如何释放内存
- 系统默认分配的共享内存太小,导致zabbix_server无法启动
- linux内核线程死锁或死循环(soft lockup)之后如何让系统宕机重启
- 如何在已经分配的内存上创建对象(摘自cadn论坛)
- 内存分配的原理__进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)
- Malloc是如何分配内存的?
- 使用动态内存分配来消除使用变体记录造成的内存空间浪费(存货系统)
- 如何定制视频业务- ramdisk 内存文件系统
- 嵌入式 linux系统如何查看内存使用情况详解
- Linux内核中常见内存分配函数
- 【教你如何应对系统提示内存不足】
- 如何在VC6中申请分配大容量内存
- Linux基础:如何找出你的系统所支持的最大内存
- 如何分配存储内存和程序内存
- Linux系统下,能保证物理空间上连续的内存分配函数是?
- linux内核线程死锁或死循环(soft lockup)之后如何让系统宕机重启
- Linux内核中 如何动态替换系统调用函数