日期:2014-05-16  浏览次数:20608 次

关于用户态程序ioctl调用内核模块接口
有一个内核模块和一个用户态程序, 用户态程序通过ioctl调用模块中的接口。 内核模块中有一个switch case结构来区分用户态的请求以确定调用相应接口。 这个switch case比较大,大概有100多个case分支。
目前遇到问题:用户态程序调用接口时会使内核崩溃, 提示是内核地址错误什么的。 
目前已做过的调试方法:怀疑case过多, 去掉一些case分支, 用户态程序短时间(比如半个小时)重复调用某些接口时正常, 但长时间 (比如2小时以上) 重复调用也会出现内核崩溃。 
(注:模块中的接口应该是没有问题的,运行过程中内存消耗正常。 程序运行环境是嵌入式设备)

大家有没有遇到过这种情况? case分支过多会不会引发这种情况,还是只是假象? 对linux内核编程不熟悉, 请大家帮帮忙, 谢谢!


------解决方案--------------------
是你的代码有bug,跟case多少无关。
------解决方案--------------------
支持 1楼的观点 绝对是bug。
------解决方案--------------------
看一下有没有内存泄露的地方吧。
------解决方案--------------------
肯定和case无关了,不过你case也是太多了点,看着这么多不会头晕的。

内核崩溃关键是看内核打印的 OOPS消息的堆栈 ,分析出错在哪里了。你这什么都没有。

肯定是你内核模块的问题了。
------解决方案--------------------
探讨
肯定和case无关了,不过你case也是太多了点,看着这么多不会头晕的。

内核崩溃关键是看内核打印的 OOPS消息的堆栈 ,分析出错在哪里了。你这什么都没有。

肯定是你内核模块的问题了。

------解决方案--------------------
探讨
是你的代码有bug,跟case多少无关。