ioctl 参数使用方法-实例+测试

下面的代码可以正常显示吗
obj-m = ioctl.o
KDIR  = /lib/modules/$(shell uname -r)/build
PWD = $(shell pwd)
default: 
	$(MAKE) -C $(KDIR) M=$(PWD) modules
clean: 
	$(RM) *.o *.mod.c *.ko *.order *.symvers -r
C语言的呢
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(void)
{
	int fd;
	int a = 8;
	fd = open("/dev/ioctl_misc",O_WRONLY);
	if(fd == -1)
			printf("open /dev/ioctl_misc failed\n");
	fd = ioctl(fd,0,&a);
	//fd = ioctl(fd,0,NULL);
	if(fd == -1)
			printf("ioctl faile\n");
	return 0;
}

c语言驱动程序试一试:
#include <linux/time.h>
#include <linux/module.h>
#include <linux/device.h>
#include <linux/miscdevice.h>
#include <linux/fs.h>
#include <linux/uaccess.h>
static int ioctl_open(struct inode *inode,struct file * filep)
{
	return 0;
}
static long ioctl_ioctl(struct file *filep,unsigned int cmd,unsigned long arg)
{
		void __user *tmp = (void __user *)arg;/*__user 是给内核代码静态分析工具Sparse用的,如果使用了__user
																					宏的指针不在用户地址空间初始化,或者指向内核地址空间,设备地址空间等
																					Sparse会给出警告的*/
		int __user *argp = tmp;
		int val;
		if(get_user(val,argp))						/*此处使用get_user(),不用copy_from_user(),原因在文章末尾总结处*/
				return -EFAULT;
		printk("ioctl val = %d\n",val);
		return 0;
}
static const struct file_operations ioctl_fops = {
	.owner = THIS_MODULE,
	.unlocked_ioctl = ioctl_ioctl,
	.open = ioctl_open,
};

static struct miscdevice ioctl_miscdev = {
	.minor = MISC_DYNAMIC_MINOR,
	.name = "ioctl_misc",
	.fops = &ioctl_fops,
};

static int __init ioctl_init(void)
{
	int err;
	err = misc_register(&ioctl_miscdev);
	if(err)
		return err;
	printk("ioctl register success\n");
	return 0;
}
static void __exit ioctl_exit(void)
{
	misc_deregister(&ioctl_miscdev);
}

module_init(ioctl_init);
module_exit(ioctl_exit);
MODULE_LICENSE("GPL");


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cyfhan/article/details/40922651
文章标签: 内核 c语言
个人分类: linux驱动
上一篇最简单linux字符驱动程序及makefile
下一篇linux常用命令-diff
想对作者说点什么? 我来说一句

i2c_ioctl详解

2014年08月06日 137KB 下载

IOCTL头文件说明

2011年02月17日 1KB 下载

tcpflow使用手册

2009年11月24日 12KB 下载

linux下ioctl函数

2013年11月30日 22KB 下载

arguments对象的使用

2011年05月22日 3KB 下载

ioctl函数的使用

2010年07月19日 47KB 下载

优化组合测试法(软件测试

2010年01月12日 165KB 下载

V4L2功能列表大全及讲解

2012年03月29日 35KB 下载

没有更多推荐了,返回首页

关闭
关闭