背景
做过底层的人都能够非常熟练的实现Userspace调用底层驱动,大多数场景无非就是调用open/read/write/close/ioctl等函数嘛。
但你是否想过“驱动程序是否也可以调用应用程序呢?”
而这类需求恰好在REE+TEE
(Linux + Optee
)的系统中使用到了,即一个RPC的机制,也就是TEE反向调用REE的流程中,要求反向通知Usersapce的程序去协助做一些任务。
在这个场景中,就涉及到了KernelSpace的驱动通知(并传参数)UserSpace的程序去干活。
原理
如果你去看具体的实现代码,会发现是非常复杂的。我们抽丝剥茧后,只看其中最本质的原理,你会发现其实就是使用了两组完成量。其具体模型如下所示: