本文共 2672 字,大约阅读时间需要 8 分钟。
/*驱动端*//********filename : test.c********************************/#include#include #include #include #include #define MISC_NAME "test"#define BOADRID_READ 9999long misc_ioctl(struct file *file, unsigned int cmd, unsigned long arg){ unsigned int __user *argp = (unsigned int __user *)arg; unsigned int boardid = 90; int ret =1; switch(cmd) { case BOADRID_READ: ret = copy_to_user(argp,&boardid, sizeof(unsigned int)); //ret = copy_to_user(&arg,&boardid, sizeof(unsigned int)); if(ret) { printk("ret : %d\n",ret); printk("IOC_VDEC_GET_VIDEO_LOSS error\n"); return -1; } break; default: return -1; } return 0;}int misc_close(struct inode * inode, struct file * file){ return 0;}/**********************************************************/static int misc_open(struct inode *inode, struct file *file){ printk("misc open\n"); return 0;}/**********************************************************/static const struct file_operations misc_fops ={ .owner = THIS_MODULE, .open = misc_open, .unlocked_ioctl = misc_ioctl, .release = misc_close};/**********************************************************/static struct miscdevice misc_dev ={ .minor = MISC_DYNAMIC_MINOR,//这是次设备号,如果为255,会自动分配一个次设备号.MISC_DYNAMIC_MINOR就是255 .name = MISC_NAME,//设备的名字,加载成功会在/dev/下创建一个以MISC_NAME为名字的设备 .fops = &misc_fops,//文件操作指针,供上层调用};/**********************************************************/static int __init misc_init(void){ int ret; ret = misc_register(&misc_dev); if (ret) { printk("misc_register error\n"); return ret; } return 0;}static void __exit misc_exit(void){ misc_deregister(&misc_dev);}/**********************************************************/module_init(misc_init);module_exit(misc_exit);MODULE_LICENSE("GPL");MODULE_AUTHOR("XXX");
/*APP端*/#include#include #include #include #include #define BOADRID_READ 9999int main(int argc, const char *argv[]){ int fd; int ret; int id; char * file = "/dev/test"; fd = open(file, O_RDWR); if (fd < 0) { printf("open %s failed!\n", file); return -1; } ret = ioctl(fd,BOADRID_READ,&id); if(ret < 0){ printf("get board id failed!!!\n"); }else{ printf("get board id sueecssed!!!\n"); } printf("%d\n",id); return 0;}
ifneq ($(KERNELRELEASE),)obj-m:=test.oelseKDIR := /lib/modules/$(shell uname -r)/buildPWD:=$(shell pwd)all: make -C $(KDIR) M=$(PWD) modulesclean: rm -f *.ko *.o *.symvers *.cmd *.cmd.oendif
转载地址:http://ftigi.baihongyu.com/