linux 调试笔记 - insmod error

在开发driver新功能时,由于大量数据读取使ko文件增大,导致加载模块时内存空间不足,影响到用户空间,特别是WiFi模块。解决方法是在memory.h中调整MODULES_VADDR,增大modules空间,成功解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

vmap allocation for size xxx failed: use vmalloc=<size> 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,问题解决。

 

<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值