编写字符驱动时出了问题: linux驱动测试程序打不开驱动设备文件 。求指导!谢谢了!

2025-04-01 11:47:46
推荐回答(1个)
回答1:

应用层默认open函数定义:int open( const char * pathname,int flags);

驱程序般open函数定义:int(*open)(struct inode *inode, struct file *filp)

LED点亮应用层主函数
[code=C/C++][/code]void main(void)
{
int testdev;
int i;
char buf[10];
testdev = open ("/dev/test",O_RDWR); //应该用应用层默认Open函数吧
if(testdev == -1)
{
printf("Cann't open file...../n");
exit(0);
}
printf("buf = 0x%x/n",buf);
read(testdev,buf,10); //功opentestdev值0能够file文件描述符呢
write(testdev,buf,1);
led_ctl.port='G';
led_ctl.bit=5;
led_ctl.value=0;
ioctl(testdev,GPIO_IO_SET_GPG,&led_ctl);
printf("%s",buf);
pause();
close(testdev);
}

我疑问:
1.驱程序open函数:int(*open)(struct inode *inode, struct file *filp)
哪使用啊
2.驱open函数般用做啊
3.文代码功opentestdev值0能够file文件描述符呢
才始习Linux设备驱发借本书代码没注释面驱意思懂希望各位神指点指点万谢
面都我编写字符设备驱代码请问static int read_test()函数始static void release_test()函数参数内部代码意义
万谢

采纳前加100谢谢

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

unsigned int test_major = 0;

static int read_test(struct inode *node,struct file *fle,char *buf,int count)
{
int left;
if (access_ok(VERIFY_WRITE, buf, count))
{
for (left = count; left > 0; left--)
{
_put_user('a',buf);
buf ++;
}
}
return count;
}

static int write_test(struct inode *node, struct file *fle, char *buf, int count)
{
return count;
}

static int open_test(struct inode *inode,struct file *file)
{
try_module_get(THIS_MODULE);
return 0;
}

static void release_test(struct inode *inode, struct file *file)
{
module_put(THIS_MODULE);
}

struct file_operations test_fops =
{
.owner = THIS_MODULE,
.read = read_test,
.write = write_test,
.open = open_test,
.release = release_test,
};

int init_module()
{
int result;
result = register_chrdev(0,"test,&test_fops");
if (result < 0)
{
printk(KERN_INFO "dddddddddddddddd");
return result;
}
return 0;
}