linux 调试笔记 - insmod error

       最近在 driver 里面实现一个新的功能时,发现平台 APP 部分出现一些异常状况,界面显示异常,wifi 相关的应用不停的打印 error 信息,讲道理我实现的新功能只是在系统启动的时候启用,怎么会影响到 user space 部分。相关 log 信息如下:

vmap allocation for size xxx failed: use vmalloc= to increase size.
vmalloc: allocation failure: xxx bytes
insmod: page allocation failure: order:0, mode:0xd0
CPU: 3 PID: 851 Comm: insmod Tainted: P
...
...
insmod: error inserting 'xxx/xxx.ko': -l Cannot allocate memory
...

不提解决过程,直接讲原因和解法。

原因:

目前系统的 driver 都编译成 .ko 文件来 insmod,因为实现的功能里面需要读取大量的数据,导致编译出来的 .ko 增加了近 2MB,原先加载所有的 .ko 大概需要 12.5 MB,现在变成 14.5 MB, modules 这块虚拟内存大小为 14 MB,默认为 16 MB,但是有 2 MB用来做 pkmap了,因此空间不够,wifi 模块挂载失败,可能还踩到 userspace。

解法:

在 memory.h 里面修改 MODULES_VADDR ,使得 modules 空间增加 2 M,问题解决。

 

内存管理部分的知识参考如下链接:

https://blog.csdn.net/hongzg1982/article/details/54880539

blog.sina.com.cn/s/blog_6488248f0100wu6v.html

https://blog.csdn.net/u014645605/article/details/76173732

你可能感兴趣的:(linux)