- 论坛徽章:
- 0
|
我把大概的代码以及一些尝试写一下,希望大家帮我分析:
pSharedMem = kmalloc(ulShMemSize,GFP_KERNEL); // 此句执行OK,ulShMemSize的值是32864
......
// 下面这句执行crash,其中sizeof(struct sShbMemTable)的值是12
psMemTableElement = kmalloc(sizeof(struct sShbMemTable),GFP_KERNEL);
我做了如下尝试(主要是更改错误的那个kmalloc)都失败:
(1)不赋值,改成kmalloc(sizeof(struct sShbMemTable),GFP_KERNEL);
(2)sizeof(struct sShbMemTable)直接换成12,改成psMemTableElement = kmalloc(12,GFP_KERNEL);
(3)分配大小改为32864,改成psMemTableElement = kmalloc(32864,GFP_KERNEL);
(4)GFP_KERNEL换成GFP_ATOMIC,改成psMemTableElement = kmalloc(sizeof(struct sShbMemTable),GFP_ATOMIC);
但改成下面这一句就能执行通过(与上面的(3)相比十分令人不解):
psMemTableElement = kmalloc(ulShMemSize,GFP_KERNEL);
这里ulShMemSize的值是32864;但直接用数字32864却会crash,十分奇怪。 当然,这里多分配了这儿多空间肯定是不符合上下文环境的,这里仅供分析。(这里用ulShMemSize是因为上面红色的那句是执行通过的)
我的平台是ARM,32位系统,linux2.6.23.1。
谢谢! |
|