在特定 ISR 之后,是否有任何(肮脏的)方法可以引发上下文切换到特定进程?
在正常情况下,在 ISR 之后,被中断的进程将继续运行,我必须等待调度程序选择该特定进程。我想在 ISR 之后立即切换到具体流程。
任何建议都会很棒。谢谢!
在特定 ISR 之后,是否有任何(肮脏的)方法可以引发上下文切换到特定进程?
在正常情况下,在 ISR 之后,被中断的进程将继续运行,我必须等待调度程序选择该特定进程。我想在 ISR 之后立即切换到具体流程。
任何建议都会很棒。谢谢!
构造您的驱动程序,以便进程在合适的系统调用 ( read()
, ioctl()
) 上有一个线程阻塞,同时 ISR 唤醒该线程(因为至少有一个字节可用于read()
)。
然后,确保线程具有尽可能高的优先级,并且最好使用实时调度程序(SCHED_FIFO
或SCHED_RR
)。在实践中,如果您的进程没有以 root 权限运行,您需要以 root 权限启动服务,设置线程,然后删除权限;CAP_SYS_NICE
或通过例如提供二进制可执行功能setcap pe=CAP_SYS_NICE binary
。
从技术上讲,司机也有可能扰乱日程安排,但我不会那样做。任何时间紧迫的事情都应该在内核 ISR 中完成。
如果您想在用户空间中执行此操作,因为您不希望您的代码是内核的派生产品并因此获得 GPL 许可,那么您只能靠自己了。