manwenbin520 发表于 2015-01-28 17:54

insmod ko文件时内存不足问题 arm bcm 具体看log

出错log 望大神指教



# insmod linux-kernel-bde.ko dmasize=8M himem=1
linux_kernel_bde: module license 'Proprietary' taints kernel.
Disabling lock debugging due to kernel taint
Jan1 00:06:13 iProc kern.warn kernel: linux_kernel_bde: module license 'Proprietary' taints kernel.
Jan1 00:06:13 iProc kern.warn kernel: Disabling lock debugging due to kernel taint
# cat /proc/linux-kernel-bde
Broadcom Device Enumerator (linux-kernel-bde)
DMA Memory (high): 8388608 bytes, 0 used, 8388608 free
Devices:
      0 (swi) : AXI Device 0x8344:0x1:0x48000000:194
# insmod linux-uk-proxy.ko
# mknod /dev/linux-uk-proxy c 125 0
# insmodlinux-bcm-diag-full.ko      //这个ko文件比较大
vmap allocation for size 19308544 failed: use vmalloc=<size> to increase size.
vmalloc: allocation failure: 19303074 bytes
insmod: page allocation failure: order:0, mode:0xd0
Backtrace:
[<c000c36c>] (dump_backtrace+0x0/0x10c) from [<c041a30c>] (dump_stack+0x18/0x1c)

r6:deb7e000 r5:00000000 r4:000000d0 r3:c0588dc0
[<c041a2f4>] (dump_stack+0x0/0x1c) from [<c0084d0c>] (warn_alloc_failed+0xd0/0x1
14)
[<c0084c3c>] (warn_alloc_failed+0x0/0x114) from [<c00a2c14>] (__vmalloc_node_ran
ge+0x144/0x1e4)
r3:01268aa2 r2:c04d3f44
r7:ffffffff r6:01268aa2 r5:00000000 r4:c007332c
[<c00a2ad0>] (__vmalloc_node_range+0x0/0x1e4) from [<c000d134>] (module_alloc+0x
44/0x4c)
r8:e2f00588 r7:e2efbdf4 r6:01268aa2 r5:000189eb r4:e308a488
[<c000d0f0>] (module_alloc+0x0/0x4c) from [<c007332c>] (module_alloc_update_boun
ds+0x14/0x64)
[<c0073318>] (module_alloc_update_bounds+0x0/0x64) from [<c0073ac4>] (sys_init_m
odule+0x720/0x19f0)
r6:000189eb r5:000189eb r4:e308a488 r3:0000001b
[<c00733a4>] (sys_init_module+0x0/0x19f0) from [<c00091e0>] (ret_fast_syscall+0x
0/0x30)
Mem-info:
Normal per-cpu:
CPU    0: hi:186, btch:31 usd:77
active_anon:5458 inactive_anon:0 isolated_anon:0
active_file:129 inactive_file:5514 isolated_file:0
unevictable:0 dirty:0 writeback:0 unstable:0
free:106914 slab_reclaimable:41 slab_unreclaimable:419
mapped:109 shmem:0 pagetables:30 bounce:0
Normal free:427656kB min:2836kB low:3544kB high:4252kB active_anon:21832kB inact
ive_anon:0kB active_file:516kB inactive_file:22056kB unevictable:0kB isolated(an
on):0kB isolated(file):0kB present:503936kB mlocked:0kB dirty:0kB writeback:0kB
mapped:436kB shmem:0kB slab_reclaimable:164kB slab_unreclaimable:1676kB kernel_s
tack:248kB pagetables:120kB unstable:0kB bounce:0kB writeback_tmp:0kB pages_scan
ned:0 all_unreclaimable? no
lowmem_reserve[]: 0 0
Normal: 2*4kB 2*8kB 1*16kB 1*32kB 1*64kB 0*128kB 2*256kB 2*512kB 2*1024kB 3*2048
kB 102*4096kB = 427656kB
5655 total pagecache pages
126976 pages of RAM
107054 free pages
2536 reserved pages
395 slab pages
326 pages shared
0 pages swap cached
Jan1 00:03:15 iProc kern.warn kernel: vmap allocation for size 19308544 failed
: use vmalloc=<size> to increase size.
insmod: can't insert 'linux-bcm-diag-full.ko': Cannot allocate memory
# Jan1 00:03:15 iProc kern.warn kernel: vmalloc: allocation failure: 19303074
bytes
Jan1 00:03:15 iProc kern.warn kernel: insmod: page allocation failure: order:0
, mode:0xd0
Jan1 00:03:15 iProc kern.warn kernel: Backtrace:
Jan1 00:03:15 iProc kern.warn kernel: [<c000c36c>] (dump_backtrace+0x0/0x10c)
from [<c041a30c>] (dump_stack+0x18/0x1c)
Jan1 00:03:15 iProc kern.warn kernel:r6:deb7e000 r5:00000000 r4:000000d0 r3:
c0588dc0
Jan1 00:03:15 iProc kern.warn kernel: [<c041a2f4>] (dump_stack+0x0/0x1c) from
[<c0084d0c>] (warn_alloc_failed+0xd0/0x114)
Jan1 00:03:15 iProc kern.warn kernel: [<c0084c3c>] (warn_alloc_failed+0x0/0x11
4) from [<c00a2c14>] (__vmalloc_node_range+0x144/0x1e4)
Jan1 00:03:15 iProc kern.warn kernel:r3:01268aa2 r2:c04d3f44
Jan1 00:03:15 iProc kern.warn kernel:r7:ffffffff r6:01268aa2 r5:00000000 r4:
c007332c
Jan1 00:03:15 iProc kern.warn kernel: [<c00a2ad0>] (__vmalloc_node_range+0x0/0
x1e4) from [<c000d134>] (module_alloc+0x44/0x4c)
Jan1 00:03:15 iProc kern.warn kernel:r8:e2f00588 r7:e2efbdf4 r6:01268aa2 r5:
000189eb r4:e308a488
Jan1 00:03:15 iProc kern.warn kernel: [<c000d0f0>] (module_alloc+0x0/0x4c) fro
m [<c007332c>] (module_alloc_update_bounds+0x14/0x64)
Jan1 00:03:15 iProc kern.warn kernel: [<c0073318>] (module_alloc_update_bounds
+0x0/0x64) from [<c0073ac4>] (sys_init_module+0x720/0x19f0)
Jan1 00:03:15 iProc kern.warn kernel:r6:000189eb r5:000189eb r4:e308a488 r3:
0000001b
Jan1 00:03:15 iProc kern.warn kernel: [<c00733a4>] (sys_init_module+0x0/0x19f0
) from [<c00091e0>] (ret_fast_syscall+0x0/0x30)
Jan1 00:03:15 iProc kern.warn kernel: Mem-info:
Jan1 00:03:15 iProc kern.warn kernel: Normal per-cpu:
Jan1 00:03:15 iProc kern.warn kernel: CPU    0: hi:186, btch:31 usd:77
Jan1 00:03:15 iProc kern.warn kernel: active_anon:5458 inactive_anon:0 isolate
d_anon:0
Jan1 00:03:15 iProc kern.warn kernel:active_file:129 inactive_file:5514 isol
ated_file:0
Jan1 00:03:15 iProc kern.warn kernel:unevictable:0 dirty:0 writeback:0 unsta
ble:0
Jan1 00:03:15 iProc kern.warn kernel:free:106914 slab_reclaimable:41 slab_un
reclaimable:419
Jan1 00:03:15 iProc kern.warn kernel:mapped:109 shmem:0 pagetables:30 bounce
:0
Jan1 00:03:15 iProc kern.warn kernel: Normal free:427656kB min:2836kB low:3544
kB high:4252kB active_anon:21832kB inactive_anon:0kB active_file:516kB inactive_
file:22056kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:50393
6kB mlocked:0kB dirty:0kB wr
Jan1 00:03:15 iProc kern.warn kernel: lowmem_reserve[]: 0 0
Jan1 00:03:15 iProc kern.warn kernel: Normal: 2*4kB 2*8kB 1*16kB 1*32kB 1*64kB
0*128kB 2*256kB 2*512kB 2*1024kB 3*2048kB 102*4096kB = 427656kB
Jan1 00:03:15 iProc kern.warn kernel: 5655 total pagecache pages
Jan1 00:03:15 iProc kern.warn kernel: 126976 pages of RAM
Jan1 00:03:15 iProc kern.warn kernel: 107054 free pages
Jan1 00:03:15 iProc kern.warn kernel: 2536 reserved pages
Jan1 00:03:15 iProc kern.warn kernel: 395 slab pages
Jan1 00:03:15 iProc kern.warn kernel: 326 pages shared
Jan1 00:03:15 iProc kern.warn kernel: 0 pages swap cached

Tinnal 发表于 2015-01-28 20:30

回复 1# manwenbin520


    KO太大了。KO本身的空间也是通过vmalloc分配出来的,因为太大,没法满足,分配不出来了。

你这么大,肯定是因为KO里含有大量的数据。正确的方法是采用固件的方案去存这么数据。

镇水铁牛 发表于 2015-01-28 23:20

回复 2# Tinnal
请教下:正确的方法是采用固件的方案去存这么数据?所谓的固件指的是NVram,flash一类的东西吧。


   

Tinnal 发表于 2015-01-29 23:22

回复 3# 镇水铁牛


呵呵,固件这个词有歧义。 原来是指在设备内部的固化在flash上的程序(通常是BareMeta程序),对设备的用户不可见。但后来设备厂家想更为灵活的更新设备功能以级降成本。把设备上的flash换成RAM了,这就涉及固件的下载了,同时,固件也变成了PC上的一个文件(通常和HOST驱动打包发布),HOST驱动此时,也就多了一个职责--下载固件。

Linux提供的支持函数为:request_firmware。
关于它的更多资讯,请移步,度娘很美,不是吗?值得你长谈。{:yxh49:}

manwenbin520 发表于 2015-02-02 11:59

回复 2# Tinnal

大神 可以说具体点吗 具体怎么修改 :“正确的方法是采用固件的方案去”怎么处理
   

Tinnal 发表于 2015-02-02 14:05

http://blog.csdn.net/skywalkzf/article/details/7479132

manwenbin520 发表于 2015-02-05 17:13

回复 6# Tinnal
猫大神

那个module 16M的限制能改成32M的限制吗

   

Tinnal 发表于 2015-02-05 19:32

回复 7# manwenbin520

自己去改吧。这是ARM的memory.h里面的。/*
* PAGE_OFFSET - the virtual address of the start of the kernel image
* TASK_SIZE - the maximum size of a user space task.
* TASK_UNMAPPED_BASE - the lower boundary of the mmap VM area
*/
#define PAGE_OFFSET                UL(CONFIG_PAGE_OFFSET)
#define TASK_SIZE                (UL(CONFIG_PAGE_OFFSET) - UL(0x01000000))
#define TASK_UNMAPPED_BASE        (UL(CONFIG_PAGE_OFFSET) / 3)

/*
* The maximum size of a 26-bit user space task.
*/
#define TASK_SIZE_26                UL(0x04000000)

/*
* The module space lives between the addresses given by TASK_SIZE
* and PAGE_OFFSET - it must be within 32MB of the kernel text.
*/
#ifndef CONFIG_THUMB2_KERNEL
#define MODULES_VADDR                (PAGE_OFFSET - 16*1024*1024)
#else
/* smaller range for Thumb-2 symbols relocation (2^24)*/
#define MODULES_VADDR                (PAGE_OFFSET - 8*1024*1024)
#endif

#if TASK_SIZE > MODULES_VADDR
#error Top of user space clashes with start of module space
#endif

/*
* The highmem pkmap virtual space shares the end of the module area.
*/
#ifdef CONFIG_HIGHMEM
#define MODULES_END                (PAGE_OFFSET - PMD_SIZE)
#else
#define MODULES_END                (PAGE_OFFSET)
#endif

yuwefo 发表于 2015-02-08 17:33

jatering 发表于 2015-03-25 14:46

回复 1# manwenbin520


    楼主,这个问题解决了没?没解决的话,我们沟通下。
页: [1] 2
查看完整版本: insmod ko文件时内存不足问题 arm bcm 具体看log