s5pv210 内核内存分布问题

如下是linux正常系统启动时的log:

[    0.000000] Memory: 256MB 256MB = 512MB total
[    0.000000] Memory: 391676k/391676k available, 132612k reserved, 0K highmem
[    0.000000] Virtual kernel memory layout:
[    0.000000]     vector  : 0xffff0000 - 0xffff1000   (   4 kB)
[    0.000000]     fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
[    0.000000]     DMA     : 0xff000000 - 0xffe00000   (  14 MB)
[    0.000000]     vmalloc : 0xf0800000 - 0xfc000000   ( 184 MB)
[    0.000000]     lowmem  : 0xc0000000 - 0xf0000000   ( 768 MB)
[    0.000000]     modules : 0xbf000000 - 0xc0000000   (  16 MB)
[    0.000000]       .init : 0xc0008000 - 0xc002e000   ( 152 kB)
[    0.000000]       .text : 0xc002e000 - 0xc05be000   (5696 kB)
[    0.000000]       .data : 0xc05be000 - 0xc0606500   ( 290 kB)

内核空间占用从0xC0000000到0xFFFFFFFF的1GB线性地址空间,内核线性地址空间由所有进程共享,但只有运行在内核态的进程才能访问,用户进程可以通过系统调用切换到内核态访问内核空间,进程运行在内核态时所产生的地址都属于内核空间。

物理内存只有不连续的512MB,但是在这里却占用了768MB,导致vmalloc只有184MB。


存在的问题和疑问:

试着修改两段内存地址连续,把DMC0的起始地址由0x20000000改成0x30000000,内核中也作相应的修改,但是引导linux时后会出现oops错误,应该是访问了空指针,但是为什么会出现空指针呢,是否是内存映射的不对?

[    0.000000] Memory: 512MB = 512MB total
[    0.000000] Memory: 391924k/4k available, 0k reserved, 0K highmem
[    0.000000] Virtual kernel memory layout:
[    0.000000]     vector  : 0xffff0000 - 0xffff1000   (   4 kB)
[    0.000000]     fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
[    0.000000]     DMA     : 0xff000000 - 0xffe00000   (  14 MB)
[    0.000000]     vmalloc : 0xe0800000 - 0xfc000000   ( 440 MB)
[    0.000000]     lowmem  : 0xc0000000 - 0xe0000000   ( 512 MB)  //大小已经改成512MB了
[    0.000000]     modules : 0xbf000000 - 0xc0000000   (  16 MB)
[    0.000000]       .init : 0xc0008000 - 0xc002d000   ( 148 kB)
[    0.000000]       .text : 0xc002d000 - 0xc0579000   (5424 kB)
[    0.000000]       .data : 0xc057a000 - 0xc05c0ec0   ( 284 kB)

......

[    1.864637] Freeing init memory: 148K
[    1.868580] BUG: sleeping function called from invalid context at arch/arm/mm/fault.c:295
[    1.876362] in_atomic(): 0, irqs_disabled(): 128, pid: 1, name: init
[    1.882685] Backtrace: 
[    1.885136] [<c0031fb4>] (dump_backtrace+0x0/0x110) from [<c03d57f8>] (dump_stack+0x18/0x1c)
[    1.893519]  r7:00100104 r6:00000000 r5:cf803d10 r4:cf800000
[    1.899159] [<c03d57e0>] (dump_stack+0x0/0x1c) from [<c004a504>] (__might_sleep+0x120/0x140)
[    1.907563] [<c004a3e4>] (__might_sleep+0x0/0x140) from [<c0034970>] (do_page_fault+0xac/0x1fc)
[    1.916228] [<c00348c4>] (do_page_fault+0x0/0x1fc) from [<c002d2ec>] (do_DataAbort+0x3c/0xa0)
[    1.924720] [<c002d2b0>] (do_DataAbort+0x0/0xa0) from [<c002da6c>] (__dabt_svc+0x4c/0x60)
[    1.932862] Exception stack(0xcf803d10 to 0xcf803d58)
[    1.937890] 3d00:                                     00100100 00200200 00100100 00200200
[    1.946037] 3d20: cfc002c0 c0a37598 00000000 c0a37580 c057ea58 c057ecd4 60000113 cf803dcc
[    1.954182] 3d40: 00000018 cf803d58 c0094b30 c0094c98 60000193 ffffffff
[    1.960764]  r7:c0a37580 r6:00000000 r5:cf803d44 r4:ffffffff
[    1.966412] [<c0094a7c>] (get_page_from_freelist+0x0/0x4b0) from [<c0095034>] (__alloc_pages_nodemask+0x108/0x580)
[    1.976722] [<c0094f2c>] (__alloc_pages_nodemask+0x0/0x580) from [<c00a3958>] (handle_mm_fault+0x21c/0xc20)
[    1.986420] [<c00a373c>] (handle_mm_fault+0x0/0xc20) from [<c00349d0>] (do_page_fault+0x10c/0x1fc)
[    1.995345] [<c00348c4>] (do_page_fault+0x0/0x1fc) from [<c002d2ec>] (do_DataAbort+0x3c/0xa0)
[    2.003838] [<c002d2b0>] (do_DataAbort+0x0/0xa0) from [<c002df64>] (ret_from_exception+0x0/0x10)
[    2.012585] Exception stack(0xcf803fb0 to 0xcf803ff8)
[    2.017614] 3fa0:                                     00000000 bed56000 00020000 00001000
[    2.025762] 3fc0: 0002101c 00000001 bed56000 bed75f2c bed75ec8 bed56000 00000000 00000000
[    2.033906] 3fe0: 00021024 bed75eb0 bed75ed8 00016b78 a0000010 ffffffff
[    2.040488]  r7:bed75f2c r6:bed56000 r5:00000001 r4:ffffffff
[    2.046126] Unable to handle kernel paging request at virtual address 00100104
[    2.053314] pgd = cfacc000
[    2.056000] [00100104] *pgd=3fad8031, *pte=00000000, *ppte=00000000
[    2.062241] Internal error: Oops: 817 [#1] PREEMPT
[    2.067005] last sysfs file: 
[    2.069952] Modules linked in:
[    2.072988] CPU: 0    Not tainted  (2.6.35.7-g2e80cfd-dirty #50)
[    2.078967] PC is at get_page_from_freelist+0x21c/0x4b0
[    2.084166] LR is at get_page_from_freelist+0xb4/0x4b0
[    2.089279] pc : [<c0094c98>]    lr : [<c0094b30>]    psr: 60000193
[    2.089285] sp : cf803d58  ip : 00000018  fp : cf803dcc
[    2.100716] r10: 60000113  r9 : c057ecd4  r8 : c057ea58
[    2.105915] r7 : c0a37580  r6 : 00000000  r5 : c0a37598  r4 : cfc002c0
[    2.112415] r3 : 00200200  r2 : 00100100  r1 : 00200200  r0 : 00100100
[    2.118915] Flags: nZCv  IRQs off  FIQs on  Mode SVC_32  ISA ARM  Segment user
[    2.126107] Control: 10c5387d  Table: 3facc019  DAC: 00000015
[    2.131825] 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值