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



    懒惰不会让你一下子跌到 但会在不知不觉中减少你的收获; 勤奋也不会让你一夜成功 但会在不知不觉中积累你的成果 越努力,越幸运。
  • 相关阅读:
    CF1137FMatches Are Not a Child‘s Play【LCT】
    P4491[HAOI2018]染色【多项式,二项式反演】
    P3170[CQOI2015]标识设计【插头dp】
    log4j 使用教程说明
    log4j中Logger.getLogger()加载一个类提示错误
    编程基础 0x00008 的0x代表什么?
    编程基础 快速的进行 2进制,10进制,16进制 的 相互转换
    Java 基础 equals,hashcode和==的区别
    位运算 左移右移运算符 >>, <<, >>>
    Java 虚拟机 2.2 运行时数据区 Runtime Data Area
  • 原文地址:https://www.cnblogs.com/Rainingday/p/12884443.html
Copyright © 2011-2022 走看看