- 论坛徽章:
- 0
|
芯片:TCC7901(ARM926T)
厂商提供的BSP kernel-2.6.24进行移植
在DEMOBOARD上用的是480×272的屏,直接烧写BSP的DEMO目标文件显示一切正常,BOOTLOARD也起来了,现在用自己的板子 ,屏是800×480的,我已经将BOOTLOARD移植好了,跑DEMOKERNEL,也起来了,没有爆,只是小企鹅的LOGO在屏幕左上方480*272的地方显示,现在我在头文件中修改#define使之变为800×480的,内核爆了,我查了一下原因,是虚拟内存的问题,我将出错代码贴出来,PRINTK部分也贴出来,希望大家帮着看看,谢谢
//出错程序源代码
static struct vm_region *
vm_region_alloc(struct vm_region *head, size_t size, gfp_t gfp)
{
unsigned long addr = head->vm_start, end = head->vm_end - size;
printk("addr = %ld, end = %ld, size = %d,vm_end = %ld\n",addr,end,size,head->vm_end);
unsigned long flags;
struct vm_region *c, *new;
printk("vm_start = %ld\n",c->vm_start);
new = kmalloc(sizeof(struct vm_region), gfp);
if (!new){
printk("kmalloc null\n");
goto out;
}
spin_lock_irqsave(&consistent_lock, flags);
list_for_each_entry(c, &head->vm_list, vm_list) {
printk("addr = %ld,end = %ld,size = %ld,c->vm_start = %ld,c->vm_end = %ld\n",addr,end,size,c->vm_start,c->vm_end);
if ((addr + size) < addr){
printk("(addr + size) < addr\n");
goto nospc;
}
if ((addr + size) <= c->vm_start){
printk("(addr + size) <= c->vm_start\n");
goto found;
}
addr = c->vm_end;
//程序进入了这里
if (addr > end){
printk("addr is c->vm_end = %ld,end = %ld\n",c->vm_end,end);
printk("addr > end\n");
goto nospc;
}
}
found:
/*
* Insert this entry _before_ the one we found.
*/
list_add_tail(&new->vm_list, &c->vm_list);
new->vm_start = addr;
new->vm_end = addr + size;
new->vm_active = 1;
spin_unlock_irqrestore(&consistent_lock, flags);
return new;
nospc:
spin_unlock_irqrestore(&consistent_lock, flags);
kfree(new);
out:
return NULL;
}
//串口的输出打印
addr = -4194304, end = -2101248, size = 4096,vm_end = -2097152
vm_start = 0
Malloc DMA buffer @0xFFC00000(Phy=0x228B9000), size:2048
addr = -4194304, end = -2101248, size = 4096,vm_end = -2097152
vm_start = 0
2 addr = -4194304,end = -2101248,size = 4096,c->vm_start = -4194304,c->vm_end = -4190208
Malloc DMA buffer @0xFFC01000(Phy=0x22898000), size:2048
[SPI] probe ^^ [tcc79x_spi_probe:326]
addr = -4194304, end = -2101248, size = 4096,vm_end = -2097152
vm_start = 0
2 addr = -4194304,end = -2101248,size = 4096,c->vm_start = -4194304,c->vm_end = -4190208
2 addr = -4190208,end = -2101248,size = 4096,c->vm_start = -4190208,c->vm_end = -4186112
Malloc DMA buffer @0xFFC02000(Phy=0x22899000), size:2048
addr = -4194304, end = -2101248, size = 4096,vm_end = -2097152
vm_start = 0
2 addr = -4194304,end = -2101248,size = 4096,c->vm_start = -4194304,c->vm_end = -4190208
2 addr = -4190208,end = -2101248,size = 4096,c->vm_start = -4190208,c->vm_end = -4186112
2 addr = -4186112,end = -2101248,size = 4096,c->vm_start = -4186112,c->vm_end = -4182016
Malloc DMA buffer @0xFFC03000(Phy=0x228BA000), size:2048
the width is 800
the height is 480
the depth lenght is 32
map_size = 1540096
addr = -4194304, end = -3637248, size = 1540096,vm_end = -2097152
vm_start = 0
2 addr = -4194304,end = -3637248,size = 1540096,c->vm_start = -4194304,c->vm_end = -4190208
2 addr = -4190208,end = -3637248,size = 1540096,c->vm_start = -4190208,c->vm_end = -4186112
2 addr = -4186112,end = -3637248,size = 1540096,c->vm_start = -4186112,c->vm_end = -4182016
2 addr = -4182016,end = -3637248,size = 1540096,c->vm_start = -4182016,c->vm_end = -4177920
map_size = 1536000
fb0: tccfb frame buffer device
the width is 800
the height is 480
the depth lenght is 32
map_size = 1540096
addr = -4194304, end = -3637248, size = 1540096,vm_end = -2097152
vm_start = 0
2 addr = -4194304,end = -3637248,size = 1540096,c->vm_start = -4194304,c->vm_end = -4190208
2 addr = -4190208,end = -3637248,size = 1540096,c->vm_start = -4190208,c->vm_end = -4186112
2 addr = -4186112,end = -3637248,size = 1540096,c->vm_start = -4186112,c->vm_end = -4182016
2 addr = -4182016,end = -3637248,size = 1540096,c->vm_start = -4182016,c->vm_end = -4177920
2 addr = -4177920,end = -3637248,size = 1540096,c->vm_start = -4177920,c->vm_end = -2637824
addr is c->vm_end = -2637824,end = -3637248
addr > end
map_cpu = null and vaule is 0
map_size = 1536000
Failed to allocate video RAM: -12
fb1: tccfb frame buffer device
the width is 800
the height is 480
the depth lenght is 32
map_size = 1540096
addr = -4194304, end = -3637248, size = 1540096,vm_end = -2097152
vm_start = 0
2 addr = -4194304,end = -3637248,size = 1540096,c->vm_start = -4194304,c->vm_end = -4190208
2 addr = -4190208,end = -3637248,size = 1540096,c->vm_start = -4190208,c->vm_end = -4186112
2 addr = -4186112,end = -3637248,size = 1540096,c->vm_start = -4186112,c->vm_end = -4182016
2 addr = -4182016,end = -3637248,size = 1540096,c->vm_start = -4182016,c->vm_end = -4177920
2 addr = -4177920,end = -3637248,size = 1540096,c->vm_start = -4177920,c->vm_end = -2637824
addr is c->vm_end = -2637824,end = -3637248
addr > end
map_cpu = null and vaule is 0
map_size = 1536000
希望大家告知内存分配问题 |
|