社区
Linux_Kernel
帖子详情
高手请进: 如何用 kmalloc 分配20M 的内存空间?
dbfan
2010-05-26 10:07:21
我想在内核程序中用 kmalloc 分配10M 共享空间, 如何实现?
据说开启 config_large_allocs 选项可以,但具体在哪里配置?
谢谢!
...全文
435
17
打赏
收藏
高手请进: 如何用 kmalloc 分配20M 的内存空间?
我想在内核程序中用 kmalloc 分配10M 共享空间, 如何实现? 据说开启 config_large_allocs 选项可以,但具体在哪里配置? 谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
chenee543216
2010-06-12
打赏
举报
回复
开机预留,不给操作系统使用
guanboliang777
2010-06-12
打赏
举报
回复
fadfasasfa
gellf
2010-06-11
打赏
举报
回复
mark
wanguodu
2010-06-04
打赏
举报
回复
两种方法:
一、kernel命令行加上:mem=$MAX_MEM-$RESERVED_MEM,也就是在你的机器上预留一片内存,然后用ioremap()出来,在用户空间mmap()后就可以放心使用了;
二、使用big_physical_area补丁。
Wenxy1
2010-06-02
打赏
举报
回复
[Quote=引用楼主 dbfan 的回复:]
我想在内核程序中用 kmalloc 分配10M 共享空间, 如何实现?
据说开启 config_large_allocs 选项可以,但具体在哪里配置?
谢谢!
[/Quote]
kmalloc最多分配128KB内存,你只能用 vmalloc()分配大于128KB的内存。
goodluckwu
2010-06-02
打赏
举报
回复
按照《LInux设备驱动程序》第三版的说法:
分配如此大的连续空间在一个已经连续运行了一段时间的系统上能够成功的可能性很小。(因为大量的内存碎片)
如果必须分配,最好在系统启动的时候让内核单独给你划分出一片区域,但是这样一来这片内存内核就管理不聊了(或者说别的程序就使用不了了)。
启动时候也不行的话只能用get_free_pages()来碰运气了。
armed
2010-05-29
打赏
举报
回复
get_free_pages()在ARM中最大申请4M的内存,离20M远着呢。
wz19761022
2010-05-27
打赏
举报
回复
[Quote=引用 7 楼 lisan04 的回复:]
__get_free_pages可以分配以页为单位的,最大分配2048个页
[/Quote]
对,参考这个 http://www.deansys.com/doc/ldd3/ch08.html
dev->databuffer->buffer = (void*)__get_free_pages(GFP_KERNEL,USB_CAMERA_RZ_USE_PAGES);
free_pages((unsigned long)camera_dev->databuffer->buffer,USB_CAMERA_RZ_USE_PAGES);
iealien
2010-05-27
打赏
举报
回复
mark
Wenxy1
2010-05-26
打赏
举报
回复
[Quote=引用 3 楼 ronliu 的回复:]
是的。昨天使用kmalloc分配125内存OK,但是分配153k内存时就分配不了了。
后来使用vmalloc搞定。
vmalloc分配的空间在逻辑上是连续的,物理上不连续。如果你申请到的内存不和硬件打交道的话,用vmalloc就可以了。
[/Quote]
支持,参考:http://linux.chinaunix.net/techdoc/system/2008/06/16/1011365.shtml
ronliu
2010-05-26
打赏
举报
回复
是的。昨天使用kmalloc分配125内存OK,但是分配153k内存时就分配不了了。
后来使用vmalloc搞定。
vmalloc分配的空间在逻辑上是连续的,物理上不连续。如果你申请到的内存不和硬件打交道的话,用vmalloc就可以了。
dbfan
2010-05-26
打赏
举报
回复
通常情况下 kmalloc 只能分配128k的内存
dbfan
2010-05-26
打赏
举报
回复
分配的内存需要做内存共享用, 物理地址也应是连续的,所以 vmalloc 估计不行
kmalloc_ptr = kmalloc(sizeof(KER_SHARE_DATA)+PAGE_SIZE, GFP_KERNEL);
if (!kmalloc_ptr)
{
printk("kmalloc failed\n");
return 0;
}
kmalloc_area = (unsigned long *)(((unsigned long)kmalloc_ptr + PAGE_SIZE -1) & PAGE_MASK);
for (virt_addr=(unsigned long)kmalloc_area; virt_addr < (unsigned long)kmalloc_area +sizeof(KER_SHARE_DATA); virt_addr+=PAGE_SIZE)
{
// reserve all pages to make them remapable
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
mem_map_reserve(virt_to_page(virt_addr));
#else
SetPageReserved(virt_to_page(virt_addr));
#endif
}
lisan04
2010-05-26
打赏
举报
回复
没用过,关注,帮顶
lisan04
2010-05-26
打赏
举报
回复
__get_free_pages可以分配以页为单位的,最大分配2048个页
xrbobo
2010-05-26
打赏
举报
回复
vmalloc
Tony2251
2010-05-26
打赏
举报
回复
[Quote=引用 4 楼 wenxy1 的回复:]
引用 3 楼 ronliu 的回复:
是的。昨天使用kmalloc分配125内存OK,但是分配153k内存时就分配不了了。
后来使用vmalloc搞定。
vmalloc分配的空间在逻辑上是连续的,物理上不连续。如果你申请到的内存不和硬件打交道的话,用vmalloc就可以了。
支持,参考:http://linux.chinaunix.net/techdoc/system/2008/0……
[/Quote]
学习
如何从零开始写一个操作系统?
首页 发现 等你来答 登录加入知乎 如何从零开始写一个简单的操作系统? 关注问题 写回答 操作系统 编程学习 如何从零开始写一个简单的操作系统? 看了这个:从零开始写一个简单的操作系统 求指教。 关注者 4,787 被浏览 352,884 关注问题 写回答 邀请回答 3 条评论 分享 37 个回答 默认排序 知乎用户 751 人赞...
自己写操作系统学习总结
怎样自己写一个简单的操作系统? https://www.zhihu.com/question/20207347 我写的时候一些经历: 第一次写的时候3000行左右的就无法调试了,当时主要参考了linux 0.11(基础太潜)。 第二次写的时候,基本定下几个核心模块, 启动/内存管理/进程管理/用户环境/磁盘驱动/块缓冲/文件系统/中断,然后就开始发重新明轮子(不参考其他OS代码),
joyfire linux笔记 感谢原作者
内核分析
目 录
index.html更新记录发布申明GPLGFDL系统管理程序编写内核分析启动启动步骤setup.shead.sbootsect.scompressed/misc.csetup.txtbootsect.txt用网卡从并口启动(I386)内核解压中断软中断驱动中断硬件中断 from aka定时器代码分析from lisologindex内部中断外部中断后续处理内存用户态内核页目录的初始化内核线程页目录的借用用户进程内核页目录的建立内核页目录的同步内存管理
linux内核分析
http://blog.csdn.net/fjt19900921/article/details/8072816 启动 当PC启动时,Intel系列的CPU首先进入的是实模式,并开始执行位于地址0xFFFF0处的代码,也就是ROM-BIOS起始位置的代码。BIOS先进行一系列的系统自检,然后初始化位于地址0的中断向量表。最后B
linux内核分析(转自某位大哥网上的笔记)
启动 当PC启动时,Intel系列的CPU首先进入的是实模式,并开始执行位于地址0xFFFF0处的代码,也就是ROM-BIOS起始位置的代码。BIOS先进行一系列的系统自检,然后初始化位于地址0的中断向量表。最后BIOS将启动盘的第一个扇区装入到0x7C00,并开始执行此处的代码.这就是对内核初始化过程的一个最简单的描述。 最初,Linux核心的最开始部分是用8086汇编语
Linux_Kernel
4,436
社区成员
17,460
社区内容
发帖
与我相关
我的任务
Linux_Kernel
Linux/Unix社区 内核源代码研究区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章