⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mydriver.h

📁 一个简单的驱动程序开发框架,可以掌握驱动开发的基本流程.
💻 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 + -