总线驱动模型

总线:

#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);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值