Linux bus总线

#include <linux/module.h>

#include <linux/init.h>

#include <linux/device.h>

struct bus_type my_usb_bus = {

    .name = "my_usb",   //总线的名字,注册成功后会在/sys/bus/目录下看到

};

#define COUNT_SIZE  100

char data[COUNT_SIZE] = "Hello MikeChen";

/*

    内核到用户空间的数据

*/

static ssize_t show_bus_data(struct bus_type * bus, char *buf)  

{

    return snprintf(buf, COUNT_SIZE, "show Bus Data: %s\n", data);

}

/*

    用户空间到内核的数据

*/

static ssize_t store_bus_data(struct bus_type * bus, const char *buf, size_t count)

{

    return snprintf(data, COUNT_SIZE, "Store Bus Data: %s\n", buf);

}

/*

    注意该宏最终返回bus_attr_version

    #define BUS_ATTR(_name, _mode, _show, _store) \

    struct bus_attribute bus_attr_##_name = __ATTR(_name, _mode, _show, _store)

*/

static BUS_ATTR(version, S_IRUGO | S_IWUGO, show_bus_data, store_bus_data);

static int __init my_usb_bus_init(void)

{

    int ret;

    ret = bus_register(&my_usb_bus);

    if (ret)

    {

        printk("Bus register failed!, ret: %d\n", ret);

        return ret;

    }

    printk("Usb init commplete\n");

    ret = bus_create_file(&my_usb_bus, &bus_attr_version);

    if (ret)

    {

        printk("Bus Create file failed");

        bus_unregister(&my_usb_bus);

        return 0;

    }

    printk("Bus ATTR Create Commplete\n");

    

    return 0;

}

static void __exit my_usb_bus_exit(void)

{

    bus_remove_file(&my_usb_bus, &bus_attr_version)

    bus_unregister(&my_usb_bus);

    printk("Usb Bus exit\n");

}

MODULE_LICENSE("GPL");

MODULE_AUTHOR("MIKE CHEN");

module_init(my_usb_bus_init);

module_exit(my_usb_bus_exit);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值