zoukankan      html  css  js  c++  java
  • linux驱动学习——驱动大致框架

    以led为例子 非设备树 这样需要在open read write函数中 对硬件做处理 通用性较差
    /* 1. 确定主设备号                                                                 */

    static int major = 0;

    /* 3. 实现对应的open/read/write等函数,填入file_operations结构体                   */

    static int led_drv_open (struct inode *node, struct file *file)
    static int led_drv_close (struct inode *node, struct file *file)
    static ssize_t led_drv_write (struct file *file, const char __user *buf, size_t size, loff_t *offset)
    static ssize_t led_drv_read (struct file *file, char __user *buf, size_t size, loff_t *offset)
    。。。。

    /* 2 定义自己的file_operations结构体                                              */

    static struct file_operations led_drv = {
        .owner     = THIS_MODULE,
        .open    = led_drv_open,
        .read    = led_drv_read,
        .write   = led_drv_write,
        .release = led_drv_close,
    };

    /* 4. 把file_operations结构体告诉内核:注册驱动程序 */
    /* 5. 谁来注册驱动程序啊?得有一个入口函数:安装驱动程序时,就会去调用这个入口函数 */
    /* 6. 有入口函数就应该有出口函数:卸载驱动程序时,就会去调用这个出口函数           */
    /* 7. 其他完善:提供设备信息,自动创建设备节点                                     */

    module_init(xxx_init);
    module_exit(xxx_exit);
    
    MODULE_LICENSE("GPL");

    /* 1. 定义platform_driver */
    /* 2. 在入口函数注册platform_driver */
    /* 3. 有入口函数就应该有出口函数:卸载驱动程序时,就会去调用这个出口函数卸载platform_driver*/

    /* 7. 其他完善:提供设备信息,自动创建设备节点                                     */



    懒惰不会让你一下子跌到 但会在不知不觉中减少你的收获; 勤奋也不会让你一夜成功 但会在不知不觉中积累你的成果 越努力,越幸运。
  • 相关阅读:
    原创:一段利用C#2005操作FOXPRO表的函数
    对VS2005的TreeView控件的困惑(或者是建议吧)
    哎呀!实在是巨烦“驱动之家”这个网站!!
    一种Server Application Unavailable错误的解决办法:
    Win7系统下解决VB6.0鼠标滚轮支持
    [分享]关于水晶报表导出到PDF格式的一个注意事项
    mmsPlayer, for android,ios ,wince,windows,wm等
    C#汉字生成拼音
    使用C#读写文件
    如何使PNG图片在IE浏览器实现透明效果
  • 原文地址:https://www.cnblogs.com/Rainingday/p/12884443.html
Copyright © 2011-2022 走看看