Xen的PV Driver使用的是Split Model, 到这里现在也比较清楚前后端的交互方式了,通过Grant Table来共享I/O ring, 在ring中放入所需数据的grant reference, 并通过Event Channel机制来告知对方,而初始的grant reference则通过XenStore来进行共享。
在上一篇中我们了解了XenStore的作用和交互方式,本篇将实现一个最简单的PV Split Driver, 并通过向XenStore中写入相应的配置信息来激活驱动。 而在下一篇中我将加入XenBus的状态信息。
- Grant Table
- I/O Ring Structure
- Event Channel Implementation
- Event Channel Usage
- XenStore Usage
- Write a PV Driver(本篇)
- Connect to XenBus
代码非常简单,没什么要说的,所以直接上代码:)
DomU (Front End)
1 | static int alice_front_probe(struct xenbus_device *dev, |
非常简单,调用xenbus接口中的xenbus_register_frontend
函数即可,这个函数的作用就是在linux注册一个驱动.其中驱动的声明如↓
1 | 85: struct xenbus_device_id |
我们的驱动非常简单,只有名字和检测时调用的函数,完整的驱动把相应的回调函数指针填上即可。其中xenbus_device_id
是用来在xenstore中分类到对应设备key下用的。
后端的代码和上面几乎一样,就不贴出来了。之后只要仿照其他设备的xenstore配置信息配一下就好:
1 | DEVICE=alice_dev |
写的时候可以xenstore-ls
参考一下其他设备的写法就可以了。
Run Demo
1 | alice@domU: sudo insmod alice_domU.ko |
如果没有activate的话,probe相关的第二条log不会输出。