1 参考书籍
参考书籍 《嵌入式Linux驱动开发教程》 华清远见嵌入式学院
2 范例代码
/*vbus.c*/
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/device.h>
/*用于匹配驱动和设备的函数*/
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 <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/device.h>
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 <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/device.h>
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 运行结果