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. 其他完善:提供设备信息,自动创建设备节点                                     */



    懒惰不会让你一下子跌到 但会在不知不觉中减少你的收获; 勤奋也不会让你一夜成功 但会在不知不觉中积累你的成果 越努力,越幸运。
  • 相关阅读:
    java中反射
    mysql 的锁机制和ACID
    名词记忆
    switch语法之PHP
    PHP代码批量加密
    windows 20003 扩展安装后不成功的原因
    apache配置虚拟目录
    移动web在ios和android下点击元素出现阴影问题
    同时屏蔽ios和android下点击元素时出现的阴影
    DES
  • 原文地址:https://www.cnblogs.com/Rainingday/p/12884443.html
Copyright © 2011-2022 走看看