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

原创 2014年11月08日 17:22:01
下面的代码可以正常显示吗
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");


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

junit参数化测试的使用方法

  • 2016年01月02日 12:39
  • 21KB
  • 下载

junit单元测试使用方法(实例)

  • 2011年11月27日 16:32
  • 44KB
  • 下载

Junit参数化测试的使用方法

junit参数化测试的使用方法 JUnit参数化测试的五个步骤: (1)为准备使用参数化测试的测试类指定特殊的运行器 org.junit.runners.Parameterized。 (2)为测试类声...

qtp测试软件的使用方法及实例

  • 2015年08月11日 17:25
  • 4.66MB
  • 下载

Android自动化测试之Monkeyrunner使用方法及实例

目前android SDK里自带的现成的测试工具有monkey 和 monkeyrunner两个。大家别看这俩兄弟名字相像,但其实是完完全全不同的两个工具,应用在不同的测试领域。总的来说,monkey...
  • zm2714
  • zm2714
  • 2012年09月14日 21:34
  • 138648

redis数据库的使用方法以及测试实例

redis一个基于内存的数据库,是一种非关系型数据库(NoSql) 首先:从网上下载redis 比如我的是redis-2.8.12 网上下载的window版64位 虽然官网给的只有linux版的,但...

ioctl 的使用方法详细说明与例子

Talking To Device Files 与设备文件对话 (writes and IOCTLs) 设备文件是用来代表相对应的硬件设备。绝大多数的硬件设备是用来进行输出和输入操作的,所以在内核...

GetCallbackEvent参数和使用方法

  • 2010年04月14日 11:58
  • 8KB
  • 下载

jwPlayer播放器使用方法和参数

找一个相对比较好点的播放器,国内的ckpkayer用的多,但是bug也很多,国外知名的jwplaye播放器很出名,比如慕课网使用的就是jw播放器,看了官方的文档之后简单的操作进行了记录。 HTM...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ioctl 参数使用方法-实例+测试
举报原因:
原因补充:

(最多只允许输入30个字)