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