当前位置: 技术问答>linux和unix
关于用户态程序ioctl调用内核模块接口
来源: 互联网 发布时间:2017-01-06
本文导语: 有一个内核模块和一个用户态程序, 用户态程序通过ioctl调用模块中的接口。 内核模块中有一个switch case结构来区分用户态的请求以确定调用相应接口。 这个switch case比较大,大概有100多个case分支。 目前遇到问...
有一个内核模块和一个用户态程序, 用户态程序通过ioctl调用模块中的接口。 内核模块中有一个switch case结构来区分用户态的请求以确定调用相应接口。 这个switch case比较大,大概有100多个case分支。
目前遇到问题:用户态程序调用接口时会使内核崩溃, 提示是内核地址错误什么的。
目前已做过的调试方法:怀疑case过多, 去掉一些case分支, 用户态程序短时间(比如半个小时)重复调用某些接口时正常, 但长时间 (比如2小时以上) 重复调用也会出现内核崩溃。
(注:模块中的接口应该是没有问题的,运行过程中内存消耗正常。 程序运行环境是嵌入式设备)
大家有没有遇到过这种情况? case分支过多会不会引发这种情况,还是只是假象? 对linux内核编程不熟悉, 请大家帮帮忙, 谢谢!
目前遇到问题:用户态程序调用接口时会使内核崩溃, 提示是内核地址错误什么的。
目前已做过的调试方法:怀疑case过多, 去掉一些case分支, 用户态程序短时间(比如半个小时)重复调用某些接口时正常, 但长时间 (比如2小时以上) 重复调用也会出现内核崩溃。
(注:模块中的接口应该是没有问题的,运行过程中内存消耗正常。 程序运行环境是嵌入式设备)
大家有没有遇到过这种情况? case分支过多会不会引发这种情况,还是只是假象? 对linux内核编程不熟悉, 请大家帮帮忙, 谢谢!
|
是你的代码有bug,跟case多少无关。
|
支持 1楼的观点 绝对是bug。
|
看一下有没有内存泄露的地方吧。
|
肯定和case无关了,不过你case也是太多了点,看着这么多不会头晕的。
内核崩溃关键是看内核打印的 OOPS消息的堆栈 ,分析出错在哪里了。你这什么都没有。
肯定是你内核模块的问题了。
内核崩溃关键是看内核打印的 OOPS消息的堆栈 ,分析出错在哪里了。你这什么都没有。
肯定是你内核模块的问题了。
|
ty
|
赞~~~本总也是如此看法。
“目前遇到问题:用户态程序调用接口时会使内核崩溃, 提示是内核地址错误什么的。”
以我的经验,这是你用户态和内核态两边,定义的传送数据结构不一致引起的。