假设我有一个具有此功能 my_open 的模块:
int my_open( struct inode *inode, struct file *filp ) {
filp->private_data = //allocate private data
if( filp->f_mode & FMODE_READ )
//handle read opening
if( filp->f_mode & FMODE_WRITE )
//handle write opening
if (MINOR( inode->i_rdev )==2){
filp->f_op = &my_fops2;
}
return 0;
}
我如何从 shell/终端使用这个函数?
最佳答案
这是 open
设备驱动程序的功能,
或者它是披着狼皮的羊 [原文如此]。
万一这是普通的普通用户级代码,
将其编译成可执行文件并使用它。但是如果是设备驱动的open
功能,
- 首先,
确定它是否被编译/链接到当前运行的内核中。
如果不是,就这样做(将其编译/链接到内核,然后重新启动)。
- 或者, 您可能有能力将它动态加载到内核中。 具体如何操作取决于您的特定操作系统 并且超出了这个问题的范围。
- 找出它是b锁设备还是c字符设备, 以及它的主要设备号是什么。 我也不能具体告诉你该怎么做; 咨询您本地的资源。
OK,假设它是一个主设备号为42的字符设备。 翻看
/dev
(使用ls -l
)对于以c
开头的条目 (对于“字符”)并包含42, <i>something</i>
大小应该在哪里,像这样:drwxr-xr-x 1 root root 512 Feb 10 2015 . drwxr-xr-x 1 root root 1024 Feb 10 2015 .. crw-rw-rw- 1 root root 42, 0 Aug 15 18:31 foo crw-rw-rw- 1 root root 42, 2 Aug 15 18:31 fu crw-rw-rw- 1 root root 42, 17 Aug 15 18:31 fubar
如果找不到,请创建一些。参见
man mknod
了解详情。 您可能应该创建一个次设备号为 2 的设备 至少一个号码不同 (因为代码将 2 视为特例)。对
/dev/<i>whatever</i>
做随心所欲地归档, 基于驱动程序的预期功能。 (确定驱动程序的预期功能超出了范围。) 例如,您可以尝试类似od -cb /dev/foo echo "Hello, world." > /dev/fu
当然,如果是 block 设备, 替换
c
在上面的说明中使用b
.
关于c - Linux : Using module functions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32030179/