找回密码
 注册
搜索
热搜: 回贴
微赢网络技术论坛 门户 服务器 Linux/BSD 查看内容

使用alloc_bootmem()分配大内存

2009-12-20 13:43| 发布者: admin| 查看: 77| 评论: 0|原作者: 柳梦璃

看到水木上有人发这个帖子,就转过来了,顺便再贴一个libe1000中的代码;-)
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
发信人: teamod (Gnuer), 信区: LinuxDev
标 题: linux下分配G级物理内存的方法
发信站: 水木社区 (Wed Aug 6 22:21:32 2008), 站内
自己解答昨天的帖子。。
今天试了一下,成功了
2.6.22.9的内核
使用alloc_bootmem函数
其实还是比较简单的,找资料花了半天-,-:
在内核代码 init/main.c文件中
asmlinkage void __init start_kernel(void)
{
char * command_line;
extern struct kernel_param __start___param[], __stop___param[];
.
.
.
cpuset_init_early();
yy_p = alloc_bootmem(500000000);//yy_p在开始时定义
if (!yy_p)
{
printk("yy: alloc error!\n");
}
else
{
printk("yy: alloc success! \n");
}
//一定要在mem_init函数前
mem_init();
.
.
.
}
重新编译内核
这样,进系统后cat /proc/meminfo 就会发现自己的物理内存少了500M
只要把yy_p这个指针EXPORT_SYMBOL后,内核的驱动程序就可以访问500M内存了
很黄很暴力!谁用谁知道。。~
--
※ 修改:·teamod 于 Aug 7 00:57:12 2008 修改本文·[FROM: 122.234.48.*]
※ 来源:·水木社区 newsmth.net·[FROM: 220.191.85.*]
diff --git a/mm/bootmem.c b/mm/bootmem.c
index 00a9697..8f3ef0d 100644
--- a/mm/bootmem.c
b/mm/bootmem.c
@@ -487,3 487,40 @@ void * __init __alloc_bootmem_low_node(pg_data_t *pgdat, unsigned long size,
return __alloc_bootmem_core(pgdat->bdata, size, align, goal,
ARCH_LOW_ADDRESS_LIMIT);
}

static int __init reserve_setup(char *str)
{
unsigned long long start, size;

size = memparse(str, &str);
if (*str != '@')
return 1;
str ;
start = memparse(str, &str);

reserve_bootmem(start, size);
printk(KERN_INFO "bootmem: Reserved %llu bytes @ 0x%llx\n", size, start);
return 1;
}

static int __init alloc_setup(char *str)
{
unsigned long long size;
unsigned int nid = 0;
void *start;

size = memparse(str, &str);
if (*str == '@') {
str ;
get_option(&str, &nid);
}

start = alloc_bootmem_pages_node(NODE_DATA(nid), size);
if (start)
printk(KERN_INFO "bootmem: Allocated %llu bytes at 0x%p(0x%p) on node %u\n",
size, start, (void *) virt_to_phys(start), nid);
return 1;
}

__setup("bootmem-reserve=", reserve_setup);
__setup("bootmem-alloc=", alloc_setup);







最新评论

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-30 09:36 , Processed in 0.136280 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

返回顶部