Chinaunix
标题:
关于kernel内,大容量内存申请问题
[打印本页]
作者:
lnkinprk
时间:
2010-07-15 16:13
标题:
关于kernel内,大容量内存申请问题
怎样在driver里申请128M的内存?
1.使用dma_alloc_coherent函数,insmod驱动会出以下错误。
Unknown symbol __you_cannot_kmalloc_that_much
2.在boot option里设定mem,预留自由空间也不行。使用kmalloc申请也失败
mem=physical memory size - 128M
我的环境是vmware里跑linux
那位大侠知道如何解决?感激不尽!
作者:
klanet
时间:
2010-07-15 16:15
申请还是映射?内核里面能申请这么大空间吗?
作者:
accessory
时间:
2010-07-15 23:11
在boot option里设定mem,预留自由空间
然后用IOREMAP去访问那段内存.
作者:
kgn28
时间:
2010-07-16 00:08
参考一下Dentry hashtable的分配:
在内核启动过程中初始化,hash表的具体大小:
1,可以通过内核参数传递见/Documentation/kernel-parameters.txt的dhash_entries= [KNL]项
2,如果不设置默认内核分配(1/16当前ram大小),见:
dentry_hashtable =
alloc_large_system_hash("Dentry cache",
sizeof(struct hlist_head),
dhash_entries,
13,
0,
&d_hash_shift,
&d_hash_mask,
0);
for (loop = 0; loop < (1 << d_hash_shift); loop++)
INIT_HLIST_HEAD(&dentry_hashtable[loop]);
复制代码
,其中alloc_large_system_hash为内核在初始化阶段(
alloc_bootmem_nopanic
)分配hash表的典型方法,这个方法中,dhash_entries如果设置则为设置大小(2的pow),否则内核根据scale(第四个参数13,表示没2^13bytes有一个hash bucket),以及最后一个参数(limit,0表示1/16ram,根据scale设置的大小不超过limit的值)。D_hash_shift为返回的创建的hash包含元素的个数,利用最后一个for循环初始化。
作者:
lnkinprk
时间:
2010-07-20 12:38
在boot option里设定mem,预留自由空间
然后用IOREMAP去访问那段内存.
accessory 发表于 2010-07-15 23:11
不知道物理地址怎么用ioremap得到虚拟地址?
作者:
accessory
时间:
2010-07-22 05:38
http://hi.baidu.com/liu_bin0101/ ... dec817bf09e6eb.html
随便一搜就有了.
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2