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



    懒惰不会让你一下子跌到 但会在不知不觉中减少你的收获; 勤奋也不会让你一夜成功 但会在不知不觉中积累你的成果 越努力,越幸运。
  • 相关阅读:
    初探Object Pascal的类(一)
    初探Object Pascal的类(二)
    强制类型转换(Casting)
    初探Object Pascal的类(三)
    子界类型(Subrange types)
    浅析枚举类型(Enumerated types)
    指针(Pointer)
    浅谈WEBGIS运用栅格地图实现原理[更新:Google Maps带来的新型WebGIS设计模式]
    算我给Google本地和E都市做个广告吧
    Google地图的配色问题(以及MapBar和51ditu)
  • 原文地址:https://www.cnblogs.com/Rainingday/p/12884443.html
Copyright © 2011-2022 走看看