总线:
#include <linux/init.h>
#include <linux/module.h>
#include <linux/device.h>
int mybus_match(struct device *dev, struct device_driver *drv)
{
printk(KERN_ALAR "mybus matching!\n");
return 0;
}
struct bus_type mybus = {
.name = "mybus",
.match = mybus_match,
};
static int mybus_init(void)
{
printk(KERN_ALAR "mybus register!\n");
return bus_register(&mybus);
}
static void mybus_exit(void)
{
printk(KERN_ALAR "mybus unregister!\n");
bus_unregister(&mybus);
}
EXPORT_SYSBOL(mybus);
module_init(mybus_init);
module_exit(mybus_exit);
设备:
#include <linux/module.h>
#include <linux/init.h>
#include <linux/device.h>
MODULE_LICENSE("GPL");
extern struct bus_type mybus;
struct device my_device = {
.init_name = "my_dev",
.bus = mybus,
};
static int mydevice_init(void)
{
printk(KERN_ALARM"device register!\n");
return device_register(&my_device);
}
static void mydevice_exit(void)
{
printk(KERN_ALARM"device unregister!\n");
device_unregister(&my_device);
}
module_init(mydevice_init);
module_exit(mydevice_exit);
驱动:
#include <linux/module.h>
#include <linux/init.h>
#include <linux/device.h>
MODULE_LICENSE("GPL");
extern struct bus_type mybus;
int driver_probe(struct device *dev)
{
printk(KERN_ALARM"driver has found a device,now probed");
return 0;
}
struct device_driver my_device_driver = {
.init_name = "my_dev",
.bus = mybus,
.probe = driver_probe,
};
static int mydevice_driver_init(void)
{
printk(KERN_ALARM"driver register!\n");
return driver_register(&my_device_driver);
}
static void mydevice_driver_exit(void)
{
printk(KERN_ALARM"device unregister!\n");
driver_unregister(&my_device_driver);
}
module_init(mydevice_driver_init);
module_exit(mydevice_driver_exit);