📄 mydriver.h
字号:
#include <linux/ioctl.h>
#include <linux/config.h>
#include <linux/module.h>
#include <linux/devfs_fs_kernel.h>
#include <linux/kernel.h> /* printk() */
#include <linux/slab.h> /* kmalloc() */
#include <linux/fs.h> /* everything... */
#include <linux/errno.h> /* error codes */
#include <linux/types.h> /* size_t */
#include <linux/proc_fs.h>
#include <linux/fcntl.h> /* O_ACCMODE */
#include <uaccess.h>
#include <asm/system.h> /* cli(), *_flags */
# define TRUE 1
# define FALSE 0
# define OK 1
# define ERROR 0
int GetDeviceType(struct inode *inode)
{
return MINOR(inode->i_rdev) >> 4;
}
/*-----------------------------------------*/
/* 这个函数得到注册的次设备号 */
/*-----------------------------------------*/
int GetDeviceNum(struct inode *inode)
{
return MINOR(inode->i_rdev) & 0xf;
}
/*-----------------------------------------*/
/* 得到文件的访问权限 */
/*-----------------------------------------*/
int GetFileAccessMode(struct file *filp)
{
return filp->f_flags;
}
/*-----------------------------------------*/
/* 用户内存是否有读的权限 */
/*-----------------------------------------*/
int CanUserMemRead(void *ptr, int size)
{
int err;
err = !access_ok(VERIFY_READ, ptr, size);
if(err)
return FALSE;
else
return TRUE;
}
/*-----------------------------------------*/
/* 用户内存是否有写的权限 */
/*-----------------------------------------*/
int CanUserMemWrite(void *ptr, int size)
{
int err;
err = !access_ok(VERIFY_WRITE, ptr, size);
if(err)
return FALSE;
else
return TRUE;
}
/*-----------------------------------------*/
/* 检查用户内存的权限 */
/* 用在IOCTL这个函数中 */
/*-----------------------------------------*/
int CheckUserMemory(unsigned int cmd,unsigned long arg)
{
int err=0;
if (_IOC_DIR(cmd) & _IOC_READ)
err = !access_ok(VERIFY_WRITE, (void *)arg, _IOC_SIZE(cmd));
else if (_IOC_DIR(cmd) & _IOC_WRITE)
err = !access_ok(VERIFY_READ, (void *)arg, _IOC_SIZE(cmd));
if (err) return ERROR;
return OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -