标签:driver 分配 根文件系统 font 结构体 cat misc ini 自动分配
//miscdevice结构体 struct miscdevice { //次设备号一般赋值为MISC_DYNAMIC_MINOR---->由内核自动去分配次设备号 int minor; //misc设备的名称 const char *name; //文件操作结构体 const struct file_operations *fops; struct list_head list; struct device *parent; struct device *this_device; const char *nodename; umode_t mode; };这里,我们写最简单的misc设备,我们只需要关注minor(次设备号),name(设备名称),fops(文件操作函数).
#include <linux/kernel.h> #include <linux/module.h> #include <linux/miscdevice.h> #include <linux/fs.h> #include <linux/types.h> #include <linux/moduleparam.h> #include <linux/slab.h> #include <linux/ioctl.h> #include <linux/cdev.h> #include <linux/delay.h> #include <linux/gpio.h> #include <mach/gpio.h> #include <plat/gpio-cfg.h> //misc设备名称--->就是字符设备 #define DEVICE_NAME "misc_dev" //实现open函数 int tiny4412_misc_dev_open(struct inode *inode, struct file *filp) { printk("tiny4412 misc dev open!\n"); return 0 ; } //实现close函数 int tiny4412_misc_dev_close(struct inode *inode, struct file *filp) { printk("tiny4412 misc dev close!\n"); return 0 ; } //初始化文件操作结构体 struct file_operations tiny4412_file_ops = { .owner = THIS_MODULE , .open = tiny4412_misc_dev_open, .release = tiny4412_misc_dev_close, }; //初始化misc设备结构体 struct miscdevice tiny4412_misc_dev = { //由内核自动分配次设备号 .minor = MISC_DYNAMIC_MINOR , //初始化设备名称 .name = DEVICE_NAME , //初始化文件操作结构体 .fops = &tiny4412_file_ops, }; static int __init tiny4412_misc_dev_init(void) { int ret_error ; //注册misc设备 int ret = misc_register(&tiny4412_misc_dev); if(ret != 0){ ret_error = ret ; printk("misc register fair!\n"); goto fair ; } printk("misc init success!\n"); return ret ; fair: return ret_error ; } static void __exit tiny4412_misc_dev_exit(void) { //注销misc设备 misc_deregister(&tiny4412_misc_dev); } module_init(tiny4412_misc_dev_init); module_exit(tiny4412_misc_dev_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("YYX add misc driver");然后,将驱动程序编译后,讲zImage下载到板子上。
手把手教你从零实现Linux misc设备驱动一(基于友善之臂4412开发板)
标签:driver 分配 根文件系统 font 结构体 cat misc ini 自动分配
原文地址:http://blog.csdn.net/morixinguan/article/details/63039090