看到水木上有人发这个帖子,就转过来了,顺便再贴一个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); |
|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏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.