关于Linux驱动的一种错误:Unable to handle kernel paging request at virtual address

今天写了个AD驱动,基于S3C2440,要测8个通道正弦信号的测量,只用2440里的一条AD线路,AIN0,方案怎么做,驱动怎么写。

其中在写完测试程序,读取驱动文件里的值得时候,遇到了错误“Unable to handle kernel paging request at virtual address”

在百度里找到了半天的废话,最后还是在google里反现了重点,解决方案点击打开链接,其中一句话,“字串长于目的数组. 当函数返回时导致的缓存区溢出引起一次 oops”,看后瞬间明朗了

先说说方案:

关于Linux驱动的一种错误:Unable to handle kernel paging request at virtual address_第1张图片

硬件:

74L151是个8选1通道选择器,所以方案思路是,分时测八个通道的信号。

LM331是一个能将频率值转换成电压的芯片。


软件:

所以写去驱动的思路是:在原有的AD驱动里加入三个引脚做线路选择,定义为channel = 000,来控制74LS151。转换完成一次channel要自加1:000,001,010,011,100,101,110,111。如此循环,然后将channel值和AD的数据同时copy_to_user。

接下来写测试程序:

关于Linux驱动的一种错误:Unable to handle kernel paging request at virtual address_第2张图片

有点二的测试程序没写while(1),执行一次,显示一次。不过正常使用了,接下来可以打开Qt做显示了。

sry,Qt部分就不介绍了。


希望与大家交流,如有更好方案,欢迎留言~


下面介绍本不错的,点击打开链接。

在写驱动的时候帮了我大忙。










你可能感兴趣的:(关于Linux驱动的一种错误:Unable to handle kernel paging request at virtual address)