ioctl经营无纸装置频繁使用的类型。同时这是一个非常实用的方法进程调试。

这里正在进行wdt该文章继续

static long at91_wdt_ioctl(struct file *file,

unsigned int cmd, unsigned long arg)

{

void __user *argp = (void __user *)arg;

int __user *p = argp;

int new_value;





switch (cmd) {

case WDIOC_GETSUPPORT:

return copy_to_user(argp, &at91_wdt_info,

sizeof(at91_wdt_info)) ? -EFAULT : 0;

case WDIOC_GETSTATUS:

case WDIOC_GETBOOTSTATUS:

return put_user(0, p);

case WDIOC_SETOPTIONS:

if (get_user(new_value, p))

return -EFAULT;

if (new_value & WDIOS_DISABLECARD)

at91_wdt_stop();

if (new_value & WDIOS_ENABLECARD)

at91_wdt_start();

return 0;

case WDIOC_KEEPALIVE:

at91_wdt_reload();
/* pat the watchdog */

return 0;

case WDIOC_SETTIMEOUT:

if (get_user(new_value, p))

return -EFAULT;

if (at91_wdt_settimeout(new_value))

return -EINVAL;

/* Enable new time value */

at91_wdt_start();

/* Return current value */

return put_user(wdt_time, p);

case WDIOC_GETTIMEOUT:

return put_user(wdt_time, p);

default:

return -ENOTTY;

}

}

这里先定义两个一个最底层的被调用接口。在这里面初始化了几个命令,这些命令就能够直接调用你自己的底层函数了

之后面临的就是怎么让这个ioctl被上层可一调用

这里有一个系统设置的结构体

static const struct file_operations at91wdt_fops = {

.owner
= THIS_MODULE,

.llseek
= no_llseek,

.unlocked_ioctl
= at91_wdt_ioctl,

.open = at91_wdt_open,

.release
= at91_wdt_close,

.write
= at91_wdt_write,

};

把ioctl赋给unlocked

再把这个结构体赋给miscdevice结构体   这里就能够看出来他是一个杂项设备  不是block  或者字符设备了

static struct miscdevice at91wdt_miscdev = {

.minor
= WATCHDOG_MINOR,

.name = "watchdog",

.fops = &at91wdt_fops,

};

这里再把它注冊给系统就好了

static int __devinit at91wdt_probe(struct platform_device *pdev)

{

int res;





if (at91wdt_miscdev.parent)

return -EBUSY;

at91wdt_miscdev.parent = &pdev->dev;





res = misc_register(&at91wdt_miscdev);

if (res)

return res;





printk(KERN_INFO "AT91 Watchdog Timer enabled (%d seconds%s)\n",

wdt_time, nowayout ?

", nowayout" : "");

return 0;

}

上面就是这个设备备注測时的调用   能够看到開始就把这个ioctl的父结构体赋给系统了

后面系上层系统将能够看到的功能    它可以通过驱动前来层

版权声明:本文博主原创文章,博客,未经同意不得转载。

kernel 于ioctl申请书的更多相关文章

  1. 【转】wpa_supplicant与wpa_cli之间通信过程

    [转]wpa_supplicant与wpa_cli之间通信过程 转自:http://blog.chinaunix.net/uid-26585427-id-4051479.html wpa_suppli ...

  2. Linux Communication Mechanism Summarize

    目录 . Linux通信机制分类简介 . 控制机制 0x1: 竞态条件 0x2: 临界区 . Inter-Process Communication (IPC) mechanisms: 进程间通信机制 ...

  3. linux2.6内核compat_ioctl函数

    一.内核原型(linux2.6.28-7) long (*compat_ioctl)(struct tty_struct *tty, struct file * file,               ...

  4. wpa_supplicant软件架构分析

    wpa_supplicant软件架构分析 1. 启动命令 wpa supplicant 在启动时,启动命令可以带有很多参数,目前我们的启动命令如下: wpa_supplicant /system/bi ...

  5. wpa_supplicant 使用

    (1)通过adb命令行,可以直接打开supplicant,从而运行wpa_cli,可以解决客户没有显示屏而无法操作WIFI的问题,还可以避免UI的问题带到driver.进一步来说,可以用在很多没有键盘 ...

  6. wap_supplicant介绍

    目前可以使用wireless-tools 或wpa_supplicant工具来配置无线网络.请记住重要的一点是,对无线网络的配置是全局性的,而非针对具体的接口. wpa_supplicant是一个较好 ...

  7. WEXT driver的执行过程实现(iwpriv部分/softapcontroller)

    之前在看wifi driver源代码时一直有一个疑惑就是net dev的wireless_handlers中(WEXT类型的接口)提供两个iw_handler接口,怎么知道上层是调用的是private ...

  8. android摄像头(camera)之buffer管理

    一,V4L2驱动申请buffer 视频应用可以通过两种方式从V4L2驱动申请buffer 1. V4L2_MEMORY_USERPTR方式, 顾名思义是用户空间指针的意思,应用层负责分配需要的内存空间 ...

  9. unlocked_ioctl和compat_ioctl

    参考: https://www.cnblogs.com/super119/archive/2012/12/03/2799967.html https://lwn.net/Articles/119652 ...

随机推荐

  1. ie浏览器提交参数和其它浏览器的区别

    场景描述: 用户注册模块(ajax提交方式,post方法),在url后追加了一个参数,如:url+‘btnvalue=中文参数’,如此在非ie浏览器注册时,功能完好,但在ie下注册不成功.调式后发现在 ...

  2. 【IOS工具类】获得设备唯一标识(兼容IOS5,6,7)

    UIDevice+IdentifierAddition.h: #import <Foundation/Foundation.h> @interface UIDevice (Identifi ...

  3. nodejs启动守护程序pm2

    nodejs启动守护程序pm2 by 伍雪颖 做了个应用,server放阿里云,只是server总会自己断,后来写了个心跳程序,就是检測应用线程是否还在,不在就再启动, 这种方法好笨重啊,后来发现no ...

  4. UVA 639 (13.08.25)

     Don't Get Rooked  In chess, the rook is a piece that can move any number of squaresvertically or ho ...

  5. Cocos2dx 3.x创建Layer的步骤

    创建 1.新建类文件.注意文件夹为Classes下.否则文件不能正常找到. 2.改动预编译头.如用VS,默觉得#pragma once,为了兼容,改为#ifndef | #define | #endi ...

  6. hdu1690 Bus System (dijkstra)

    Problem Description Because of the huge population of China, public transportation is very important ...

  7. Android开源项目pulltorefresh分析与简单使用

    在Android开发中有时我们须要訪问网络实时刷新数据.比方QQ好友在线状态最新信息,QQ空间须要显示很多其它的好友动态信息,EOE论坛client显示很多其它的文章帖子信息等.android-pul ...

  8. 关于IE打印预览内容显示不全的问题解决

    眼下在调整一个页面打印功能的时候,发现多行文本框TextArea在页面显示的时候,多行文本能够正常显示,可是在打印页面的时候.部分内容就被遮挡住了, 苦思冥想不得其解,后来还是请教了美工. 首先查了下 ...

  9. mysql事务、触发器、视图、存储过程、函数

    存储过程: procedure 概念类似于函数,就是把一段代码封装起来, 当要执行这一段代码的时候,可以通过调用该存储过程来实现. 在封装的语句体里面,可以用if/else, case,while等控 ...

  10. UML之部署图(Deployment Diagram)

    计算机系统由硬件和软件组成,应用软件的命令,先转化为操作系统命令,再转化为汇编语言,最后再转化为二进制命令,由硬件来运行.软件要部署到硬件上才具有生命.Deployment Diagram展示的就是把 ...