当前位置: 技术问答>linux和unix
高手请进: 如何用 kmalloc 分配20M 的内存空间?
来源: 互联网 发布时间:2016-09-03
本文导语: 我想在内核程序中用 kmalloc 分配10M 共享空间, 如何实现? 据说开启 config_large_allocs 选项可以,但具体在哪里配置? 谢谢! | get_free_pages()在ARM中最大申请4M的内存,离20M远着呢。 | ...
我想在内核程序中用 kmalloc 分配10M 共享空间, 如何实现?
据说开启 config_large_allocs 选项可以,但具体在哪里配置?
谢谢!
据说开启 config_large_allocs 选项可以,但具体在哪里配置?
谢谢!
|
get_free_pages()在ARM中最大申请4M的内存,离20M远着呢。
|
两种方法:
一、kernel命令行加上:mem=$MAX_MEM-$RESERVED_MEM,也就是在你的机器上预留一片内存,然后用ioremap()出来,在用户空间mmap()后就可以放心使用了;
二、使用big_physical_area补丁。
一、kernel命令行加上:mem=$MAX_MEM-$RESERVED_MEM,也就是在你的机器上预留一片内存,然后用ioremap()出来,在用户空间mmap()后就可以放心使用了;
二、使用big_physical_area补丁。
|
按照《LInux设备驱动程序》第三版的说法:
分配如此大的连续空间在一个已经连续运行了一段时间的系统上能够成功的可能性很小。(因为大量的内存碎片)
如果必须分配,最好在系统启动的时候让内核单独给你划分出一片区域,但是这样一来这片内存内核就管理不聊了(或者说别的程序就使用不了了)。
启动时候也不行的话只能用get_free_pages()来碰运气了。
分配如此大的连续空间在一个已经连续运行了一段时间的系统上能够成功的可能性很小。(因为大量的内存碎片)
如果必须分配,最好在系统启动的时候让内核单独给你划分出一片区域,但是这样一来这片内存内核就管理不聊了(或者说别的程序就使用不了了)。
启动时候也不行的话只能用get_free_pages()来碰运气了。