- 论坛徽章:
- 0
|
这是驱动中的ioctl函数,当系统以调用这个函数时,就立刻卡住了 然后键盘上数字键盘的指示灯灭掉,另外两个指示灯不停的闪,不知道是怎么回事?
#define MEM_CLEAR 0
#define MEM_RE 1
#define MEM_SETSIZE 2
#define GLOBALMEM_SIZE 0x1000
#define GLOBALMEM_MAJOR 255
struct globalmem_dev
{
unsigned int count;
unsigned int size;
struct cdev cd;
unsigned char mem[GLOBALMEM_SIZE];
};
struct globalmem_dev *g_dev;
int globalmem_ioctl(struct inode *inodep,
struct file *filp,unsigned int cmd,unsigned long arg)
{
int i;
char c;
switch(cmd)
{
case MEM_CLEAR:
memset(g_dev->mem,0,g_dev->count);
printk(KERN_INFO "globalmem is set to zero\n");
break;
case MEM_RE:
if(g_dev->count!=1)
return -1;
for(i=0;i <g_dev->size/2;i++){
c=g_dev->mem[i];
g_dev->mem[i]=g_dev->mem[g_dev->size-i-1];
g_dev->mem[g_dev->size-i-1]=c;
}
break;
case MEM_SETSIZE:
if(arg <0 || arg>GLOBALMEM_SIZE)
break;
g_dev->size=arg;
break;
default:
return -1;
}
return 0; |
[ 本帖最后由 dreamice 于 2009-8-6 20:24 编辑 ] |
|