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");


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

Linux系统ioctl使用示例 ioctl实验

本文是我在andoid实验的ioctl的功能,如双向传递参数。贴出来希望对学习ioctl的人很有帮助。     linux的ioctl功能是很强大的,android显示模块还有camera模块都离不...
  • eqwewr
  • eqwewr
  • 2013年01月12日 14:35
  • 4768

组合测试pict生成用例的基本使用

项目中用到pict生成用例测试,洒家现收集了一些pict的基本使用记录下来,分享出来。 使用微软pict测试工具生成组合测试用例: 需要待测程序模型文件,文件中描述了待测程序的条件因素,以及可...
  • new_culture
  • new_culture
  • 2016年08月02日 10:33
  • 1426

ioctl函数的作用与使用

ioctl函数的作用 特殊的read,write,   当你用read,write不能完成某一功能时,就用ioctl 我这里说的ioctl函数是在驱动程序里的,因为我不知道还有没有别的...
  • bamboolsu
  • bamboolsu
  • 2015年01月23日 17:57
  • 3180

junit参数化测试的使用方法

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

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

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

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

Talking To Device Files 与设备文件对话 (writes and IOCTLs) 设备文件是用来代表相对应的硬件设备。绝大多数的硬件设备是用来进行输出和输入操作的,所以在内核...
  • xi_hong_shi
  • xi_hong_shi
  • 2012年08月17日 10:01
  • 12640

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

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

Iperf 带宽性能测试使用方法与参数说明

Iperf 带宽性能测试使用方法与参数说明 转自 http://www.net130.com/CMS/Pub/special/special_fzjh/special_fzjh_yy/...
  • skykingf
  • skykingf
  • 2013年06月11日 20:57
  • 1650

Junit参数化测试的使用方法

junit参数化测试的使用方法 JUnit参数化测试的五个步骤: (1)为准备使用参数化测试的测试类指定特殊的运行器 org.junit.runners.Parameterized。 (2)为测试类声...
  • chenyechao
  • chenyechao
  • 2012年10月14日 16:21
  • 14857

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

redis一个基于内存的数据库,是一种非关系型数据库(NoSql) 首先:从网上下载redis 比如我的是redis-2.8.12 网上下载的window版64位 虽然官网给的只有linux版的,但...
  • ccnn_yanan
  • ccnn_yanan
  • 2016年08月16日 15:36
  • 388
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ioctl 参数使用方法-实例+测试
举报原因:
原因补充:

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