zoukankan      html  css  js  c++  java
  • 总线置顶[置顶] 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);

        总线和置顶总线和置顶

    文章结束给大家分享下程序员的一些笑话语录: AdobeFlash拖垮Windows拖垮IE!又拖垮Linux拖垮Ubuntu拖垮FirxEox!还拖垮BSD拖垮MacOS拖垮Safri!简直无所不拖!AdobeFlash滚出网路世界!不要以为市占有率高就可以持续出烂货产品!以后替代品多得是!

    --------------------------------- 原创文章 By
    总线和置顶
    ---------------------------------

  • 相关阅读:
    初尝2D骨骼动画编辑工具SPINE,并into Unity3D
    Unity3D优化总结(一)
    ARPG游戏打击感相关的技术简单总结
    总结一下一般游戏中3D模型各种勾边方法遇到的工程性问题
    多次被坑了后,重温设计模式原则
    unity shader序列帧动画代码,顺便吐槽一下unity shader系统
    暗黑三泛光算法研究
    《全民无双》锁链刀光程序生成算法,即U3D——刀光轨迹插件的改进
    Low-level Thinking in High-level Shading Languages
    python实现智能语音天气预报
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3106889.html
Copyright © 2011-2022 走看看