当前位置: 技术问答>linux和unix
请教s3c2410-UART2以DMA方式进行数据读取的驱动中问题,感谢
来源: 互联网 发布时间:2016-04-07
本文导语: 请教s3c2410-UART2以DMA方式进行数据读取的驱动中问题,感谢 我的目标平台为 s3c2410 - linux2.4.18 宿主机开发开发平台为:redhat9.0 做对UART2以DMA方式进行数据读取的驱动 (UART2的读采用DMA,写不采用DMA) 目前程序基本...
请教s3c2410-UART2以DMA方式进行数据读取的驱动中问题,感谢
我的目标平台为 s3c2410 - linux2.4.18
宿主机开发开发平台为:redhat9.0
做对UART2以DMA方式进行数据读取的驱动
(UART2的读采用DMA,写不采用DMA)
目前程序基本写完,但存在一些问题。
我在驱动程序的read里 down_interruptible(&b->sem),
b为DMA驱动里的缓冲区数据结构实例
等待驱动的DMA中断中释放信号量(驱动里up(&b->sem);)。
我的程序在等待获取信号量时,出现如下错误:
Unable to handle kernel NULL pointer dereference at virtual address 00000000
pgd = c0004000
*pgd = 00000000, *pmd = 00000000
Internal error: Oops: 0
CPU: 0
...
...
...
Code: bad PC value.
Kernel panic: Aiee, killing interrupt handler!
In interrupt handler - not syncing
附件中为驱动程序源码:
uart_driver.c 为驱动程序
uart_test.c 为驱动测试应用程序
源码的链接可在这下到:http://linux.chinaunix.net/bbs/thread-1022443-1-1.html
也可以在此邮箱里下到:dfss-buaa@163.com / beihang
麻烦熟悉或做过此类开发的朋友为我看看,感谢。
我的目标平台为 s3c2410 - linux2.4.18
宿主机开发开发平台为:redhat9.0
做对UART2以DMA方式进行数据读取的驱动
(UART2的读采用DMA,写不采用DMA)
目前程序基本写完,但存在一些问题。
我在驱动程序的read里 down_interruptible(&b->sem),
b为DMA驱动里的缓冲区数据结构实例
等待驱动的DMA中断中释放信号量(驱动里up(&b->sem);)。
我的程序在等待获取信号量时,出现如下错误:
Unable to handle kernel NULL pointer dereference at virtual address 00000000
pgd = c0004000
*pgd = 00000000, *pmd = 00000000
Internal error: Oops: 0
CPU: 0
...
...
...
Code: bad PC value.
Kernel panic: Aiee, killing interrupt handler!
In interrupt handler - not syncing
附件中为驱动程序源码:
uart_driver.c 为驱动程序
uart_test.c 为驱动测试应用程序
源码的链接可在这下到:http://linux.chinaunix.net/bbs/thread-1022443-1-1.html
也可以在此邮箱里下到:dfss-buaa@163.com / beihang
麻烦熟悉或做过此类开发的朋友为我看看,感谢。
|
把关键的部分用...省略掉了。
down() 和 up()用的时候匹配了吗,特别是有出错处理的时候。
DMA地址是不是aligned的?
down() 和 up()用的时候匹配了吗,特别是有出错处理的时候。
DMA地址是不是aligned的?
|
估计没有人会去看你的源码,从出错的提示来看,肯定是指针为空,也就是在使用指针前没有分配空间,多半是低级失误引起的
|
赞同!
把整个Ooooooop贴出来还好,那有心情看代码
|
顺便说一下,现在还用2.4的kernel,很不合时宜阿。