Linux设备模型-总线,设备和驱动

2019-07-12 21:06发布

1 参考书籍 参考书籍 《嵌入式Linux驱动开发教程》 华清远见嵌入式学院 2 范例代码 /*vbus.c*/ #include #include #include #include /*用于匹配驱动和设备的函数*/ static int vbus_match(struct device *dev, struct device_driver *drv) { return 1; } static struct bus_type vbus={ .name="vbus", .match=vbus_match, }; EXPORT_SYMBOL(vbus); static int __init vbus_init() { /*向内核注册vbus总线*/ return bus_register(&vbus); } static int __init vbus_exit() { /*向内核注销vbus总线*/ bus_unregister(&vbus); } module_init(vbus_init); module_exit(vbus_exit); MODULE_LICENSE("GPL"); /*vdrv.c*/ /*驱动文件*/ #include #include #include #include extern struct bus_type vbus; /*一个代表驱动的vdrv对象*/ static struct device_driver vdrv={ .name="vdrv", .bus=&vbus, /*vderv所属的总线是vbus*/ }; static int __init vdrv_init() { return driver_register(&vdrv); } static int __init vdrv_exit() { driver_unregister(&vdrv); } module_init(vdrv_init); module_exit(vdrv_exit); MODULE_LICENSE("GPL"); /*vdev.c*/ #include #include #include #include extern struct bus_type vbus; static void vdev_release(struct device *dev) { } static struct device vdev={ .init_name="vdev", .bus=&vbus, .release=vdev_release, }; static int __init vdev_init() { return device_register(&vdev); } static int __init vdev_exit() { device_unregister(&vdev); } module_init(vdev_init); module_exit(vdev_exit); MODULE_LICENSE("GPL"); 3 运行结果
这里写图片描述