RTLinux 和 Xenomai 系统在mini2440的移植——usb无线网卡死机问题

在友善之臂的mini2440上移植了RTLinux (版本linux2.6.33),但是开机时boot上输出了 sched: RT throtting activated 。
经过各种查找,发现这是一个实时进程调度时间超过系统标定时间的问题,但是没有办法解决,如果取消对实时任务调度时间的限制,那移植实时系统就失去了意义。于是,之后尝试了各种版本,包括2.6.33系列,3.2系列等等,但是都出现了相同的错误。后来改用Xenomai来实现实时功能,但是仍然出现了这个错误。
经过一次偶然的测试,在不插usb网卡的情况下启动系统。居然成功进去了! 这才发现错误原因所在。开始着手解决,测试过后发现,在成功启动系统的情况下,插入usb设备就会死机失去反应,而在插入usb设备的情况下就无法进入系统。怀疑是usb驱动的问题,从友善之臂官方的2.6.32版本里拷贝了menuconfig设置,仍然出现问题。说明不是驱动和系统配置的原因。只能是实时补丁,也就是ipipe的问题。
查找后发现博客里也有一篇相似的文章,文章里给出的问题关键是ipipe的中断处理出错导致了无限响应中断。于是进入源代码根目录下查找所有中断相关的c文件,终于在./arch/arm/plat-s3c24xx/irq.c 里找到了。找到中断初始化函数 s3c24xx_init_irq () ,在switch()函数里能看见中断的响应函数。
switch (irqno) {
case …

default :set_irq_chip(irqno,&s3c_irq_chip);
set_irq_handler(irqno,handle_level_irq);
set_irq_flags(irqno,IRQF_VALID);
}
这里可以知道在插入usb设备后 ,中断响应是default里的三个函数。
可以发现在几个case下的函数都是可以正常响应中断的,而与default里的不同就在于set_irq_handler这个函数里的handle_edge_irq和handle_level_irq,查找文档可以知道这两种的不同之处前者可以在响应一个中断的同时,不屏蔽中断且可以接收另一个中断,即可能在几个中断到来时进入无限响应的状态。于是把它换成handle_level_irq,然后编译烧录开发板,问题解决。再正常加载驱动模块就可以启动无线网卡。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值