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

 



 

上一篇:u-boot kernel driver的理解


下一篇:Camera Feature(1)--介绍及常见问题